Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/npm/cli.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/nopt/node_modules/abbrev/lib/index.js')
-rw-r--r--node_modules/nopt/node_modules/abbrev/lib/index.js50
1 files changed, 50 insertions, 0 deletions
diff --git a/node_modules/nopt/node_modules/abbrev/lib/index.js b/node_modules/nopt/node_modules/abbrev/lib/index.js
new file mode 100644
index 000000000..9f48801f0
--- /dev/null
+++ b/node_modules/nopt/node_modules/abbrev/lib/index.js
@@ -0,0 +1,50 @@
+module.exports = abbrev
+
+function abbrev (...args) {
+ let list = args.length === 1 || Array.isArray(args[0]) ? args[0] : args
+
+ for (let i = 0, l = list.length; i < l; i++) {
+ list[i] = typeof list[i] === 'string' ? list[i] : String(list[i])
+ }
+
+ // sort them lexicographically, so that they're next to their nearest kin
+ list = list.sort(lexSort)
+
+ // walk through each, seeing how much it has in common with the next and previous
+ const abbrevs = {}
+ let prev = ''
+ for (let ii = 0, ll = list.length; ii < ll; ii++) {
+ const current = list[ii]
+ const next = list[ii + 1] || ''
+ let nextMatches = true
+ let prevMatches = true
+ if (current === next) {
+ continue
+ }
+ let j = 0
+ const cl = current.length
+ for (; j < cl; j++) {
+ const curChar = current.charAt(j)
+ nextMatches = nextMatches && curChar === next.charAt(j)
+ prevMatches = prevMatches && curChar === prev.charAt(j)
+ if (!nextMatches && !prevMatches) {
+ j++
+ break
+ }
+ }
+ prev = current
+ if (j === cl) {
+ abbrevs[current] = current
+ continue
+ }
+ for (let a = current.slice(0, j); j <= cl; j++) {
+ abbrevs[a] = current
+ a += current.charAt(j)
+ }
+ }
+ return abbrevs
+}
+
+function lexSort (a, b) {
+ return a === b ? 0 : a > b ? 1 : -1
+}