From e06ec920f7a5d784e674c4c4b4e6d1da3dc7391d Mon Sep 17 00:00:00 2001 From: Piotr Russ Date: Mon, 16 Nov 2020 00:10:28 +0100 Subject: api, login, auth --- node_modules/detect-indent/index.js | 120 ++++++++++++++++++++++++++++++++ node_modules/detect-indent/license | 21 ++++++ node_modules/detect-indent/package.json | 78 +++++++++++++++++++++ node_modules/detect-indent/readme.md | 110 +++++++++++++++++++++++++++++ 4 files changed, 329 insertions(+) create mode 100644 node_modules/detect-indent/index.js create mode 100644 node_modules/detect-indent/license create mode 100644 node_modules/detect-indent/package.json create mode 100644 node_modules/detect-indent/readme.md (limited to 'node_modules/detect-indent') diff --git a/node_modules/detect-indent/index.js b/node_modules/detect-indent/index.js new file mode 100644 index 0000000..c2da337 --- /dev/null +++ b/node_modules/detect-indent/index.js @@ -0,0 +1,120 @@ +/* eslint-disable guard-for-in */ +'use strict'; +var repeating = require('repeating'); + +// detect either spaces or tabs but not both to properly handle tabs +// for indentation and spaces for alignment +var INDENT_RE = /^(?:( )+|\t+)/; + +function getMostUsed(indents) { + var result = 0; + var maxUsed = 0; + var maxWeight = 0; + + for (var n in indents) { + var indent = indents[n]; + var u = indent[0]; + var w = indent[1]; + + if (u > maxUsed || u === maxUsed && w > maxWeight) { + maxUsed = u; + maxWeight = w; + result = Number(n); + } + } + + return result; +} + +module.exports = function (str) { + if (typeof str !== 'string') { + throw new TypeError('Expected a string'); + } + + // used to see if tabs or spaces are the most used + var tabs = 0; + var spaces = 0; + + // remember the size of previous line's indentation + var prev = 0; + + // remember how many indents/unindents as occurred for a given size + // and how much lines follow a given indentation + // + // indents = { + // 3: [1, 0], + // 4: [1, 5], + // 5: [1, 0], + // 12: [1, 0], + // } + var indents = {}; + + // pointer to the array of last used indent + var current; + + // whether the last action was an indent (opposed to an unindent) + var isIndent; + + str.split(/\n/g).forEach(function (line) { + if (!line) { + // ignore empty lines + return; + } + + var indent; + var matches = line.match(INDENT_RE); + + if (!matches) { + indent = 0; + } else { + indent = matches[0].length; + + if (matches[1]) { + spaces++; + } else { + tabs++; + } + } + + var diff = indent - prev; + prev = indent; + + if (diff) { + // an indent or unindent has been detected + + isIndent = diff > 0; + + current = indents[isIndent ? diff : -diff]; + + if (current) { + current[0]++; + } else { + current = indents[diff] = [1, 0]; + } + } else if (current) { + // if the last action was an indent, increment the weight + current[1] += Number(isIndent); + } + }); + + var amount = getMostUsed(indents); + + var type; + var actual; + if (!amount) { + type = null; + actual = ''; + } else if (spaces >= tabs) { + type = 'space'; + actual = repeating(' ', amount); + } else { + type = 'tab'; + actual = repeating('\t', amount); + } + + return { + amount: amount, + type: type, + indent: actual + }; +}; diff --git a/node_modules/detect-indent/license b/node_modules/detect-indent/license new file mode 100644 index 0000000..654d0bf --- /dev/null +++ b/node_modules/detect-indent/license @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) Sindre Sorhus (sindresorhus.com) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/node_modules/detect-indent/package.json b/node_modules/detect-indent/package.json new file mode 100644 index 0000000..6631754 --- /dev/null +++ b/node_modules/detect-indent/package.json @@ -0,0 +1,78 @@ +{ + "_from": "detect-indent@^4.0.0", + "_id": "detect-indent@4.0.0", + "_inBundle": false, + "_integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", + "_location": "/detect-indent", + "_phantomChildren": {}, + "_requested": { + "type": "range", + "registry": true, + "raw": "detect-indent@^4.0.0", + "name": "detect-indent", + "escapedName": "detect-indent", + "rawSpec": "^4.0.0", + "saveSpec": null, + "fetchSpec": "^4.0.0" + }, + "_requiredBy": [ + "/babel-generator" + ], + "_resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-4.0.0.tgz", + "_shasum": "f76d064352cdf43a1cb6ce619c4ee3a9475de208", + "_spec": "detect-indent@^4.0.0", + "_where": "/home/pruss/Dev/3-minute-website/node_modules/babel-generator", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "sindresorhus.com" + }, + "bugs": { + "url": "https://github.com/sindresorhus/detect-indent/issues" + }, + "bundleDependencies": false, + "dependencies": { + "repeating": "^2.0.0" + }, + "deprecated": false, + "description": "Detect the indentation of code", + "devDependencies": { + "ava": "*", + "xo": "*" + }, + "engines": { + "node": ">=0.10.0" + }, + "files": [ + "index.js" + ], + "homepage": "https://github.com/sindresorhus/detect-indent#readme", + "keywords": [ + "indent", + "indentation", + "detect", + "infer", + "identify", + "code", + "string", + "text", + "source", + "space", + "tab" + ], + "license": "MIT", + "name": "detect-indent", + "repository": { + "type": "git", + "url": "git+https://github.com/sindresorhus/detect-indent.git" + }, + "scripts": { + "test": "xo && ava" + }, + "version": "4.0.0", + "xo": { + "ignores": [ + "fixture/**" + ] + } +} diff --git a/node_modules/detect-indent/readme.md b/node_modules/detect-indent/readme.md new file mode 100644 index 0000000..22938ab --- /dev/null +++ b/node_modules/detect-indent/readme.md @@ -0,0 +1,110 @@ +# detect-indent [![Build Status](https://travis-ci.org/sindresorhus/detect-indent.svg?branch=master)](https://travis-ci.org/sindresorhus/detect-indent) + +> Detect the indentation of code + +Pass in a string of any kind of text and get the indentation. + + +## Use cases + +- Persisting the indentation when modifying a file. +- Have new content match the existing indentation. +- Setting the right indentation in your editor. + + +## Install + +``` +$ npm install --save detect-indent +``` + + +## Usage + +Here we modify a JSON file while persisting the indentation: + +```js +var fs = require('fs'); +var detectIndent = require('detect-indent'); + +/* +{ + "ilove": "pizza" +} +*/ +var file = fs.readFileSync('foo.json', 'utf8'); + +// tries to detect the indentation and falls back to a default if it can't +var indent = detectIndent(file).indent || ' '; + +var json = JSON.parse(file); + +json.ilove = 'unicorns'; + +fs.writeFileSync('foo.json', JSON.stringify(json, null, indent)); +/* +{ + "ilove": "unicorns" +} +*/ +``` + + +## API + +Accepts a string and returns an object with stats about the indentation: + +* `amount` {number} - Amount of indentation, e.g. `2` +* `type` {string|null} - Type of indentation. Possible values are `tab`, `space` or `null` if no indentation is detected +* `indent` {string} - Actual indentation + + +## Algorithm + +The current algorithm looks for the most common difference between two consecutive non-empty lines. + +In the following example, even if the 4-space indentation is used 3 times whereas the 2-space one is used 2 times, it is detected as less used because there were only 2 differences with this value instead of 4 for the 2-space indentation: + +```css +html { + box-sizing: border-box; +} + +body { + background: gray; +} + +p { + line-height: 1.3em; + margin-top: 1em; + text-indent: 2em; +} +``` + +[Source.](https://medium.com/@heatherarthur/detecting-code-indentation-eff3ed0fb56b#3918) + +Furthermore, if there are more than one most used difference, the indentation with the most lines is selected. + +In the following example, the indentation is detected as 4-spaces: + +```css +body { + background: gray; +} + +p { + line-height: 1.3em; + margin-top: 1em; + text-indent: 2em; +} +``` + + +## Related + +- [detect-indent-cli](https://github.com/sindresorhus/detect-indent-cli) - CLI for this module + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) -- cgit v1.2.3