mirror of
https://github.com/snachodog/just-the-docs.git
synced 2025-09-12 21:03:32 -06:00
Initial commit
This commit is contained in:
1
node_modules/doiuse/.npmignore
generated
vendored
Normal file
1
node_modules/doiuse/.npmignore
generated
vendored
Normal file
@@ -0,0 +1 @@
|
||||
src/
|
4
node_modules/doiuse/.travis.yml
generated
vendored
Normal file
4
node_modules/doiuse/.travis.yml
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
language: node_js
|
||||
node_js:
|
||||
- "0.12"
|
||||
- "node"
|
185
node_modules/doiuse/CHANGELOG
generated
vendored
Normal file
185
node_modules/doiuse/CHANGELOG
generated
vendored
Normal file
@@ -0,0 +1,185 @@
|
||||
2015-10-16 - 2.0.2 (b7fb405)
|
||||
b7fb405 Use PostCSS 'warn' API, add feature id in reported results
|
||||
|
||||
|
||||
2015-10-13 - 2.0.1 (c9297b9)
|
||||
c9297b9 (Breaking) Add option to ignore rules
|
||||
9207085 Clean up README, add Gulp example
|
||||
57b7303 Update node versions on travis
|
||||
|
||||
1.0.4
|
||||
9aa6664 Update PostCSS to 5.x
|
||||
|
||||
1.0.3
|
||||
Update browserlist dep
|
||||
|
||||
1.0.2
|
||||
6dc4b8e Strip URLs out of values before testing them.
|
||||
6014672 Add standard code style, fix lint errors
|
||||
1c8ee14 Fix lint errors
|
||||
d33f0d6 Add failing test for #17
|
||||
ba8732d link to openopensource.org
|
||||
|
||||
1.0.1
|
||||
295ca5f update caniuse-db
|
||||
fd438d3 Update / fix README examples.
|
||||
|
||||
0.4.0
|
||||
dc022dc Update README and CONTRIBUTING
|
||||
73efc82 Merge pull request #14 from anandthakker/decaffeinate
|
||||
|
||||
0.3.3
|
||||
1f28109 update postcss version
|
||||
af9ad0a fix test
|
||||
c20d5a4 Merge pull request #9 from deiwin/fix/input-file-name
|
||||
|
||||
0.3.2
|
||||
d0b5e5b Add missing through2 dependency (closes #6)
|
||||
|
||||
0.3.1
|
||||
c8ecd75 fix regression: correct source location in output
|
||||
250a03f add test for streaming mode, mostly to see wtf is happening on travis
|
||||
7ba2403 fix some cli tests
|
||||
|
||||
2014-12-22 - 0.3.0 (76f5287)
|
||||
76f5287 (HEAD, tag: v0.2.6, master) 0.2.6
|
||||
|
||||
2014-12-22 - 0.2.6 (44d5c3a)
|
||||
44d5c3a (HEAD, tag: v0.2.5, origin/master, origin/HEAD, master) 0.2.5
|
||||
80b4345 fix missing next()
|
||||
66cb3b7 fix tests
|
||||
d958dec (tag: v0.2.4) 0.2.4
|
||||
|
||||
|
||||
2014-12-21 - 0.2.4 (9c7c7c0)
|
||||
9c7c7c0 (HEAD, master) don't instance postcss each chunk
|
||||
6fd9b9c (tag: v0.2.3, origin/master, origin/HEAD) 0.2.3
|
||||
|
||||
|
||||
2014-12-21 - 0.2.3 (e63df6a)
|
||||
e63df6a (HEAD, origin/master, origin/HEAD, master) Cut the input CSS into a stream of (parseable) fragments.
|
||||
9756c97 logging for travis
|
||||
14476ff drop nyan reporter
|
||||
45c0e61 (tag: v0.2.2) 0.2.2
|
||||
|
||||
|
||||
2014-12-17 - 0.2.2 (e87a0ca)
|
||||
e87a0ca (HEAD, master) handle errors
|
||||
6acec72 (tag: v0.2.1, origin/master, origin/HEAD) 0.2.1
|
||||
|
||||
|
||||
2014-12-17 - 0.2.1 (9a9947b)
|
||||
9a9947b (HEAD, master) fix: cli bugz
|
||||
059ad67 (tag: v0.2.0, origin/master, origin/HEAD) 0.2.0
|
||||
76f1b99 (tag: v0.1.8) 0.1.8
|
||||
46e4452 change stream api to just do objects
|
||||
e25f1f4 (tag: v0.1.7) 0.1.7
|
||||
5751768 fix: flush stream
|
||||
e7332e6 (tag: v0.1.6) 0.1.6
|
||||
|
||||
|
||||
2014-12-17 - 0.1.6 (2c716b0)
|
||||
2c716b0 (HEAD, master) add transform stream option
|
||||
06203bb (tag: v0.1.5, origin/master, origin/HEAD) 0.1.5
|
||||
|
||||
|
||||
2014-12-17 - 0.1.5 (a46c60d)
|
||||
a46c60d (HEAD, master) use browserslist module
|
||||
f1eba90 Add JSON output option in CLI
|
||||
73aeba4 (tag: v0.1.4, origin/master, origin/HEAD) 0.1.4
|
||||
|
||||
|
||||
2014-12-09 - 0.1.4 (0ee27e3)
|
||||
0ee27e3 (HEAD, master) Add several features (still pending tests)
|
||||
75df578 (origin/master, origin/HEAD) travis badge
|
||||
72b615e gulp-util dependency
|
||||
1dc78bf (tag: v0.1.3) 0.1.3
|
||||
|
||||
|
||||
2014-12-08 - 0.1.3 (d05291a)
|
||||
d05291a (HEAD, master) feature: css3 cursors
|
||||
67afda4 feature: outline
|
||||
e19af16 feature: viewport units
|
||||
6835199 feature: word-break
|
||||
ef9474b feature: css-repeating-gradients
|
||||
08e84f4 feature: css-resize
|
||||
23aba2c features: rem units, pointer-events, counters
|
||||
1356b67 (origin/master, origin/HEAD) add travis
|
||||
a92ce3a (tag: v0.1.2) 0.1.2
|
||||
|
||||
|
||||
2014-12-08 - 0.1.2 (f41c148)
|
||||
f41c148 (HEAD, origin/master, origin/HEAD, master) Switch to GNU message format.
|
||||
ec1d982 (tag: v0.1.1) 0.1.1
|
||||
|
||||
|
||||
2014-11-23 - 0.1.1 (ea36001)
|
||||
ea36001 (HEAD, master) feature: object-fit
|
||||
3aa0686 feature: overflow-wrap
|
||||
cec98f8 feature: text-overflow
|
||||
5251a71 feature: opacity
|
||||
a0803b9 features: media queries and feature queries
|
||||
6e2d5e5 feature: css-canvas
|
||||
005d337 add feature: multibackgrounds
|
||||
6f14c98 (tag: v0.1.0, origin/master, origin/HEAD) 0.1.0
|
||||
|
||||
|
||||
2014-11-17 - 0.1.0 (cfd40be)
|
||||
cfd40be (HEAD, tag: v0.0.6, master) 0.0.6
|
||||
|
||||
|
||||
2014-11-17 - 0.0.6 (bfe91df)
|
||||
bfe91df (HEAD, master) Update readme
|
||||
60fadef add bin to package.json
|
||||
84ca39b include title directly in result for convenience
|
||||
ce80838 bugfix: was failing to filter only unsupported features
|
||||
b5a28f6 bugfix: cli was ignoring parameter
|
||||
c65a70f Add failing test for bug
|
||||
666a605 Add informational output to cli
|
||||
1b649d5 CLI
|
||||
9f2dbef Add info() method.
|
||||
baa6ed2 build: clean task
|
||||
d55fcd1 (tag: v0.0.5, origin/master, origin/HEAD) 0.0.5
|
||||
|
||||
|
||||
2014-11-17 - 0.0.5 (8867b0f)
|
||||
8867b0f (HEAD, master) Add readable message to callback parameter
|
||||
0d8833a (tag: v0.0.4, origin/master, origin/HEAD) 0.0.4
|
||||
|
||||
|
||||
2014-11-17 - 0.0.4 (a31c1aa)
|
||||
a31c1aa (HEAD, master) tweak regexp; add background-img-opts test
|
||||
59065cd convenience 'only' flag in test cases
|
||||
7fef13c generalize feature detection testing
|
||||
f25a275 detect-feature-use: smarter regexes
|
||||
ed40272 feature: css-sel2 and css-sel3
|
||||
e1109a4 add some detection data
|
||||
14f250e stubs for features needing detection data
|
||||
50d84fa (tag: v0.0.3, origin/master, origin/HEAD) 0.0.3
|
||||
|
||||
|
||||
2014-11-14 - 0.0.3 (e2dbe6a)
|
||||
e2dbe6a (HEAD, master) more documentation
|
||||
e4d0bc8 documentation
|
||||
84d43b2 (origin/master, origin/HEAD) fix missing-support test; reformat features data
|
||||
612bae3 udpate readme
|
||||
037f579 (tag: v0.0.2) 0.0.2
|
||||
|
||||
|
||||
2014-11-14 - 0.0.2 (859796e)
|
||||
859796e (HEAD, master) 0.0.1
|
||||
|
||||
|
||||
2014-11-14 - 0.0.1 (04dd5c5)
|
||||
04dd5c5 (HEAD, master) basic postcss plugin working.
|
||||
2d7710d (origin/master, origin/HEAD) tweak build
|
||||
6fa9263 Detect features being used in css file
|
||||
c266fff Convert/filter caniuse data based on browser selection
|
||||
dfa34dc move output
|
||||
d74a304 fix typo
|
||||
6498bbc update build
|
||||
6d201a1 add data; gulpfile
|
||||
7ec5218 DS_Store
|
||||
1da0db3 Initial commit
|
||||
|
||||
|
28
node_modules/doiuse/CONTRIBUTING.md
generated
vendored
Normal file
28
node_modules/doiuse/CONTRIBUTING.md
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
## `doiuse` is an **[OPEN Open Source Project](http://openopensource.org/)**
|
||||
-----------------------------------------
|
||||
|
||||
## What?
|
||||
|
||||
Individuals making significant and valuable contributions are given commit-access to a project to contribute as they see fit. A project is more like an open wiki than a standard guarded open source project.
|
||||
|
||||
## Rules
|
||||
|
||||
There are a few basic ground-rules for contributors:
|
||||
|
||||
1. **No `--force` pushes** or modifying the Git history in any way.
|
||||
1. **Non-master branches** ought to be used for ongoing work.
|
||||
1. **External API changes and significant modifications** ought to be subject to an **internal pull-request** to solicit feedback from other contributors.
|
||||
1. Internal pull-requests to solicit feedback are *encouraged* for any other non-trivial contribution but left to the discretion of the contributor.
|
||||
1. Contributors should attempt to adhere to the prevailing code-style.
|
||||
|
||||
## Releases
|
||||
|
||||
Declaring formal releases remains the prerogative of the project maintainer(s).
|
||||
|
||||
## Changes to this arrangement
|
||||
|
||||
This is an experiment and feedback is welcome! This document may also be subject to pull-requests or changes by contributors where you believe you have something valuable to add or change.
|
||||
|
||||
-----------------------------------------
|
||||
|
||||
These guidelines were copied directly from those of the [Level community](https://github.com/Level/community/blob/master/CONTRIBUTING.md).
|
22
node_modules/doiuse/LICENSE
generated
vendored
Normal file
22
node_modules/doiuse/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,22 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2014 Anand Thakker
|
||||
|
||||
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.
|
||||
|
170
node_modules/doiuse/README.md
generated
vendored
Normal file
170
node_modules/doiuse/README.md
generated
vendored
Normal file
@@ -0,0 +1,170 @@
|
||||
[](https://travis-ci.org/anandthakker/doiuse)
|
||||
|
||||
doiuse
|
||||
======
|
||||
|
||||
Lint CSS for browser support against caniuse database.
|
||||
|
||||
# Install
|
||||
|
||||
```sh
|
||||
npm install -g doiuse
|
||||
```
|
||||
|
||||
# Developing
|
||||
```sh
|
||||
git clone git@github.com:anandthakker/doiuse.git
|
||||
cd doiuse
|
||||
npm install
|
||||
npm run babel
|
||||
```
|
||||
|
||||
That last step transpiles the ES6 from src/ to ES5 in lib/. Already happens as a `pretest` step for `npm test`.
|
||||
|
||||
|
||||
# Usage Examples
|
||||
|
||||
## Command Line
|
||||
```bash
|
||||
doiuse --browsers "ie >= 9, > 1%, last 2 versions" main.css
|
||||
# or
|
||||
cat main.css | doiuse --browsers "ie >= 9, > 1%, last 2 versions"
|
||||
```
|
||||
|
||||
|
||||
**Sample output:**
|
||||
```
|
||||
/projects/website/main.css:5:3: CSS3 Box-sizing not supported by: IE (8,9,10,11), Chrome (36,37,38), Safari (8,7.1), Opera (24,25), iOS Safari (8,7.1,8.1), Android Browser (4.1,4.4,4.4.4), IE Mobile (10,11)
|
||||
/projects/website/main.css:6:3: CSS3 Box-sizing not supported by: IE (8,9,10,11), Chrome (36,37,38), Safari (8,7.1), Opera (24,25), iOS Safari (8,7.1,8.1), Android Browser (4.1,4.4,4.4.4), IE Mobile (10,11)
|
||||
/projects/website/main.css:8:3: CSS user-select: none not supported by: IE (8,9)
|
||||
/projects/website/main.css:9:3: CSS user-select: none not supported by: IE (8,9)
|
||||
/projects/website/main.css:10:3: CSS user-select: none not supported by: IE (8,9)
|
||||
/projects/website/main.css:11:3: CSS user-select: none not supported by: IE (8,9)
|
||||
/projects/website/main.css:12:3: CSS user-select: none not supported by: IE (8,9)
|
||||
/projects/website/main.css:13:3: Pointer events not supported by: IE (8,9,10), Firefox (32,33), Chrome (36,37,38), Safari (8,7.1), Opera (24,25), iOS Safari (8,7.1,8.1), Android Browser (4.1,4.4,4.4.4), IE Mobile (10)
|
||||
/projects/website/main.css:14:3: Pointer events not supported by: IE (8,9,10), Firefox (32,33), Chrome (36,37,38), Safari (8,7.1), Opera (24,25), iOS Safari (8,7.1,8.1), Android Browser (4.1,4.4,4.4.4), IE Mobile (10)
|
||||
/projects/website/main.css:32:3: CSS3 Transforms not supported by: IE (8)
|
||||
```
|
||||
|
||||
Use `--json` to get output as (newline-delimited) JSON objects.
|
||||
|
||||
|
||||
## JS
|
||||
```javascript
|
||||
var postcss = require('postcss');
|
||||
var doiuse = require('doiuse');
|
||||
|
||||
postcss(doiuse({
|
||||
browsers:['ie >= 6', '> 1%'],
|
||||
ignore: ['rem'], // an optional array of features to ignore
|
||||
ignoreFiles: ['**/normalize.css'], // an optional array of file globs to match against original source file path, to ignore
|
||||
onFeatureUsage: function(usageInfo) {
|
||||
console.log(usageInfo.message);
|
||||
}
|
||||
})).process("a { background-size: cover; }")
|
||||
```
|
||||
|
||||
## Gulp
|
||||
|
||||
```javascript
|
||||
var gulp = require('gulp')
|
||||
var postcss = require('postcss')
|
||||
var doiuse = require('doiuse')
|
||||
|
||||
gulp.src(src, { cwd: process.cwd() })
|
||||
.pipe(gulp.postcss([
|
||||
doiuse({
|
||||
browsers: [
|
||||
'ie >= 8',
|
||||
'> 1%'
|
||||
],
|
||||
ignore: ['rem'], // an optional array of features to ignore
|
||||
ignoreFiles: ['**/normalize.css'], // an optional array of file globs to match against original source file path, to ignore
|
||||
onFeatureUsage: function (usageInfo) {
|
||||
console.log(usageInfo.message)
|
||||
}
|
||||
})
|
||||
]))
|
||||
```
|
||||
|
||||
# How it works
|
||||
In particular, the approach to detecting features usage is currently quite naive.
|
||||
|
||||
<a name="features-list"></a>Refer to the data in [/data/features.js](data/features.js).
|
||||
|
||||
- If a feature in that dataset only specifies `properties`, we just use those
|
||||
properties for regex/substring matches against the properties used in the input CSS.
|
||||
- If a feature also specifies `values`, then we also require that the associated
|
||||
value matches one of those values.
|
||||
|
||||
# API Details:
|
||||
|
||||
## As a transform stream
|
||||
```javascript
|
||||
var doiuse = require('doiuse/stream');
|
||||
|
||||
process.stdin
|
||||
.pipe(doiuse({ browsers: ['ie >= 8', '> 1%'], ignore: ['rem'] }))
|
||||
.on('data', function (usageInfo) {
|
||||
console.log(JSON.stringify(usageInfo))
|
||||
})
|
||||
```
|
||||
|
||||
Yields `UsageInfo` objects as described below.
|
||||
|
||||
|
||||
## As a postcss plugin
|
||||
`postcss(doiuse(opts)).process(css)`, where `opts` is:
|
||||
```javascript
|
||||
{
|
||||
browsers: ['ie >= 8', '> 1%'], // an autoprefixer-like array of browsers.
|
||||
ignore: ['rem'], // an optional array of features to ignore
|
||||
ignoreFiles: ['**/normalize.css'], // an optional array of file globs to match against original source file path, to ignore
|
||||
onFeatureUsage: function(usageInfo) { } // a callback for usages of features not supported by the selected browsers
|
||||
}
|
||||
```
|
||||
|
||||
And `usageInfo` looks like this:
|
||||
|
||||
```javascript
|
||||
{
|
||||
message: '<input source>: line <l>, col <c> - CSS3 Gradients not supported by: IE (8)'
|
||||
feature: 'css-gradients', //slug identifying a caniuse-db feature
|
||||
featureData:{
|
||||
title: 'CSS Gradients',
|
||||
missing: "IE (8)" // string of browsers missing support for this feature.
|
||||
missingData: {
|
||||
// map of browser -> version -> (lack of)support code
|
||||
ie: { '8': 'n' }
|
||||
},
|
||||
caniuseData: { // data from caniuse-db/features-json/[feature].json }
|
||||
},
|
||||
usage: {} //the postcss node where that feature is being used.
|
||||
}
|
||||
```
|
||||
Called once for each usage of each css feature not supported by the selected
|
||||
browsers.
|
||||
|
||||
## Ignoring file-specific rules:
|
||||
For disabling some checks you can use just-in-place comments
|
||||
##### `/* doiuse-disable */`
|
||||
Disables checks of _all [features](#features-list)_
|
||||
##### `/* doiuse-disable feature */`
|
||||
Disables checks of _specified [feature(s)](#features-list)_ (can be comma separated list)
|
||||
##### `/* doiuse-enable */`
|
||||
Re-enables checks of _all [features](#features-list)_
|
||||
##### `/* doiuse-enable feature */`
|
||||
Enables checks of _specified [feature(s)](#features-list)_ (can be comma separated list)
|
||||
- for following lines in file
|
||||
|
||||
# [Contributing](CONTRIBUTING.md)
|
||||
|
||||
doiuse is an [OPEN Open Source](http://openopensource.org/) Project. This means that:
|
||||
|
||||
Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project.
|
||||
|
||||
# License
|
||||
|
||||
MIT
|
||||
|
||||
**NOTE:** Many of the files in test/cases are from autoprefixer-core, Copyright 2013 Andrey Sitnik <andrey@sitnik.ru>. Please see https://github.com/postcss/autoprefixer-core.
|
137
node_modules/doiuse/cli.js
generated
vendored
Executable file
137
node_modules/doiuse/cli.js
generated
vendored
Executable file
@@ -0,0 +1,137 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
var FILE_NOT_FOUND = 'ENOENT'
|
||||
|
||||
var fs = require('fs')
|
||||
var ldjson = require('ldjson-stream')
|
||||
var through = require('through2')
|
||||
var browserslist = require('browserslist')
|
||||
var path = require('path')
|
||||
var _ = require('lodash')
|
||||
|
||||
var formatBrowserName = require('./lib/util').formatBrowserName
|
||||
var defaultBrowsers = require('./').default
|
||||
var doiuse = require('./stream')
|
||||
|
||||
var yargs = require('yargs')
|
||||
.usage('Lint your CSS for browser support.')
|
||||
.example('cat FILE | $0 -b "ios >= 6"', '')
|
||||
.example('$0 --browsers "ie >= 9, > 1%, last 3 versions" [FILE] [FILE] ...', '')
|
||||
.example('$0 -b "ie >= 8" -b "> 1%" -b "last 3 versions" [FILE] [FILE] ...', '')
|
||||
.options('b', {
|
||||
alias: 'browsers',
|
||||
description: 'Autoprefixer-like browser criteria.',
|
||||
default: defaultBrowsers.join(', ')
|
||||
})
|
||||
.string('b')
|
||||
.options('i', {
|
||||
alias: 'ignore',
|
||||
description: 'List of features to ignore.',
|
||||
default: ''
|
||||
})
|
||||
.string('i')
|
||||
.options('l', {
|
||||
alias: 'list-only',
|
||||
description: 'Just show the browsers and features that would be tested by' +
|
||||
'the specified browser criteria, without actually processing any CSS.'
|
||||
})
|
||||
.options('c', {
|
||||
alias: 'config',
|
||||
description: 'Provide options through config file'
|
||||
})
|
||||
.string('verbose')
|
||||
.options('v', {
|
||||
alias: 'verbose',
|
||||
description: 'Verbose output. Multiple levels available.'
|
||||
})
|
||||
.count('verbose')
|
||||
.options('j', {
|
||||
alias: 'json',
|
||||
description: 'Output JSON instead of string linter-like messages.'
|
||||
})
|
||||
.boolean('j')
|
||||
.help('h', 'Show help message.')
|
||||
.alias('h', 'help')
|
||||
|
||||
var argv = yargs.argv
|
||||
|
||||
// Config file reading
|
||||
if (argv.config) {
|
||||
try {
|
||||
var fileData = fs.readFileSync(path.resolve(argv.config), 'utf8')
|
||||
var config = JSON.parse(fileData)
|
||||
_.forEach(_.keys(config), function (key) {
|
||||
var value = config[key]
|
||||
if (key === 'browsers') {
|
||||
if (_.isArray(value)) value = value.join(',')
|
||||
}
|
||||
|
||||
argv[key] = value
|
||||
})
|
||||
} catch (err) {
|
||||
if (err.code === FILE_NOT_FOUND) console.error('Config file not found', err)
|
||||
else console.error(err)
|
||||
}
|
||||
}
|
||||
|
||||
argv.browsers = argv.browsers.split(',').map(function (s) { return s.trim() })
|
||||
argv.ignore = argv.ignore.split(',').map(function (s) { return s.trim() })
|
||||
// Informational output
|
||||
if (argv.l) { argv.v = ++argv.verbose }
|
||||
if (argv.verbose >= 1) {
|
||||
var browsers = browserslist(argv.browsers)
|
||||
.map(function (b) {
|
||||
b = b.split(' ')
|
||||
b[0] = formatBrowserName(b[0])
|
||||
b[1] = parseInt(b[1], 10)
|
||||
return b
|
||||
})
|
||||
.sort(function (a, b) { return (a[0] !== b[0]) ? a[0] > b[0] : a[1] > b[1] })
|
||||
.map(function (b) { return b.join(' ') })
|
||||
.join(', ')
|
||||
console.log('[doiuse] Browsers: ' + browsers)
|
||||
}
|
||||
|
||||
var out
|
||||
if (argv.verbose >= 2) {
|
||||
var features = require('./')(argv.browsers).info().features
|
||||
console.log('\n[doiuse] Unsupported features:')
|
||||
for (var feat in features) {
|
||||
out = [features[feat].caniuseData.title]
|
||||
if (argv.verbose >= 3) {
|
||||
out.push('\n', features[feat].missing.join(', '), '\n')
|
||||
}
|
||||
console.log(out.join(''))
|
||||
}
|
||||
}
|
||||
if (argv.l) { process.exit() }
|
||||
|
||||
// Process the CSS
|
||||
if (argv.help || (argv._.length === 0 && process.stdin.isTTY)) {
|
||||
yargs.showHelp()
|
||||
process.exit()
|
||||
}
|
||||
|
||||
if (argv.json) {
|
||||
out = ldjson.serialize()
|
||||
}
|
||||
if (!argv.json) {
|
||||
out = through.obj(function (usage, enc, next) {
|
||||
next(null, usage.message + '\n')
|
||||
})
|
||||
}
|
||||
out.pipe(process.stdout)
|
||||
|
||||
if (argv._.length > 0) {
|
||||
argv._.forEach(function (file) {
|
||||
fs.createReadStream(file)
|
||||
.pipe(doiuse({ browsers: argv.browsers, ignore: argv.ignore }, file))
|
||||
.on('error', function (err) { console.error(err) })
|
||||
.pipe(out)
|
||||
})
|
||||
} else {
|
||||
process.stdin
|
||||
.pipe(doiuse({ browsers: argv.browsers, ignore: argv.ignore }))
|
||||
.on('error', function (err) { console.error(err) })
|
||||
.pipe(out)
|
||||
}
|
396
node_modules/doiuse/data/features.js
generated
vendored
Normal file
396
node_modules/doiuse/data/features.js
generated
vendored
Normal file
@@ -0,0 +1,396 @@
|
||||
var list = require('postcss/lib/list')
|
||||
var pats = {
|
||||
attrcc: '[^\\~|^$*\\]]*',
|
||||
brackets: /(\[[^\]]*\]|\([^\)]*\))/.source,
|
||||
nobrackets: /[^\[\]\(\)]/.source
|
||||
}
|
||||
function matchOutsideOfBrackets (pat) {
|
||||
if (pat instanceof RegExp) {
|
||||
pat = pat.source
|
||||
}
|
||||
return new RegExp('^(' + pats.brackets + '?' + pats.nobrackets + '*)*' + pat)
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
'border-radius': {
|
||||
properties: [
|
||||
'border-radius',
|
||||
'border-top-left-radius',
|
||||
'border-top-right-radius',
|
||||
'border-bottom-right-radius',
|
||||
'border-bottom-left-radius'
|
||||
]
|
||||
},
|
||||
'css-boxshadow': { properties: ['box-shadow'] },
|
||||
'css-animation': {
|
||||
properties: [
|
||||
'animation',
|
||||
'animation-name',
|
||||
'animation-duration',
|
||||
'animation-delay',
|
||||
'animation-direction',
|
||||
'animation-fill-mode',
|
||||
'animation-iteration-count',
|
||||
'animation-play-state',
|
||||
'animation-timing-function',
|
||||
'@keyframes'
|
||||
]
|
||||
},
|
||||
'css-transitions': {
|
||||
properties: [
|
||||
'transition',
|
||||
'transition-property',
|
||||
'transition-duration',
|
||||
'transition-delay',
|
||||
'transition-timing-function'
|
||||
]
|
||||
},
|
||||
transforms2d: {
|
||||
properties: [
|
||||
'transform',
|
||||
'transform-origin'
|
||||
]
|
||||
},
|
||||
transforms3d: {
|
||||
properties: [
|
||||
'perspective',
|
||||
'perspective-origin',
|
||||
'transform-style',
|
||||
'backface-visibility'
|
||||
]
|
||||
},
|
||||
'css-gradients': {
|
||||
properties: [
|
||||
'background',
|
||||
'background-image',
|
||||
'border-image'
|
||||
],
|
||||
values: [
|
||||
/(^|[^-])linear-gradient/,
|
||||
/(^|[^-])radial-gradient/
|
||||
]
|
||||
},
|
||||
'css3-boxsizing': { properties: ['box-sizing'] },
|
||||
'css-filters': { properties: ['filter'] },
|
||||
multicolumn: {
|
||||
properties: [
|
||||
'columns',
|
||||
'column-width',
|
||||
'column-gap',
|
||||
'column-rule',
|
||||
'column-rule-color',
|
||||
'column-rule-width',
|
||||
'column-count',
|
||||
'column-rule-style',
|
||||
'column-span',
|
||||
'column-fill',
|
||||
'break-before',
|
||||
'break-after',
|
||||
'break-inside'
|
||||
]
|
||||
},
|
||||
'user-select-none': { properties: ['user-select'] },
|
||||
flexbox: {
|
||||
properties: ['display'],
|
||||
values: [
|
||||
'display-flex',
|
||||
'inline-flex',
|
||||
'flex',
|
||||
'flex-grow',
|
||||
'flex-shrink',
|
||||
'flex-basis',
|
||||
'flex-direction',
|
||||
'flex-wrap',
|
||||
'flex-flow',
|
||||
'justify-content',
|
||||
'order',
|
||||
'align-items',
|
||||
'align-self',
|
||||
'align-content'
|
||||
]
|
||||
},
|
||||
calc: {
|
||||
values: ['calc'],
|
||||
properties: ['']
|
||||
},
|
||||
'background-img-opts': {
|
||||
properties: [
|
||||
'background-clip',
|
||||
'background-origin',
|
||||
'background-size'
|
||||
]
|
||||
},
|
||||
'font-feature': {
|
||||
properties: [
|
||||
'font-feature-settings',
|
||||
'font-variant-ligatures',
|
||||
'font-language-override',
|
||||
'font-kerning'
|
||||
]
|
||||
},
|
||||
'border-image': { properties: ['border-image'] },
|
||||
'css-selection': {
|
||||
properties: ['::selection'],
|
||||
selector: true
|
||||
},
|
||||
'css-placeholder': {
|
||||
properties: ['::placeholder'],
|
||||
selector: true
|
||||
},
|
||||
'css-hyphens': { properties: ['hyphens'] },
|
||||
fullscreen: {
|
||||
properties: [':fullscreen'],
|
||||
selector: true
|
||||
},
|
||||
'css3-tabsize': { properties: ['tab-size'] },
|
||||
'intrinsic-width': {
|
||||
properties: [
|
||||
'width',
|
||||
'min-width',
|
||||
'max-width',
|
||||
'height',
|
||||
'min-height',
|
||||
'max-height'
|
||||
],
|
||||
values: [
|
||||
'max-content',
|
||||
'min-content',
|
||||
'fit-content',
|
||||
'fill-available'
|
||||
]
|
||||
},
|
||||
'css3-cursors-newer': {
|
||||
properties: ['cursor'],
|
||||
values: [
|
||||
'zoom-in',
|
||||
'zoom-out',
|
||||
'grab',
|
||||
'grabbing'
|
||||
]
|
||||
},
|
||||
'css-sticky': {
|
||||
properties: ['position'],
|
||||
values: ['sticky']
|
||||
},
|
||||
pointer: { properties: ['touch-action'] },
|
||||
'text-decoration': {
|
||||
properties: [
|
||||
'text-decoration-style',
|
||||
'text-decoration-line',
|
||||
'text-decoration-color'
|
||||
]
|
||||
},
|
||||
'text-size-adjust': { properties: ['text-size-adjust'] },
|
||||
'css-masks': {
|
||||
properties: [
|
||||
'clip-path',
|
||||
'mask',
|
||||
'mask-clip',
|
||||
'mask-composite',
|
||||
'mask-image',
|
||||
'mask-origin',
|
||||
'mask-position',
|
||||
'mask-repeat',
|
||||
'mask-size'
|
||||
]
|
||||
},
|
||||
fontface: { atrules: ['font-face'] },
|
||||
multibackgrounds: {
|
||||
properties: [/^background-?/],
|
||||
values: [function (value) {
|
||||
return list.comma(value).length > 1
|
||||
}]
|
||||
},
|
||||
'css-table': {
|
||||
properties: ['display'],
|
||||
values: [
|
||||
'table',
|
||||
'table-cell',
|
||||
'table-row',
|
||||
'table-layout'
|
||||
]
|
||||
},
|
||||
'css-gencontent': {
|
||||
selectors: [
|
||||
':before',
|
||||
':after'
|
||||
]
|
||||
},
|
||||
'css-fixed': {
|
||||
properties: ['position'],
|
||||
values: ['fixed']
|
||||
},
|
||||
'css-sel2': {
|
||||
selectors: [
|
||||
matchOutsideOfBrackets(/\*/),
|
||||
matchOutsideOfBrackets(/>/),
|
||||
matchOutsideOfBrackets(/\+/),
|
||||
matchOutsideOfBrackets(/\./),
|
||||
matchOutsideOfBrackets(/#/),
|
||||
':first-child',
|
||||
':link',
|
||||
':visited',
|
||||
':active',
|
||||
':hover',
|
||||
':focus',
|
||||
':lang',
|
||||
new RegExp('\\[' + pats.attrcc + '\\]'),
|
||||
new RegExp('\\[' + pats.attrcc + '=' + pats.attrcc + '\\]'),
|
||||
new RegExp('\\[' + pats.attrcc + '\\~=' + pats.attrcc + '\\]'),
|
||||
new RegExp('\\[' + pats.attrcc + '\\|=' + pats.attrcc + '\\]')
|
||||
]
|
||||
},
|
||||
'css-sel3': {
|
||||
selectors: [
|
||||
new RegExp('\\[' + pats.attrcc + '\\^=' + pats.attrcc + '\\]'),
|
||||
new RegExp('\\[' + pats.attrcc + '\\$=' + pats.attrcc + '\\]'),
|
||||
new RegExp('\\[' + pats.attrcc + '\\*=' + pats.attrcc + '\\]'),
|
||||
':root',
|
||||
':nth-child',
|
||||
':nth-last-child',
|
||||
'nth-of-type',
|
||||
'nth-last-of-type',
|
||||
':last-child',
|
||||
':first-of-type',
|
||||
':last-of-type',
|
||||
':only-child',
|
||||
':only-of-type',
|
||||
':empty',
|
||||
':target',
|
||||
':enabled',
|
||||
':disabled',
|
||||
':checked',
|
||||
':not',
|
||||
/^[^\[]*~/
|
||||
]
|
||||
},
|
||||
'css-textshadow': { properties: ['text-shadow'] },
|
||||
'css3-colors': {
|
||||
properties: [''],
|
||||
values: [
|
||||
'rgba',
|
||||
'hsl',
|
||||
'hsla'
|
||||
]
|
||||
},
|
||||
'css-mediaqueries': { atrules: ['media'] },
|
||||
'css-canvas': {
|
||||
properties: [/^background/],
|
||||
values: [/^-webkit-canvas/]
|
||||
},
|
||||
'css-reflections': { properties: ['box-reflect'] },
|
||||
'svg-css': { unimplemented: true },
|
||||
'css-featurequeries': { atrules: ['supports'] },
|
||||
'css-opacity': { properties: ['opacity'] },
|
||||
'text-overflow': { properties: ['text-overflow'] },
|
||||
wordwrap: { properties: ['overflow-wrap'] },
|
||||
'object-fit': { properties: ['object-fit'] },
|
||||
minmaxwh: {
|
||||
properties: [
|
||||
'min-width',
|
||||
'max-width',
|
||||
'min-height',
|
||||
'max-height'
|
||||
]
|
||||
},
|
||||
'text-stroke': { unimplemented: true },
|
||||
'inline-block': {
|
||||
properties: ['display'],
|
||||
values: ['inline-block']
|
||||
},
|
||||
'css-grid': { unimplemented: true },
|
||||
rem: {
|
||||
properties: [''],
|
||||
values: ['rem']
|
||||
},
|
||||
ttf: { unimplemented: true },
|
||||
'pointer-events': { properties: ['pointer-events'] },
|
||||
'css-regions': { unimplemented: true },
|
||||
'css-counters': {
|
||||
properties: [
|
||||
'counter-reset',
|
||||
'counter-increment'
|
||||
]
|
||||
},
|
||||
'css-resize': { properties: ['resize'] },
|
||||
'css-repeating-gradients': {
|
||||
properties: [''],
|
||||
values: [
|
||||
'repeating-linear-gradient',
|
||||
'repeating-radial-gradient'
|
||||
]
|
||||
},
|
||||
'word-break': { properties: ['word-break'] },
|
||||
'viewport-units': {
|
||||
properties: [''],
|
||||
values: [
|
||||
'vw',
|
||||
'vh',
|
||||
'vmin',
|
||||
'vmax'
|
||||
]
|
||||
},
|
||||
outline: {
|
||||
properties: [
|
||||
'outline',
|
||||
'outline-style',
|
||||
'outline-width',
|
||||
'outline-color'
|
||||
]
|
||||
},
|
||||
'css3-cursors': {
|
||||
properties: ['cursor'],
|
||||
values: [
|
||||
'none',
|
||||
'context-menu',
|
||||
'cell',
|
||||
'vertical-text',
|
||||
'alias',
|
||||
'copy',
|
||||
'no-drop',
|
||||
'not-allowed',
|
||||
'nesw-resize',
|
||||
'nwse-resize',
|
||||
'col-resize',
|
||||
'row-resize',
|
||||
'all-scroll'
|
||||
]
|
||||
},
|
||||
'css-variables': { unimplemented: true },
|
||||
'css-backgroundblendmode': { properties: ['background-blend-mode'] },
|
||||
'css-mixblendmode': { properties: ['mix-blend-mode'] },
|
||||
'will-change': { properties: ['will-change'] },
|
||||
'css-shapes': {
|
||||
properties: [
|
||||
'shape-outside',
|
||||
'shape-image-threshold',
|
||||
'shape-margin'
|
||||
]
|
||||
},
|
||||
'kerning-pairs-ligatures': {
|
||||
properties: ['text-rendering'],
|
||||
values: ['optimizeLegibility']
|
||||
},
|
||||
'css-image-orientation': { properties: ['image-orientation'] },
|
||||
'css-appearance': { properties: ['appearance'] },
|
||||
'css-background-offsets': { unimplemented: true },
|
||||
'css-touch-action': { properties: ['touch-action'] },
|
||||
'css-clip-path': { properties: ['clip-path'] },
|
||||
'font-unicode-range': {
|
||||
atrules: ['font-face'],
|
||||
properties: ['unicode-range']
|
||||
},
|
||||
'css-font-stretch': { properties: ['font-stretch'] },
|
||||
'font-size-adjust': { properties: ['font-size-adjust'] },
|
||||
'css-media-resolution': {
|
||||
atrules: ['media'],
|
||||
params: [
|
||||
'min-resolution',
|
||||
'max-resolution'
|
||||
]
|
||||
},
|
||||
'css-image-set': {
|
||||
properties: [''],
|
||||
values: ['image-set']
|
||||
}
|
||||
}
|
44
node_modules/doiuse/lib/browsers.js
generated
vendored
Normal file
44
node_modules/doiuse/lib/browsers.js
generated
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
// Generated by CoffeeScript 2.0.0-beta8
|
||||
'use strict';
|
||||
|
||||
var _slicedToArray = (function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i['return']) _i['return'](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError('Invalid attempt to destructure non-iterable instance'); } }; })();
|
||||
|
||||
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
||||
|
||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
||||
|
||||
var browserslist = require('browserslist');
|
||||
var _ = require('lodash');
|
||||
module.exports = (function () {
|
||||
function BrowserSelection(query) {
|
||||
_classCallCheck(this, BrowserSelection);
|
||||
|
||||
this.browsersRequest = query;
|
||||
this._list = browserslist(this.browsersRequest).map(function (s) {
|
||||
return s.split(' ');
|
||||
});
|
||||
}
|
||||
|
||||
_createClass(BrowserSelection, [{
|
||||
key: 'test',
|
||||
value: function test(browser, version) {
|
||||
version = version.split('-');
|
||||
if (version.length === 1) version.push(version[0]);
|
||||
return _.find(this._list, function (_ref) {
|
||||
var _ref2 = _slicedToArray(_ref, 2);
|
||||
|
||||
var b = _ref2[0];
|
||||
var v = _ref2[1];
|
||||
|
||||
return b === browser && v >= version[0] && v <= version[1];
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: 'list',
|
||||
value: function list() {
|
||||
return this._list.slice();
|
||||
}
|
||||
}]);
|
||||
|
||||
return BrowserSelection;
|
||||
})();
|
168
node_modules/doiuse/lib/detect-feature-use.js
generated
vendored
Normal file
168
node_modules/doiuse/lib/detect-feature-use.js
generated
vendored
Normal file
@@ -0,0 +1,168 @@
|
||||
'use strict';
|
||||
|
||||
var _createClass = (function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ('value' in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; })();
|
||||
|
||||
function _toConsumableArray(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; return arr2; } else { return Array.from(arr); } }
|
||||
|
||||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError('Cannot call a class as a function'); } }
|
||||
|
||||
var _ = require('lodash');
|
||||
var features = require('../data/features');
|
||||
|
||||
var PLUGIN_OPTION_COMMENT = 'doiuse-';
|
||||
var DISABLE_FEATURE_COMMENT = PLUGIN_OPTION_COMMENT + 'disable';
|
||||
var ENABLE_FEATURE_COMMENT = PLUGIN_OPTION_COMMENT + 'enable';
|
||||
|
||||
/*
|
||||
* str: string to search in.
|
||||
* searchfor: string or pattern to search for.
|
||||
*/
|
||||
function isFoundIn(str) {
|
||||
str = stripUrls(str);
|
||||
return function find(searchfor) {
|
||||
if (searchfor instanceof RegExp) return searchfor.test(str);else if (_.isFunction(searchfor)) return searchfor(str);else return str && str.indexOf(searchfor) >= 0;
|
||||
};
|
||||
}
|
||||
|
||||
/*
|
||||
* Strip the contents of url literals so they aren't matched
|
||||
* by our naive substring matching.
|
||||
*/
|
||||
function stripUrls(str) {
|
||||
return str.replace(/url\([^\)]*\)/g, 'url()');
|
||||
}
|
||||
|
||||
/**
|
||||
* Detect the use of any of a given list of CSS features.
|
||||
* ```
|
||||
* var detector = new Detector(featureList)
|
||||
* detector.process(css, cb)
|
||||
* ```
|
||||
*
|
||||
* `featureList`: an array of feature slugs (see caniuse-db)
|
||||
* `cb`: a callback that gets called for each usage of one of the given features,
|
||||
* called with an argument like:
|
||||
* ```
|
||||
* {
|
||||
* usage: {} // postcss node where usage was found
|
||||
* feature: {} // caniuse-db feature slug
|
||||
* ignore: {} // caniuse-db feature to ignore in current file
|
||||
* }
|
||||
* ```
|
||||
*/
|
||||
module.exports = (function () {
|
||||
function Detector(featureList) {
|
||||
_classCallCheck(this, Detector);
|
||||
|
||||
this.features = _.pick(features, featureList);
|
||||
this.ignore = [];
|
||||
}
|
||||
|
||||
_createClass(Detector, [{
|
||||
key: 'decl',
|
||||
value: function decl(_decl, cb) {
|
||||
for (var feat in this.features) {
|
||||
var properties = this.features[feat].properties || [];
|
||||
var values = this.features[feat].values;
|
||||
if (properties.filter(isFoundIn(_decl.prop)).length > 0) {
|
||||
if (!values || values.filter(isFoundIn(_decl.value)).length > 0) {
|
||||
cb({ usage: _decl, feature: feat, ignore: this.ignore });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: 'rule',
|
||||
value: function rule(_rule, cb) {
|
||||
for (var feat in this.features) {
|
||||
var selectors = this.features[feat].selectors || [];
|
||||
if (selectors.filter(isFoundIn(_rule.selector)).length > 0) {
|
||||
cb({ usage: _rule, feature: feat, ignore: this.ignore });
|
||||
}
|
||||
}
|
||||
|
||||
this.node(_rule, cb);
|
||||
}
|
||||
}, {
|
||||
key: 'atrule',
|
||||
value: function atrule(_atrule, cb) {
|
||||
for (var feat in this.features) {
|
||||
var atrules = this.features[feat].atrules || [];
|
||||
var params = this.features[feat].params;
|
||||
if (atrules.filter(isFoundIn(_atrule.name)).length > 0) {
|
||||
if (!params || params.filter(isFoundIn(_atrule.params)).length > 0) {
|
||||
cb({ usage: _atrule, feature: feat, ignore: this.ignore });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.node(_atrule, cb);
|
||||
}
|
||||
}, {
|
||||
key: 'comment',
|
||||
value: function comment(_comment, cb) {
|
||||
var text = _comment.text.toLowerCase();
|
||||
|
||||
if (_.startsWith(text, PLUGIN_OPTION_COMMENT)) {
|
||||
var option = text.split(' ', 1)[0];
|
||||
var value = text.replace(option, '').trim();
|
||||
|
||||
switch (option) {
|
||||
case DISABLE_FEATURE_COMMENT:
|
||||
if (value === '') {
|
||||
this.ignore = _.keysIn(this.features);
|
||||
} else {
|
||||
this.ignore = _.uniq([].concat(_toConsumableArray(this.ignore), _toConsumableArray(value.split(',').map(function (feat) {
|
||||
return feat.trim();
|
||||
}))));
|
||||
}
|
||||
break;
|
||||
case ENABLE_FEATURE_COMMENT:
|
||||
if (value === '') {
|
||||
this.ignore = [];
|
||||
} else {
|
||||
this.ignore = _.without.apply(_, [this.ignore].concat(_toConsumableArray(value.split(',').map(function (feat) {
|
||||
return feat.trim();
|
||||
}))));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}, {
|
||||
key: 'node',
|
||||
value: function node(_node, cb) {
|
||||
var _this = this;
|
||||
|
||||
_node.each(function (child) {
|
||||
switch (child.type) {
|
||||
case 'rule':
|
||||
_this.rule(child, cb);
|
||||
break;
|
||||
case 'decl':
|
||||
_this.decl(child, cb);
|
||||
break;
|
||||
case 'atrule':
|
||||
_this.atrule(child, cb);
|
||||
break;
|
||||
case 'comment':
|
||||
_this.comment(child, cb);
|
||||
break;
|
||||
default:
|
||||
throw new Error('Unkonwn node type ' + child.type);
|
||||
}
|
||||
});
|
||||
}
|
||||
}, {
|
||||
key: 'process',
|
||||
value: function process(node, cb) {
|
||||
// Reset ignoring rules specified by inline comments per each file
|
||||
this.ignore = [];
|
||||
|
||||
// Recursively walk nodes in file
|
||||
this.node(node, cb);
|
||||
}
|
||||
}]);
|
||||
|
||||
return Detector;
|
||||
})();
|
86
node_modules/doiuse/lib/doiuse.js
generated
vendored
Normal file
86
node_modules/doiuse/lib/doiuse.js
generated
vendored
Normal file
@@ -0,0 +1,86 @@
|
||||
'use strict';
|
||||
|
||||
var _ = require('lodash');
|
||||
var missingSupport = require('./missing-support');
|
||||
var Detector = require('./detect-feature-use');
|
||||
var Multimatch = require('multimatch');
|
||||
|
||||
function doiuse(options) {
|
||||
var browserQuery = options.browsers;
|
||||
var onFeatureUsage = options.onFeatureUsage;
|
||||
var ignoreOptions = options.ignore;
|
||||
var ignoreFiles = options.ignoreFiles;
|
||||
|
||||
if (!browserQuery) {
|
||||
browserQuery = doiuse['default'].slice();
|
||||
}
|
||||
|
||||
var _missingSupport = missingSupport(browserQuery);
|
||||
|
||||
var browsers = _missingSupport.browsers;
|
||||
var features = _missingSupport.features;
|
||||
|
||||
var detector = new Detector(_.keys(features));
|
||||
|
||||
return {
|
||||
info: function info() {
|
||||
return {
|
||||
browsers: browsers,
|
||||
features: features
|
||||
};
|
||||
},
|
||||
|
||||
postcss: function postcss(css, result) {
|
||||
return detector.process(css, function (_ref) {
|
||||
var feature = _ref.feature;
|
||||
var usage = _ref.usage;
|
||||
var ignore = _ref.ignore;
|
||||
|
||||
if (ignore && ignore.indexOf(feature) !== -1) {
|
||||
return;
|
||||
}
|
||||
if (ignoreOptions && ignoreOptions.indexOf(feature) !== -1) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (ignoreFiles && Multimatch(usage.source.input.from, ignoreFiles).length > 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
var messages = [];
|
||||
if (features[feature].missing) {
|
||||
messages.push('not supported by: ' + features[feature].missing);
|
||||
}
|
||||
if (features[feature].partial) {
|
||||
messages.push('only partially supported by: ' + features[feature].partial);
|
||||
}
|
||||
|
||||
var message = features[feature].title + ' ' + messages.join(' and ') + ' (' + feature + ')';
|
||||
|
||||
result.warn(message, { node: usage, plugin: 'doiuse' });
|
||||
|
||||
if (onFeatureUsage) {
|
||||
var loc = usage.source;
|
||||
loc.original = css.source.input.map ? {
|
||||
start: css.source.input.map.consumer().originalPositionFor(loc.start),
|
||||
end: css.source.input.map.consumer().originalPositionFor(loc.end)
|
||||
} : {
|
||||
start: loc.start,
|
||||
end: loc.end
|
||||
};
|
||||
|
||||
message = (loc.original.start.source || loc.input.file || loc.input.from) + ':' + loc.original.start.line + ':' + loc.original.start.column + ': ' + message;
|
||||
|
||||
onFeatureUsage({
|
||||
feature: feature,
|
||||
featureData: features[feature],
|
||||
usage: usage,
|
||||
message: message
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
doiuse['default'] = ['> 1%', 'last 2 versions', 'Firefox ESR', 'Opera 12.1'];
|
||||
module.exports = doiuse;
|
110
node_modules/doiuse/lib/missing-support.js
generated
vendored
Normal file
110
node_modules/doiuse/lib/missing-support.js
generated
vendored
Normal file
@@ -0,0 +1,110 @@
|
||||
'use strict';
|
||||
|
||||
var features = require('../data/features');
|
||||
var BrowserSelection = require('./browsers');
|
||||
var _ = require('lodash');
|
||||
var formatBrowserName = require('./util').formatBrowserName;
|
||||
|
||||
var caniuse = require('caniuse-db/fulldata-json/data-1.0');
|
||||
|
||||
function filterStats(browsers, stats) {
|
||||
return _.reduce(stats, function (resultStats, versionData, browser) {
|
||||
// filter only versions of selected browsers that don't fully support this feature
|
||||
var feature = _.reduce(versionData, function (result, support, ver) {
|
||||
var selected = browsers.test(browser, ver);
|
||||
if (selected) {
|
||||
// check if browser is NOT fully (i.e., don't have 'y' in their stats) supported
|
||||
if (!/(^|\s)y($|\s)/.test(support)) {
|
||||
// when it's not partially supported ('a'), it's missing
|
||||
var testprop = /(^|\s)a($|\s)/.test(support) ? 'partial' : 'missing';
|
||||
if (!result[testprop]) {
|
||||
result[testprop] = {};
|
||||
}
|
||||
result[testprop][selected[1]] = support;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}, { missing: {}, partial: {} });
|
||||
|
||||
if (_.keys(feature.missing).length !== 0) {
|
||||
resultStats.missing[browser] = feature.missing;
|
||||
}
|
||||
if (_.keys(feature.partial).length !== 0) {
|
||||
resultStats.partial[browser] = feature.partial;
|
||||
}
|
||||
return resultStats;
|
||||
}, { missing: {}, partial: {} });
|
||||
}
|
||||
function lackingBrowsers(browserStats) {
|
||||
return _.reduce(browserStats, function (res, versions, browser) {
|
||||
res.push(formatBrowserName(browser, _.keys(versions)));
|
||||
return res;
|
||||
}, []).join(', ');
|
||||
}
|
||||
|
||||
/**
|
||||
* Get data on CSS features not supported by the given autoprefixer-like
|
||||
* browser selection.
|
||||
*
|
||||
* @returns `{browsers, features}`, where `features` is an array of:
|
||||
* ```
|
||||
* {
|
||||
* 'feature-name': {
|
||||
* title: 'Title of feature'
|
||||
* missing: "IE (8), Chrome (31)"
|
||||
* missingData: {
|
||||
* // map of browser -> version -> (lack of)support code
|
||||
* ie: { '8': 'n' },
|
||||
* chrome: { '31': 'n' }
|
||||
* }
|
||||
* partialData: {
|
||||
* // map of browser -> version -> (partial)support code
|
||||
* ie: { '7': 'a' },
|
||||
* ff: { '29': 'a #1' }
|
||||
* }
|
||||
* caniuseData: {
|
||||
* // caniuse-db json data for this feature
|
||||
* }
|
||||
* },
|
||||
* 'feature-name-2': {} // etc.
|
||||
* }
|
||||
* ```
|
||||
*
|
||||
* `feature-name` is a caniuse-db slug.
|
||||
*/
|
||||
function missing(browserRequest) {
|
||||
var browsers = new BrowserSelection(browserRequest);
|
||||
var result = {};
|
||||
|
||||
Object.keys(features).forEach(function (feature) {
|
||||
var featureData = caniuse.data[feature];
|
||||
var lackData = filterStats(browsers, featureData.stats);
|
||||
var missingData = lackData.missing;
|
||||
var partialData = lackData.partial;
|
||||
// browsers with missing or partial support for this feature
|
||||
var missing = lackingBrowsers(missingData);
|
||||
var partial = lackingBrowsers(partialData);
|
||||
|
||||
if (missing.length > 0 || partial.length > 0) {
|
||||
result[feature] = {
|
||||
title: featureData.title,
|
||||
caniuseData: featureData
|
||||
};
|
||||
if (missing.length > 0) {
|
||||
result[feature].missingData = missingData;
|
||||
result[feature].missing = missing;
|
||||
}
|
||||
if (partial.length > 0) {
|
||||
result[feature].partialData = partialData;
|
||||
result[feature].partial = partial;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
return {
|
||||
browsers: browsers.list(),
|
||||
features: result
|
||||
};
|
||||
}
|
||||
|
||||
module.exports = missing;
|
13
node_modules/doiuse/lib/util.js
generated
vendored
Normal file
13
node_modules/doiuse/lib/util.js
generated
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
'use strict';
|
||||
|
||||
var agents = require('caniuse-db/data').agents;
|
||||
|
||||
module.exports = {
|
||||
formatBrowserName: function formatBrowserName(browserKey, versions) {
|
||||
var browserName = (agents[browserKey] || {}).browser;
|
||||
if (!versions) {
|
||||
return browserName;
|
||||
}
|
||||
return browserName + ' (' + versions.join(',') + ')';
|
||||
}
|
||||
};
|
510
node_modules/doiuse/node_modules/source-map/README.md
generated
vendored
Normal file
510
node_modules/doiuse/node_modules/source-map/README.md
generated
vendored
Normal file
@@ -0,0 +1,510 @@
|
||||
# Source Map
|
||||
|
||||
This is a library to generate and consume the source map format
|
||||
[described here][format].
|
||||
|
||||
This library is written in the Asynchronous Module Definition format, and works
|
||||
in the following environments:
|
||||
|
||||
* Modern Browsers supporting ECMAScript 5 (either after the build, or with an
|
||||
AMD loader such as RequireJS)
|
||||
|
||||
* Inside Firefox (as a JSM file, after the build)
|
||||
|
||||
* With NodeJS versions 0.8.X and higher
|
||||
|
||||
## Node
|
||||
|
||||
$ npm install source-map
|
||||
|
||||
## Building from Source (for everywhere else)
|
||||
|
||||
Install Node and then run
|
||||
|
||||
$ git clone https://fitzgen@github.com/mozilla/source-map.git
|
||||
$ cd source-map
|
||||
$ npm link .
|
||||
|
||||
Next, run
|
||||
|
||||
$ node Makefile.dryice.js
|
||||
|
||||
This should spew a bunch of stuff to stdout, and create the following files:
|
||||
|
||||
* `dist/source-map.js` - The unminified browser version.
|
||||
|
||||
* `dist/source-map.min.js` - The minified browser version.
|
||||
|
||||
* `dist/SourceMap.jsm` - The JavaScript Module for inclusion in Firefox source.
|
||||
|
||||
## Examples
|
||||
|
||||
### Consuming a source map
|
||||
|
||||
```js
|
||||
var rawSourceMap = {
|
||||
version: 3,
|
||||
file: 'min.js',
|
||||
names: ['bar', 'baz', 'n'],
|
||||
sources: ['one.js', 'two.js'],
|
||||
sourceRoot: 'http://example.com/www/js/',
|
||||
mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'
|
||||
};
|
||||
|
||||
var smc = new SourceMapConsumer(rawSourceMap);
|
||||
|
||||
console.log(smc.sources);
|
||||
// [ 'http://example.com/www/js/one.js',
|
||||
// 'http://example.com/www/js/two.js' ]
|
||||
|
||||
console.log(smc.originalPositionFor({
|
||||
line: 2,
|
||||
column: 28
|
||||
}));
|
||||
// { source: 'http://example.com/www/js/two.js',
|
||||
// line: 2,
|
||||
// column: 10,
|
||||
// name: 'n' }
|
||||
|
||||
console.log(smc.generatedPositionFor({
|
||||
source: 'http://example.com/www/js/two.js',
|
||||
line: 2,
|
||||
column: 10
|
||||
}));
|
||||
// { line: 2, column: 28 }
|
||||
|
||||
smc.eachMapping(function (m) {
|
||||
// ...
|
||||
});
|
||||
```
|
||||
|
||||
### Generating a source map
|
||||
|
||||
In depth guide:
|
||||
[**Compiling to JavaScript, and Debugging with Source Maps**](https://hacks.mozilla.org/2013/05/compiling-to-javascript-and-debugging-with-source-maps/)
|
||||
|
||||
#### With SourceNode (high level API)
|
||||
|
||||
```js
|
||||
function compile(ast) {
|
||||
switch (ast.type) {
|
||||
case 'BinaryExpression':
|
||||
return new SourceNode(
|
||||
ast.location.line,
|
||||
ast.location.column,
|
||||
ast.location.source,
|
||||
[compile(ast.left), " + ", compile(ast.right)]
|
||||
);
|
||||
case 'Literal':
|
||||
return new SourceNode(
|
||||
ast.location.line,
|
||||
ast.location.column,
|
||||
ast.location.source,
|
||||
String(ast.value)
|
||||
);
|
||||
// ...
|
||||
default:
|
||||
throw new Error("Bad AST");
|
||||
}
|
||||
}
|
||||
|
||||
var ast = parse("40 + 2", "add.js");
|
||||
console.log(compile(ast).toStringWithSourceMap({
|
||||
file: 'add.js'
|
||||
}));
|
||||
// { code: '40 + 2',
|
||||
// map: [object SourceMapGenerator] }
|
||||
```
|
||||
|
||||
#### With SourceMapGenerator (low level API)
|
||||
|
||||
```js
|
||||
var map = new SourceMapGenerator({
|
||||
file: "source-mapped.js"
|
||||
});
|
||||
|
||||
map.addMapping({
|
||||
generated: {
|
||||
line: 10,
|
||||
column: 35
|
||||
},
|
||||
source: "foo.js",
|
||||
original: {
|
||||
line: 33,
|
||||
column: 2
|
||||
},
|
||||
name: "christopher"
|
||||
});
|
||||
|
||||
console.log(map.toString());
|
||||
// '{"version":3,"file":"source-mapped.js","sources":["foo.js"],"names":["christopher"],"mappings":";;;;;;;;;mCAgCEA"}'
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
Get a reference to the module:
|
||||
|
||||
```js
|
||||
// NodeJS
|
||||
var sourceMap = require('source-map');
|
||||
|
||||
// Browser builds
|
||||
var sourceMap = window.sourceMap;
|
||||
|
||||
// Inside Firefox
|
||||
let sourceMap = {};
|
||||
Components.utils.import('resource:///modules/devtools/SourceMap.jsm', sourceMap);
|
||||
```
|
||||
|
||||
### SourceMapConsumer
|
||||
|
||||
A SourceMapConsumer instance represents a parsed source map which we can query
|
||||
for information about the original file positions by giving it a file position
|
||||
in the generated source.
|
||||
|
||||
#### new SourceMapConsumer(rawSourceMap)
|
||||
|
||||
The only parameter is the raw source map (either as a string which can be
|
||||
`JSON.parse`'d, or an object). According to the spec, source maps have the
|
||||
following attributes:
|
||||
|
||||
* `version`: Which version of the source map spec this map is following.
|
||||
|
||||
* `sources`: An array of URLs to the original source files.
|
||||
|
||||
* `names`: An array of identifiers which can be referrenced by individual
|
||||
mappings.
|
||||
|
||||
* `sourceRoot`: Optional. The URL root from which all sources are relative.
|
||||
|
||||
* `sourcesContent`: Optional. An array of contents of the original source files.
|
||||
|
||||
* `mappings`: A string of base64 VLQs which contain the actual mappings.
|
||||
|
||||
* `file`: Optional. The generated filename this source map is associated with.
|
||||
|
||||
#### SourceMapConsumer.prototype.computeColumnSpans()
|
||||
|
||||
Compute the last column for each generated mapping. The last column is
|
||||
inclusive.
|
||||
|
||||
#### SourceMapConsumer.prototype.originalPositionFor(generatedPosition)
|
||||
|
||||
Returns the original source, line, and column information for the generated
|
||||
source's line and column positions provided. The only argument is an object with
|
||||
the following properties:
|
||||
|
||||
* `line`: The line number in the generated source.
|
||||
|
||||
* `column`: The column number in the generated source.
|
||||
|
||||
* `bias`: Either `SourceMapConsumer.GREATEST_LOWER_BOUND` or
|
||||
`SourceMapConsumer.LEAST_UPPER_BOUND`. Specifies whether to return the closest
|
||||
element that is smaller than or greater than the one we are searching for,
|
||||
respectively, if the exact element cannot be found. Defaults to
|
||||
`SourceMapConsumer.GREATEST_LOWER_BOUND`.
|
||||
|
||||
and an object is returned with the following properties:
|
||||
|
||||
* `source`: The original source file, or null if this information is not
|
||||
available.
|
||||
|
||||
* `line`: The line number in the original source, or null if this information is
|
||||
not available.
|
||||
|
||||
* `column`: The column number in the original source, or null or null if this
|
||||
information is not available.
|
||||
|
||||
* `name`: The original identifier, or null if this information is not available.
|
||||
|
||||
#### SourceMapConsumer.prototype.generatedPositionFor(originalPosition)
|
||||
|
||||
Returns the generated line and column information for the original source,
|
||||
line, and column positions provided. The only argument is an object with
|
||||
the following properties:
|
||||
|
||||
* `source`: The filename of the original source.
|
||||
|
||||
* `line`: The line number in the original source.
|
||||
|
||||
* `column`: The column number in the original source.
|
||||
|
||||
and an object is returned with the following properties:
|
||||
|
||||
* `line`: The line number in the generated source, or null.
|
||||
|
||||
* `column`: The column number in the generated source, or null.
|
||||
|
||||
#### SourceMapConsumer.prototype.allGeneratedPositionsFor(originalPosition)
|
||||
|
||||
Returns all generated line and column information for the original source, line,
|
||||
and column provided. If no column is provided, returns all mappings
|
||||
corresponding to a either the line we are searching for or the next closest line
|
||||
that has any mappings. Otherwise, returns all mappings corresponding to the
|
||||
given line and either the column we are searching for or the next closest column
|
||||
that has any offsets.
|
||||
|
||||
The only argument is an object with the following properties:
|
||||
|
||||
* `source`: The filename of the original source.
|
||||
|
||||
* `line`: The line number in the original source.
|
||||
|
||||
* `column`: Optional. The column number in the original source.
|
||||
|
||||
and an array of objects is returned, each with the following properties:
|
||||
|
||||
* `line`: The line number in the generated source, or null.
|
||||
|
||||
* `column`: The column number in the generated source, or null.
|
||||
|
||||
#### SourceMapConsumer.prototype.hasContentsOfAllSources()
|
||||
|
||||
Return true if we have the embedded source content for every source listed in
|
||||
the source map, false otherwise.
|
||||
|
||||
In other words, if this method returns `true`, then `smc.sourceContentFor(s)`
|
||||
will succeed for every source `s` in `smc.sources`.
|
||||
|
||||
#### SourceMapConsumer.prototype.sourceContentFor(source[, returnNullOnMissing])
|
||||
|
||||
Returns the original source content for the source provided. The only
|
||||
argument is the URL of the original source file.
|
||||
|
||||
If the source content for the given source is not found, then an error is
|
||||
thrown. Optionally, pass `true` as the second param to have `null` returned
|
||||
instead.
|
||||
|
||||
#### SourceMapConsumer.prototype.eachMapping(callback, context, order)
|
||||
|
||||
Iterate over each mapping between an original source/line/column and a
|
||||
generated line/column in this source map.
|
||||
|
||||
* `callback`: The function that is called with each mapping. Mappings have the
|
||||
form `{ source, generatedLine, generatedColumn, originalLine, originalColumn,
|
||||
name }`
|
||||
|
||||
* `context`: Optional. If specified, this object will be the value of `this`
|
||||
every time that `callback` is called.
|
||||
|
||||
* `order`: Either `SourceMapConsumer.GENERATED_ORDER` or
|
||||
`SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to iterate over
|
||||
the mappings sorted by the generated file's line/column order or the
|
||||
original's source/line/column order, respectively. Defaults to
|
||||
`SourceMapConsumer.GENERATED_ORDER`.
|
||||
|
||||
### SourceMapGenerator
|
||||
|
||||
An instance of the SourceMapGenerator represents a source map which is being
|
||||
built incrementally.
|
||||
|
||||
#### new SourceMapGenerator([startOfSourceMap])
|
||||
|
||||
You may pass an object with the following properties:
|
||||
|
||||
* `file`: The filename of the generated source that this source map is
|
||||
associated with.
|
||||
|
||||
* `sourceRoot`: A root for all relative URLs in this source map.
|
||||
|
||||
* `skipValidation`: Optional. When `true`, disables validation of mappings as
|
||||
they are added. This can improve performance but should be used with
|
||||
discretion, as a last resort. Even then, one should avoid using this flag when
|
||||
running tests, if possible.
|
||||
|
||||
#### SourceMapGenerator.fromSourceMap(sourceMapConsumer)
|
||||
|
||||
Creates a new SourceMapGenerator based on a SourceMapConsumer
|
||||
|
||||
* `sourceMapConsumer` The SourceMap.
|
||||
|
||||
#### SourceMapGenerator.prototype.addMapping(mapping)
|
||||
|
||||
Add a single mapping from original source line and column to the generated
|
||||
source's line and column for this source map being created. The mapping object
|
||||
should have the following properties:
|
||||
|
||||
* `generated`: An object with the generated line and column positions.
|
||||
|
||||
* `original`: An object with the original line and column positions.
|
||||
|
||||
* `source`: The original source file (relative to the sourceRoot).
|
||||
|
||||
* `name`: An optional original token name for this mapping.
|
||||
|
||||
#### SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)
|
||||
|
||||
Set the source content for an original source file.
|
||||
|
||||
* `sourceFile` the URL of the original source file.
|
||||
|
||||
* `sourceContent` the content of the source file.
|
||||
|
||||
#### SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])
|
||||
|
||||
Applies a SourceMap for a source file to the SourceMap.
|
||||
Each mapping to the supplied source file is rewritten using the
|
||||
supplied SourceMap. Note: The resolution for the resulting mappings
|
||||
is the minimium of this map and the supplied map.
|
||||
|
||||
* `sourceMapConsumer`: The SourceMap to be applied.
|
||||
|
||||
* `sourceFile`: Optional. The filename of the source file.
|
||||
If omitted, sourceMapConsumer.file will be used, if it exists.
|
||||
Otherwise an error will be thrown.
|
||||
|
||||
* `sourceMapPath`: Optional. The dirname of the path to the SourceMap
|
||||
to be applied. If relative, it is relative to the SourceMap.
|
||||
|
||||
This parameter is needed when the two SourceMaps aren't in the same
|
||||
directory, and the SourceMap to be applied contains relative source
|
||||
paths. If so, those relative source paths need to be rewritten
|
||||
relative to the SourceMap.
|
||||
|
||||
If omitted, it is assumed that both SourceMaps are in the same directory,
|
||||
thus not needing any rewriting. (Supplying `'.'` has the same effect.)
|
||||
|
||||
#### SourceMapGenerator.prototype.toString()
|
||||
|
||||
Renders the source map being generated to a string.
|
||||
|
||||
### SourceNode
|
||||
|
||||
SourceNodes provide a way to abstract over interpolating and/or concatenating
|
||||
snippets of generated JavaScript source code, while maintaining the line and
|
||||
column information associated between those snippets and the original source
|
||||
code. This is useful as the final intermediate representation a compiler might
|
||||
use before outputting the generated JS and source map.
|
||||
|
||||
#### new SourceNode([line, column, source[, chunk[, name]]])
|
||||
|
||||
* `line`: The original line number associated with this source node, or null if
|
||||
it isn't associated with an original line.
|
||||
|
||||
* `column`: The original column number associated with this source node, or null
|
||||
if it isn't associated with an original column.
|
||||
|
||||
* `source`: The original source's filename; null if no filename is provided.
|
||||
|
||||
* `chunk`: Optional. Is immediately passed to `SourceNode.prototype.add`, see
|
||||
below.
|
||||
|
||||
* `name`: Optional. The original identifier.
|
||||
|
||||
#### SourceNode.fromStringWithSourceMap(code, sourceMapConsumer[, relativePath])
|
||||
|
||||
Creates a SourceNode from generated code and a SourceMapConsumer.
|
||||
|
||||
* `code`: The generated code
|
||||
|
||||
* `sourceMapConsumer` The SourceMap for the generated code
|
||||
|
||||
* `relativePath` The optional path that relative sources in `sourceMapConsumer`
|
||||
should be relative to.
|
||||
|
||||
#### SourceNode.prototype.add(chunk)
|
||||
|
||||
Add a chunk of generated JS to this source node.
|
||||
|
||||
* `chunk`: A string snippet of generated JS code, another instance of
|
||||
`SourceNode`, or an array where each member is one of those things.
|
||||
|
||||
#### SourceNode.prototype.prepend(chunk)
|
||||
|
||||
Prepend a chunk of generated JS to this source node.
|
||||
|
||||
* `chunk`: A string snippet of generated JS code, another instance of
|
||||
`SourceNode`, or an array where each member is one of those things.
|
||||
|
||||
#### SourceNode.prototype.setSourceContent(sourceFile, sourceContent)
|
||||
|
||||
Set the source content for a source file. This will be added to the
|
||||
`SourceMap` in the `sourcesContent` field.
|
||||
|
||||
* `sourceFile`: The filename of the source file
|
||||
|
||||
* `sourceContent`: The content of the source file
|
||||
|
||||
#### SourceNode.prototype.walk(fn)
|
||||
|
||||
Walk over the tree of JS snippets in this node and its children. The walking
|
||||
function is called once for each snippet of JS and is passed that snippet and
|
||||
the its original associated source's line/column location.
|
||||
|
||||
* `fn`: The traversal function.
|
||||
|
||||
#### SourceNode.prototype.walkSourceContents(fn)
|
||||
|
||||
Walk over the tree of SourceNodes. The walking function is called for each
|
||||
source file content and is passed the filename and source content.
|
||||
|
||||
* `fn`: The traversal function.
|
||||
|
||||
#### SourceNode.prototype.join(sep)
|
||||
|
||||
Like `Array.prototype.join` except for SourceNodes. Inserts the separator
|
||||
between each of this source node's children.
|
||||
|
||||
* `sep`: The separator.
|
||||
|
||||
#### SourceNode.prototype.replaceRight(pattern, replacement)
|
||||
|
||||
Call `String.prototype.replace` on the very right-most source snippet. Useful
|
||||
for trimming whitespace from the end of a source node, etc.
|
||||
|
||||
* `pattern`: The pattern to replace.
|
||||
|
||||
* `replacement`: The thing to replace the pattern with.
|
||||
|
||||
#### SourceNode.prototype.toString()
|
||||
|
||||
Return the string representation of this source node. Walks over the tree and
|
||||
concatenates all the various snippets together to one string.
|
||||
|
||||
#### SourceNode.prototype.toStringWithSourceMap([startOfSourceMap])
|
||||
|
||||
Returns the string representation of this tree of source nodes, plus a
|
||||
SourceMapGenerator which contains all the mappings between the generated and
|
||||
original sources.
|
||||
|
||||
The arguments are the same as those to `new SourceMapGenerator`.
|
||||
|
||||
## Tests
|
||||
|
||||
[](https://travis-ci.org/mozilla/source-map)
|
||||
|
||||
Install NodeJS version 0.8.0 or greater, then run `node test/run-tests.js`.
|
||||
|
||||
To add new tests, create a new file named `test/test-<your new test name>.js`
|
||||
and export your test functions with names that start with "test", for example
|
||||
|
||||
```js
|
||||
exports["test doing the foo bar"] = function (assert, util) {
|
||||
...
|
||||
};
|
||||
```
|
||||
|
||||
The new test will be located automatically when you run the suite.
|
||||
|
||||
The `util` argument is the test utility module located at `test/source-map/util`.
|
||||
|
||||
The `assert` argument is a cut down version of node's assert module. You have
|
||||
access to the following assertion functions:
|
||||
|
||||
* `doesNotThrow`
|
||||
|
||||
* `equal`
|
||||
|
||||
* `ok`
|
||||
|
||||
* `strictEqual`
|
||||
|
||||
* `throws`
|
||||
|
||||
(The reason for the restricted set of test functions is because we need the
|
||||
tests to run inside Firefox's test suite as well and so the assert module is
|
||||
shimmed in that environment. See `build/assert-shim.js`.)
|
||||
|
||||
[format]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit
|
||||
[feature]: https://wiki.mozilla.org/DevTools/Features/SourceMap
|
||||
[Dryice]: https://github.com/mozilla/dryice
|
56
node_modules/doiuse/node_modules/source-map/build/assert-shim.js
generated
vendored
Normal file
56
node_modules/doiuse/node_modules/source-map/build/assert-shim.js
generated
vendored
Normal file
@@ -0,0 +1,56 @@
|
||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
||||
/*
|
||||
* Copyright 2011 Mozilla Foundation and contributors
|
||||
* Licensed under the New BSD license. See LICENSE or:
|
||||
* http://opensource.org/licenses/BSD-3-Clause
|
||||
*/
|
||||
define('test/source-map/assert', ['exports'], function (exports) {
|
||||
|
||||
let do_throw = function (msg) {
|
||||
throw new Error(msg);
|
||||
};
|
||||
|
||||
exports.init = function (throw_fn) {
|
||||
do_throw = throw_fn;
|
||||
};
|
||||
|
||||
exports.doesNotThrow = function (fn) {
|
||||
try {
|
||||
fn();
|
||||
}
|
||||
catch (e) {
|
||||
do_throw(e.message);
|
||||
}
|
||||
};
|
||||
|
||||
exports.equal = function (actual, expected, msg) {
|
||||
msg = msg || String(actual) + ' != ' + String(expected);
|
||||
if (actual != expected) {
|
||||
do_throw(msg);
|
||||
}
|
||||
};
|
||||
|
||||
exports.ok = function (val, msg) {
|
||||
msg = msg || String(val) + ' is falsey';
|
||||
if (!Boolean(val)) {
|
||||
do_throw(msg);
|
||||
}
|
||||
};
|
||||
|
||||
exports.strictEqual = function (actual, expected, msg) {
|
||||
msg = msg || String(actual) + ' !== ' + String(expected);
|
||||
if (actual !== expected) {
|
||||
do_throw(msg);
|
||||
}
|
||||
};
|
||||
|
||||
exports.throws = function (fn) {
|
||||
try {
|
||||
fn();
|
||||
do_throw('Expected an error to be thrown, but it wasn\'t.');
|
||||
}
|
||||
catch (e) {
|
||||
}
|
||||
};
|
||||
|
||||
});
|
152
node_modules/doiuse/node_modules/source-map/build/mini-require.js
generated
vendored
Normal file
152
node_modules/doiuse/node_modules/source-map/build/mini-require.js
generated
vendored
Normal file
@@ -0,0 +1,152 @@
|
||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
||||
/*
|
||||
* Copyright 2011 Mozilla Foundation and contributors
|
||||
* Licensed under the New BSD license. See LICENSE or:
|
||||
* http://opensource.org/licenses/BSD-3-Clause
|
||||
*/
|
||||
|
||||
/**
|
||||
* Define a module along with a payload.
|
||||
* @param {string} moduleName Name for the payload
|
||||
* @param {ignored} deps Ignored. For compatibility with CommonJS AMD Spec
|
||||
* @param {function} payload Function with (require, exports, module) params
|
||||
*/
|
||||
function define(moduleName, deps, payload) {
|
||||
if (typeof moduleName != "string") {
|
||||
throw new TypeError('Expected string, got: ' + moduleName);
|
||||
}
|
||||
|
||||
if (arguments.length == 2) {
|
||||
payload = deps;
|
||||
}
|
||||
|
||||
if (moduleName in define.modules) {
|
||||
throw new Error("Module already defined: " + moduleName);
|
||||
}
|
||||
define.modules[moduleName] = payload;
|
||||
};
|
||||
|
||||
/**
|
||||
* The global store of un-instantiated modules
|
||||
*/
|
||||
define.modules = {};
|
||||
|
||||
|
||||
/**
|
||||
* We invoke require() in the context of a Domain so we can have multiple
|
||||
* sets of modules running separate from each other.
|
||||
* This contrasts with JSMs which are singletons, Domains allows us to
|
||||
* optionally load a CommonJS module twice with separate data each time.
|
||||
* Perhaps you want 2 command lines with a different set of commands in each,
|
||||
* for example.
|
||||
*/
|
||||
function Domain() {
|
||||
this.modules = {};
|
||||
this._currentModule = null;
|
||||
}
|
||||
|
||||
(function () {
|
||||
|
||||
/**
|
||||
* Lookup module names and resolve them by calling the definition function if
|
||||
* needed.
|
||||
* There are 2 ways to call this, either with an array of dependencies and a
|
||||
* callback to call when the dependencies are found (which can happen
|
||||
* asynchronously in an in-page context) or with a single string an no callback
|
||||
* where the dependency is resolved synchronously and returned.
|
||||
* The API is designed to be compatible with the CommonJS AMD spec and
|
||||
* RequireJS.
|
||||
* @param {string[]|string} deps A name, or names for the payload
|
||||
* @param {function|undefined} callback Function to call when the dependencies
|
||||
* are resolved
|
||||
* @return {undefined|object} The module required or undefined for
|
||||
* array/callback method
|
||||
*/
|
||||
Domain.prototype.require = function(deps, callback) {
|
||||
if (Array.isArray(deps)) {
|
||||
var params = deps.map(function(dep) {
|
||||
return this.lookup(dep);
|
||||
}, this);
|
||||
if (callback) {
|
||||
callback.apply(null, params);
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
else {
|
||||
return this.lookup(deps);
|
||||
}
|
||||
};
|
||||
|
||||
function normalize(path) {
|
||||
var bits = path.split('/');
|
||||
var i = 1;
|
||||
while (i < bits.length) {
|
||||
if (bits[i] === '..') {
|
||||
bits.splice(i-1, 1);
|
||||
} else if (bits[i] === '.') {
|
||||
bits.splice(i, 1);
|
||||
} else {
|
||||
i++;
|
||||
}
|
||||
}
|
||||
return bits.join('/');
|
||||
}
|
||||
|
||||
function join(a, b) {
|
||||
a = a.trim();
|
||||
b = b.trim();
|
||||
if (/^\//.test(b)) {
|
||||
return b;
|
||||
} else {
|
||||
return a.replace(/\/*$/, '/') + b;
|
||||
}
|
||||
}
|
||||
|
||||
function dirname(path) {
|
||||
var bits = path.split('/');
|
||||
bits.pop();
|
||||
return bits.join('/');
|
||||
}
|
||||
|
||||
/**
|
||||
* Lookup module names and resolve them by calling the definition function if
|
||||
* needed.
|
||||
* @param {string} moduleName A name for the payload to lookup
|
||||
* @return {object} The module specified by aModuleName or null if not found.
|
||||
*/
|
||||
Domain.prototype.lookup = function(moduleName) {
|
||||
if (/^\./.test(moduleName)) {
|
||||
moduleName = normalize(join(dirname(this._currentModule), moduleName));
|
||||
}
|
||||
|
||||
if (moduleName in this.modules) {
|
||||
var module = this.modules[moduleName];
|
||||
return module;
|
||||
}
|
||||
|
||||
if (!(moduleName in define.modules)) {
|
||||
throw new Error("Module not defined: " + moduleName);
|
||||
}
|
||||
|
||||
var module = define.modules[moduleName];
|
||||
|
||||
if (typeof module == "function") {
|
||||
var exports = {};
|
||||
var previousModule = this._currentModule;
|
||||
this._currentModule = moduleName;
|
||||
module(this.require.bind(this), exports, { id: moduleName, uri: "" });
|
||||
this._currentModule = previousModule;
|
||||
module = exports;
|
||||
}
|
||||
|
||||
// cache the resulting module object for next time
|
||||
this.modules[moduleName] = module;
|
||||
|
||||
return module;
|
||||
};
|
||||
|
||||
}());
|
||||
|
||||
define.Domain = Domain;
|
||||
define.globalDomain = new Domain();
|
||||
var require = define.globalDomain.require.bind(define.globalDomain);
|
21
node_modules/doiuse/node_modules/source-map/build/prefix-source-map.jsm
generated
vendored
Normal file
21
node_modules/doiuse/node_modules/source-map/build/prefix-source-map.jsm
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
||||
/*
|
||||
* Copyright 2011 Mozilla Foundation and contributors
|
||||
* Licensed under the New BSD license. See LICENSE or:
|
||||
* http://opensource.org/licenses/BSD-3-Clause
|
||||
*/
|
||||
|
||||
/*
|
||||
* WARNING!
|
||||
*
|
||||
* Do not edit this file directly, it is built from the sources at
|
||||
* https://github.com/mozilla/source-map/
|
||||
*/
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
this.EXPORTED_SYMBOLS = [ "SourceMapConsumer", "SourceMapGenerator", "SourceNode" ];
|
||||
|
||||
Components.utils.import("resource://gre/modules/devtools/Console.jsm");
|
||||
Components.utils.import('resource://gre/modules/devtools/Require.jsm');
|
18
node_modules/doiuse/node_modules/source-map/build/prefix-utils.jsm
generated
vendored
Normal file
18
node_modules/doiuse/node_modules/source-map/build/prefix-utils.jsm
generated
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
||||
/*
|
||||
* Copyright 2011 Mozilla Foundation and contributors
|
||||
* Licensed under the New BSD license. See LICENSE or:
|
||||
* http://opensource.org/licenses/BSD-3-Clause
|
||||
*/
|
||||
|
||||
/*
|
||||
* WARNING!
|
||||
*
|
||||
* Do not edit this file directly, it is built from the sources at
|
||||
* https://github.com/mozilla/source-map/
|
||||
*/
|
||||
|
||||
Components.utils.import('resource://gre/modules/devtools/Require.jsm');
|
||||
Components.utils.import('resource://gre/modules/devtools/SourceMap.jsm');
|
||||
|
||||
this.EXPORTED_SYMBOLS = [ "define", "runSourceMapTests" ];
|
8
node_modules/doiuse/node_modules/source-map/build/suffix-browser.js
generated
vendored
Normal file
8
node_modules/doiuse/node_modules/source-map/build/suffix-browser.js
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
this.sourceMap = {
|
||||
SourceMapConsumer: require('source-map/source-map-consumer').SourceMapConsumer,
|
||||
SourceMapGenerator: require('source-map/source-map-generator').SourceMapGenerator,
|
||||
SourceNode: require('source-map/source-node').SourceNode
|
||||
};
|
6
node_modules/doiuse/node_modules/source-map/build/suffix-source-map.jsm
generated
vendored
Normal file
6
node_modules/doiuse/node_modules/source-map/build/suffix-source-map.jsm
generated
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
this.SourceMapConsumer = require('source-map/source-map-consumer').SourceMapConsumer;
|
||||
this.SourceMapGenerator = require('source-map/source-map-generator').SourceMapGenerator;
|
||||
this.SourceNode = require('source-map/source-node').SourceNode;
|
21
node_modules/doiuse/node_modules/source-map/build/suffix-utils.jsm
generated
vendored
Normal file
21
node_modules/doiuse/node_modules/source-map/build/suffix-utils.jsm
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
||||
/*
|
||||
* Copyright 2011 Mozilla Foundation and contributors
|
||||
* Licensed under the New BSD license. See LICENSE or:
|
||||
* http://opensource.org/licenses/BSD-3-Clause
|
||||
*/
|
||||
function runSourceMapTests(modName, do_throw) {
|
||||
let mod = require(modName);
|
||||
let assert = require('test/source-map/assert');
|
||||
let util = require('test/source-map/util');
|
||||
|
||||
assert.init(do_throw);
|
||||
|
||||
for (let k in mod) {
|
||||
if (/^test/.test(k)) {
|
||||
mod[k](assert, util);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
this.runSourceMapTests = runSourceMapTests;
|
8
node_modules/doiuse/node_modules/source-map/build/test-prefix.js
generated
vendored
Normal file
8
node_modules/doiuse/node_modules/source-map/build/test-prefix.js
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
/*
|
||||
* WARNING!
|
||||
*
|
||||
* Do not edit this file directly, it is built from the sources at
|
||||
* https://github.com/mozilla/source-map/
|
||||
*/
|
||||
|
||||
Components.utils.import('resource://test/Utils.jsm');
|
3
node_modules/doiuse/node_modules/source-map/build/test-suffix.js
generated
vendored
Normal file
3
node_modules/doiuse/node_modules/source-map/build/test-suffix.js
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
function run_test() {
|
||||
runSourceMapTests('{THIS_MODULE}', do_throw);
|
||||
}
|
8
node_modules/doiuse/node_modules/source-map/lib/source-map.js
generated
vendored
Normal file
8
node_modules/doiuse/node_modules/source-map/lib/source-map.js
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
/*
|
||||
* Copyright 2009-2011 Mozilla Foundation and contributors
|
||||
* Licensed under the New BSD license. See LICENSE.txt or:
|
||||
* http://opensource.org/licenses/BSD-3-Clause
|
||||
*/
|
||||
exports.SourceMapGenerator = require('./source-map/source-map-generator').SourceMapGenerator;
|
||||
exports.SourceMapConsumer = require('./source-map/source-map-consumer').SourceMapConsumer;
|
||||
exports.SourceNode = require('./source-map/source-node').SourceNode;
|
107
node_modules/doiuse/node_modules/source-map/lib/source-map/array-set.js
generated
vendored
Normal file
107
node_modules/doiuse/node_modules/source-map/lib/source-map/array-set.js
generated
vendored
Normal file
@@ -0,0 +1,107 @@
|
||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
||||
/*
|
||||
* Copyright 2011 Mozilla Foundation and contributors
|
||||
* Licensed under the New BSD license. See LICENSE or:
|
||||
* http://opensource.org/licenses/BSD-3-Clause
|
||||
*/
|
||||
if (typeof define !== 'function') {
|
||||
var define = require('amdefine')(module, require);
|
||||
}
|
||||
define(function (require, exports, module) {
|
||||
|
||||
var util = require('./util');
|
||||
|
||||
/**
|
||||
* A data structure which is a combination of an array and a set. Adding a new
|
||||
* member is O(1), testing for membership is O(1), and finding the index of an
|
||||
* element is O(1). Removing elements from the set is not supported. Only
|
||||
* strings are supported for membership.
|
||||
*/
|
||||
function ArraySet() {
|
||||
this._array = [];
|
||||
this._set = {};
|
||||
}
|
||||
|
||||
/**
|
||||
* Static method for creating ArraySet instances from an existing array.
|
||||
*/
|
||||
ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
|
||||
var set = new ArraySet();
|
||||
for (var i = 0, len = aArray.length; i < len; i++) {
|
||||
set.add(aArray[i], aAllowDuplicates);
|
||||
}
|
||||
return set;
|
||||
};
|
||||
|
||||
/**
|
||||
* Return how many unique items are in this ArraySet. If duplicates have been
|
||||
* added, than those do not count towards the size.
|
||||
*
|
||||
* @returns Number
|
||||
*/
|
||||
ArraySet.prototype.size = function ArraySet_size() {
|
||||
return Object.getOwnPropertyNames(this._set).length;
|
||||
};
|
||||
|
||||
/**
|
||||
* Add the given string to this set.
|
||||
*
|
||||
* @param String aStr
|
||||
*/
|
||||
ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
|
||||
var isDuplicate = this.has(aStr);
|
||||
var idx = this._array.length;
|
||||
if (!isDuplicate || aAllowDuplicates) {
|
||||
this._array.push(aStr);
|
||||
}
|
||||
if (!isDuplicate) {
|
||||
this._set[util.toSetString(aStr)] = idx;
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Is the given string a member of this set?
|
||||
*
|
||||
* @param String aStr
|
||||
*/
|
||||
ArraySet.prototype.has = function ArraySet_has(aStr) {
|
||||
return Object.prototype.hasOwnProperty.call(this._set,
|
||||
util.toSetString(aStr));
|
||||
};
|
||||
|
||||
/**
|
||||
* What is the index of the given string in the array?
|
||||
*
|
||||
* @param String aStr
|
||||
*/
|
||||
ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
|
||||
if (this.has(aStr)) {
|
||||
return this._set[util.toSetString(aStr)];
|
||||
}
|
||||
throw new Error('"' + aStr + '" is not in the set.');
|
||||
};
|
||||
|
||||
/**
|
||||
* What is the element at the given index?
|
||||
*
|
||||
* @param Number aIdx
|
||||
*/
|
||||
ArraySet.prototype.at = function ArraySet_at(aIdx) {
|
||||
if (aIdx >= 0 && aIdx < this._array.length) {
|
||||
return this._array[aIdx];
|
||||
}
|
||||
throw new Error('No element indexed by ' + aIdx);
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the array representation of this set (which has the proper indices
|
||||
* indicated by indexOf). Note that this is a copy of the internal array used
|
||||
* for storing the members so that no one can mess with internal state.
|
||||
*/
|
||||
ArraySet.prototype.toArray = function ArraySet_toArray() {
|
||||
return this._array.slice();
|
||||
};
|
||||
|
||||
exports.ArraySet = ArraySet;
|
||||
|
||||
});
|
146
node_modules/doiuse/node_modules/source-map/lib/source-map/base64-vlq.js
generated
vendored
Normal file
146
node_modules/doiuse/node_modules/source-map/lib/source-map/base64-vlq.js
generated
vendored
Normal file
@@ -0,0 +1,146 @@
|
||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
||||
/*
|
||||
* Copyright 2011 Mozilla Foundation and contributors
|
||||
* Licensed under the New BSD license. See LICENSE or:
|
||||
* http://opensource.org/licenses/BSD-3-Clause
|
||||
*
|
||||
* Based on the Base 64 VLQ implementation in Closure Compiler:
|
||||
* https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
|
||||
*
|
||||
* Copyright 2011 The Closure Compiler Authors. All rights reserved.
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* * Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* * Redistributions in binary form must reproduce the above
|
||||
* copyright notice, this list of conditions and the following
|
||||
* disclaimer in the documentation and/or other materials provided
|
||||
* with the distribution.
|
||||
* * Neither the name of Google Inc. nor the names of its
|
||||
* contributors may be used to endorse or promote products derived
|
||||
* from this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
if (typeof define !== 'function') {
|
||||
var define = require('amdefine')(module, require);
|
||||
}
|
||||
define(function (require, exports, module) {
|
||||
|
||||
var base64 = require('./base64');
|
||||
|
||||
// A single base 64 digit can contain 6 bits of data. For the base 64 variable
|
||||
// length quantities we use in the source map spec, the first bit is the sign,
|
||||
// the next four bits are the actual value, and the 6th bit is the
|
||||
// continuation bit. The continuation bit tells us whether there are more
|
||||
// digits in this value following this digit.
|
||||
//
|
||||
// Continuation
|
||||
// | Sign
|
||||
// | |
|
||||
// V V
|
||||
// 101011
|
||||
|
||||
var VLQ_BASE_SHIFT = 5;
|
||||
|
||||
// binary: 100000
|
||||
var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
|
||||
|
||||
// binary: 011111
|
||||
var VLQ_BASE_MASK = VLQ_BASE - 1;
|
||||
|
||||
// binary: 100000
|
||||
var VLQ_CONTINUATION_BIT = VLQ_BASE;
|
||||
|
||||
/**
|
||||
* Converts from a two-complement value to a value where the sign bit is
|
||||
* placed in the least significant bit. For example, as decimals:
|
||||
* 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
|
||||
* 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
|
||||
*/
|
||||
function toVLQSigned(aValue) {
|
||||
return aValue < 0
|
||||
? ((-aValue) << 1) + 1
|
||||
: (aValue << 1) + 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts to a two-complement value from a value where the sign bit is
|
||||
* placed in the least significant bit. For example, as decimals:
|
||||
* 2 (10 binary) becomes 1, 3 (11 binary) becomes -1
|
||||
* 4 (100 binary) becomes 2, 5 (101 binary) becomes -2
|
||||
*/
|
||||
function fromVLQSigned(aValue) {
|
||||
var isNegative = (aValue & 1) === 1;
|
||||
var shifted = aValue >> 1;
|
||||
return isNegative
|
||||
? -shifted
|
||||
: shifted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the base 64 VLQ encoded value.
|
||||
*/
|
||||
exports.encode = function base64VLQ_encode(aValue) {
|
||||
var encoded = "";
|
||||
var digit;
|
||||
|
||||
var vlq = toVLQSigned(aValue);
|
||||
|
||||
do {
|
||||
digit = vlq & VLQ_BASE_MASK;
|
||||
vlq >>>= VLQ_BASE_SHIFT;
|
||||
if (vlq > 0) {
|
||||
// There are still more digits in this value, so we must make sure the
|
||||
// continuation bit is marked.
|
||||
digit |= VLQ_CONTINUATION_BIT;
|
||||
}
|
||||
encoded += base64.encode(digit);
|
||||
} while (vlq > 0);
|
||||
|
||||
return encoded;
|
||||
};
|
||||
|
||||
/**
|
||||
* Decodes the next base 64 VLQ value from the given string and returns the
|
||||
* value and the rest of the string via the out parameter.
|
||||
*/
|
||||
exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
|
||||
var strLen = aStr.length;
|
||||
var result = 0;
|
||||
var shift = 0;
|
||||
var continuation, digit;
|
||||
|
||||
do {
|
||||
if (aIndex >= strLen) {
|
||||
throw new Error("Expected more digits in base 64 VLQ value.");
|
||||
}
|
||||
|
||||
digit = base64.decode(aStr.charCodeAt(aIndex++));
|
||||
if (digit === -1) {
|
||||
throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
|
||||
}
|
||||
|
||||
continuation = !!(digit & VLQ_CONTINUATION_BIT);
|
||||
digit &= VLQ_BASE_MASK;
|
||||
result = result + (digit << shift);
|
||||
shift += VLQ_BASE_SHIFT;
|
||||
} while (continuation);
|
||||
|
||||
aOutParam.value = fromVLQSigned(result);
|
||||
aOutParam.rest = aIndex;
|
||||
};
|
||||
|
||||
});
|
73
node_modules/doiuse/node_modules/source-map/lib/source-map/base64.js
generated
vendored
Normal file
73
node_modules/doiuse/node_modules/source-map/lib/source-map/base64.js
generated
vendored
Normal file
@@ -0,0 +1,73 @@
|
||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
||||
/*
|
||||
* Copyright 2011 Mozilla Foundation and contributors
|
||||
* Licensed under the New BSD license. See LICENSE or:
|
||||
* http://opensource.org/licenses/BSD-3-Clause
|
||||
*/
|
||||
if (typeof define !== 'function') {
|
||||
var define = require('amdefine')(module, require);
|
||||
}
|
||||
define(function (require, exports, module) {
|
||||
|
||||
var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
|
||||
|
||||
/**
|
||||
* Encode an integer in the range of 0 to 63 to a single base 64 digit.
|
||||
*/
|
||||
exports.encode = function (number) {
|
||||
if (0 <= number && number < intToCharMap.length) {
|
||||
return intToCharMap[number];
|
||||
}
|
||||
throw new TypeError("Must be between 0 and 63: " + aNumber);
|
||||
};
|
||||
|
||||
/**
|
||||
* Decode a single base 64 character code digit to an integer. Returns -1 on
|
||||
* failure.
|
||||
*/
|
||||
exports.decode = function (charCode) {
|
||||
var bigA = 65; // 'A'
|
||||
var bigZ = 90; // 'Z'
|
||||
|
||||
var littleA = 97; // 'a'
|
||||
var littleZ = 122; // 'z'
|
||||
|
||||
var zero = 48; // '0'
|
||||
var nine = 57; // '9'
|
||||
|
||||
var plus = 43; // '+'
|
||||
var slash = 47; // '/'
|
||||
|
||||
var littleOffset = 26;
|
||||
var numberOffset = 52;
|
||||
|
||||
// 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
||||
if (bigA <= charCode && charCode <= bigZ) {
|
||||
return (charCode - bigA);
|
||||
}
|
||||
|
||||
// 26 - 51: abcdefghijklmnopqrstuvwxyz
|
||||
if (littleA <= charCode && charCode <= littleZ) {
|
||||
return (charCode - littleA + littleOffset);
|
||||
}
|
||||
|
||||
// 52 - 61: 0123456789
|
||||
if (zero <= charCode && charCode <= nine) {
|
||||
return (charCode - zero + numberOffset);
|
||||
}
|
||||
|
||||
// 62: +
|
||||
if (charCode == plus) {
|
||||
return 62;
|
||||
}
|
||||
|
||||
// 63: /
|
||||
if (charCode == slash) {
|
||||
return 63;
|
||||
}
|
||||
|
||||
// Invalid base64 digit.
|
||||
return -1;
|
||||
};
|
||||
|
||||
});
|
117
node_modules/doiuse/node_modules/source-map/lib/source-map/binary-search.js
generated
vendored
Normal file
117
node_modules/doiuse/node_modules/source-map/lib/source-map/binary-search.js
generated
vendored
Normal file
@@ -0,0 +1,117 @@
|
||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
||||
/*
|
||||
* Copyright 2011 Mozilla Foundation and contributors
|
||||
* Licensed under the New BSD license. See LICENSE or:
|
||||
* http://opensource.org/licenses/BSD-3-Clause
|
||||
*/
|
||||
if (typeof define !== 'function') {
|
||||
var define = require('amdefine')(module, require);
|
||||
}
|
||||
define(function (require, exports, module) {
|
||||
|
||||
exports.GREATEST_LOWER_BOUND = 1;
|
||||
exports.LEAST_UPPER_BOUND = 2;
|
||||
|
||||
/**
|
||||
* Recursive implementation of binary search.
|
||||
*
|
||||
* @param aLow Indices here and lower do not contain the needle.
|
||||
* @param aHigh Indices here and higher do not contain the needle.
|
||||
* @param aNeedle The element being searched for.
|
||||
* @param aHaystack The non-empty array being searched.
|
||||
* @param aCompare Function which takes two elements and returns -1, 0, or 1.
|
||||
* @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
|
||||
* 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
|
||||
* closest element that is smaller than or greater than the one we are
|
||||
* searching for, respectively, if the exact element cannot be found.
|
||||
*/
|
||||
function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
|
||||
// This function terminates when one of the following is true:
|
||||
//
|
||||
// 1. We find the exact element we are looking for.
|
||||
//
|
||||
// 2. We did not find the exact element, but we can return the index of
|
||||
// the next-closest element.
|
||||
//
|
||||
// 3. We did not find the exact element, and there is no next-closest
|
||||
// element than the one we are searching for, so we return -1.
|
||||
var mid = Math.floor((aHigh - aLow) / 2) + aLow;
|
||||
var cmp = aCompare(aNeedle, aHaystack[mid], true);
|
||||
if (cmp === 0) {
|
||||
// Found the element we are looking for.
|
||||
return mid;
|
||||
}
|
||||
else if (cmp > 0) {
|
||||
// Our needle is greater than aHaystack[mid].
|
||||
if (aHigh - mid > 1) {
|
||||
// The element is in the upper half.
|
||||
return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
|
||||
}
|
||||
|
||||
// The exact needle element was not found in this haystack. Determine if
|
||||
// we are in termination case (3) or (2) and return the appropriate thing.
|
||||
if (aBias == exports.LEAST_UPPER_BOUND) {
|
||||
return aHigh < aHaystack.length ? aHigh : -1;
|
||||
} else {
|
||||
return mid;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Our needle is less than aHaystack[mid].
|
||||
if (mid - aLow > 1) {
|
||||
// The element is in the lower half.
|
||||
return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
|
||||
}
|
||||
|
||||
// we are in termination case (3) or (2) and return the appropriate thing.
|
||||
if (aBias == exports.LEAST_UPPER_BOUND) {
|
||||
return mid;
|
||||
} else {
|
||||
return aLow < 0 ? -1 : aLow;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This is an implementation of binary search which will always try and return
|
||||
* the index of the closest element if there is no exact hit. This is because
|
||||
* mappings between original and generated line/col pairs are single points,
|
||||
* and there is an implicit region between each of them, so a miss just means
|
||||
* that you aren't on the very start of a region.
|
||||
*
|
||||
* @param aNeedle The element you are looking for.
|
||||
* @param aHaystack The array that is being searched.
|
||||
* @param aCompare A function which takes the needle and an element in the
|
||||
* array and returns -1, 0, or 1 depending on whether the needle is less
|
||||
* than, equal to, or greater than the element, respectively.
|
||||
* @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
|
||||
* 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
|
||||
* closest element that is smaller than or greater than the one we are
|
||||
* searching for, respectively, if the exact element cannot be found.
|
||||
* Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
|
||||
*/
|
||||
exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
|
||||
if (aHaystack.length === 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
|
||||
aCompare, aBias || exports.GREATEST_LOWER_BOUND);
|
||||
if (index < 0) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
// We have found either the exact element, or the next-closest element than
|
||||
// the one we are searching for. However, there may be more than one such
|
||||
// element. Make sure we always return the smallest of these.
|
||||
while (index - 1 >= 0) {
|
||||
if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
|
||||
break;
|
||||
}
|
||||
--index;
|
||||
}
|
||||
|
||||
return index;
|
||||
};
|
||||
|
||||
});
|
86
node_modules/doiuse/node_modules/source-map/lib/source-map/mapping-list.js
generated
vendored
Normal file
86
node_modules/doiuse/node_modules/source-map/lib/source-map/mapping-list.js
generated
vendored
Normal file
@@ -0,0 +1,86 @@
|
||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
||||
/*
|
||||
* Copyright 2014 Mozilla Foundation and contributors
|
||||
* Licensed under the New BSD license. See LICENSE or:
|
||||
* http://opensource.org/licenses/BSD-3-Clause
|
||||
*/
|
||||
if (typeof define !== 'function') {
|
||||
var define = require('amdefine')(module, require);
|
||||
}
|
||||
define(function (require, exports, module) {
|
||||
|
||||
var util = require('./util');
|
||||
|
||||
/**
|
||||
* Determine whether mappingB is after mappingA with respect to generated
|
||||
* position.
|
||||
*/
|
||||
function generatedPositionAfter(mappingA, mappingB) {
|
||||
// Optimized for most common case
|
||||
var lineA = mappingA.generatedLine;
|
||||
var lineB = mappingB.generatedLine;
|
||||
var columnA = mappingA.generatedColumn;
|
||||
var columnB = mappingB.generatedColumn;
|
||||
return lineB > lineA || lineB == lineA && columnB >= columnA ||
|
||||
util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* A data structure to provide a sorted view of accumulated mappings in a
|
||||
* performance conscious manner. It trades a neglibable overhead in general
|
||||
* case for a large speedup in case of mappings being added in order.
|
||||
*/
|
||||
function MappingList() {
|
||||
this._array = [];
|
||||
this._sorted = true;
|
||||
// Serves as infimum
|
||||
this._last = {generatedLine: -1, generatedColumn: 0};
|
||||
}
|
||||
|
||||
/**
|
||||
* Iterate through internal items. This method takes the same arguments that
|
||||
* `Array.prototype.forEach` takes.
|
||||
*
|
||||
* NOTE: The order of the mappings is NOT guaranteed.
|
||||
*/
|
||||
MappingList.prototype.unsortedForEach =
|
||||
function MappingList_forEach(aCallback, aThisArg) {
|
||||
this._array.forEach(aCallback, aThisArg);
|
||||
};
|
||||
|
||||
/**
|
||||
* Add the given source mapping.
|
||||
*
|
||||
* @param Object aMapping
|
||||
*/
|
||||
MappingList.prototype.add = function MappingList_add(aMapping) {
|
||||
var mapping;
|
||||
if (generatedPositionAfter(this._last, aMapping)) {
|
||||
this._last = aMapping;
|
||||
this._array.push(aMapping);
|
||||
} else {
|
||||
this._sorted = false;
|
||||
this._array.push(aMapping);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the flat, sorted array of mappings. The mappings are sorted by
|
||||
* generated position.
|
||||
*
|
||||
* WARNING: This method returns internal data without copying, for
|
||||
* performance. The return value must NOT be mutated, and should be treated as
|
||||
* an immutable borrow. If you want to take ownership, you must make your own
|
||||
* copy.
|
||||
*/
|
||||
MappingList.prototype.toArray = function MappingList_toArray() {
|
||||
if (!this._sorted) {
|
||||
this._array.sort(util.compareByGeneratedPositionsInflated);
|
||||
this._sorted = true;
|
||||
}
|
||||
return this._array;
|
||||
};
|
||||
|
||||
exports.MappingList = MappingList;
|
||||
|
||||
});
|
120
node_modules/doiuse/node_modules/source-map/lib/source-map/quick-sort.js
generated
vendored
Normal file
120
node_modules/doiuse/node_modules/source-map/lib/source-map/quick-sort.js
generated
vendored
Normal file
@@ -0,0 +1,120 @@
|
||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
||||
/*
|
||||
* Copyright 2011 Mozilla Foundation and contributors
|
||||
* Licensed under the New BSD license. See LICENSE or:
|
||||
* http://opensource.org/licenses/BSD-3-Clause
|
||||
*/
|
||||
if (typeof define !== 'function') {
|
||||
var define = require('amdefine')(module, require);
|
||||
}
|
||||
define(function (require, exports, module) {
|
||||
|
||||
// It turns out that some (most?) JavaScript engines don't self-host
|
||||
// `Array.prototype.sort`. This makes sense because C++ will likely remain
|
||||
// faster than JS when doing raw CPU-intensive sorting. However, when using a
|
||||
// custom comparator function, calling back and forth between the VM's C++ and
|
||||
// JIT'd JS is rather slow *and* loses JIT type information, resulting in
|
||||
// worse generated code for the comparator function than would be optimal. In
|
||||
// fact, when sorting with a comparator, these costs outweigh the benefits of
|
||||
// sorting in C++. By using our own JS-implemented Quick Sort (below), we get
|
||||
// a ~3500ms mean speed-up in `bench/bench.html`.
|
||||
|
||||
/**
|
||||
* Swap the elements indexed by `x` and `y` in the array `ary`.
|
||||
*
|
||||
* @param {Array} ary
|
||||
* The array.
|
||||
* @param {Number} x
|
||||
* The index of the first item.
|
||||
* @param {Number} y
|
||||
* The index of the second item.
|
||||
*/
|
||||
function swap(ary, x, y) {
|
||||
var temp = ary[x];
|
||||
ary[x] = ary[y];
|
||||
ary[y] = temp;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a random integer within the range `low .. high` inclusive.
|
||||
*
|
||||
* @param {Number} low
|
||||
* The lower bound on the range.
|
||||
* @param {Number} high
|
||||
* The upper bound on the range.
|
||||
*/
|
||||
function randomIntInRange(low, high) {
|
||||
return Math.round(low + (Math.random() * (high - low)));
|
||||
}
|
||||
|
||||
/**
|
||||
* The Quick Sort algorithm.
|
||||
*
|
||||
* @param {Array} ary
|
||||
* An array to sort.
|
||||
* @param {function} comparator
|
||||
* Function to use to compare two items.
|
||||
* @param {Number} p
|
||||
* Start index of the array
|
||||
* @param {Number} r
|
||||
* End index of the array
|
||||
*/
|
||||
function doQuickSort(ary, comparator, p, r) {
|
||||
// If our lower bound is less than our upper bound, we (1) partition the
|
||||
// array into two pieces and (2) recurse on each half. If it is not, this is
|
||||
// the empty array and our base case.
|
||||
|
||||
if (p < r) {
|
||||
// (1) Partitioning.
|
||||
//
|
||||
// The partitioning chooses a pivot between `p` and `r` and moves all
|
||||
// elements that are less than or equal to the pivot to the before it, and
|
||||
// all the elements that are greater than it after it. The effect is that
|
||||
// once partition is done, the pivot is in the exact place it will be when
|
||||
// the array is put in sorted order, and it will not need to be moved
|
||||
// again. This runs in O(n) time.
|
||||
|
||||
// Always choose a random pivot so that an input array which is reverse
|
||||
// sorted does not cause O(n^2) running time.
|
||||
var pivotIndex = randomIntInRange(p, r);
|
||||
var i = p - 1;
|
||||
|
||||
swap(ary, pivotIndex, r);
|
||||
var pivot = ary[r];
|
||||
|
||||
// Immediately after `j` is incremented in this loop, the following hold
|
||||
// true:
|
||||
//
|
||||
// * Every element in `ary[p .. i]` is less than or equal to the pivot.
|
||||
//
|
||||
// * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
|
||||
for (var j = p; j < r; j++) {
|
||||
if (comparator(ary[j], pivot) <= 0) {
|
||||
i += 1;
|
||||
swap(ary, i, j);
|
||||
}
|
||||
}
|
||||
|
||||
swap(ary, i + 1, j);
|
||||
var q = i + 1;
|
||||
|
||||
// (2) Recurse on each half.
|
||||
|
||||
doQuickSort(ary, comparator, p, q - 1);
|
||||
doQuickSort(ary, comparator, q + 1, r);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sort the given array in-place with the given comparator function.
|
||||
*
|
||||
* @param {Array} ary
|
||||
* An array to sort.
|
||||
* @param {function} comparator
|
||||
* Function to use to compare two items.
|
||||
*/
|
||||
exports.quickSort = function (ary, comparator) {
|
||||
doQuickSort(ary, comparator, 0, ary.length - 1);
|
||||
};
|
||||
|
||||
});
|
1077
node_modules/doiuse/node_modules/source-map/lib/source-map/source-map-consumer.js
generated
vendored
Normal file
1077
node_modules/doiuse/node_modules/source-map/lib/source-map/source-map-consumer.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
399
node_modules/doiuse/node_modules/source-map/lib/source-map/source-map-generator.js
generated
vendored
Normal file
399
node_modules/doiuse/node_modules/source-map/lib/source-map/source-map-generator.js
generated
vendored
Normal file
@@ -0,0 +1,399 @@
|
||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
||||
/*
|
||||
* Copyright 2011 Mozilla Foundation and contributors
|
||||
* Licensed under the New BSD license. See LICENSE or:
|
||||
* http://opensource.org/licenses/BSD-3-Clause
|
||||
*/
|
||||
if (typeof define !== 'function') {
|
||||
var define = require('amdefine')(module, require);
|
||||
}
|
||||
define(function (require, exports, module) {
|
||||
|
||||
var base64VLQ = require('./base64-vlq');
|
||||
var util = require('./util');
|
||||
var ArraySet = require('./array-set').ArraySet;
|
||||
var MappingList = require('./mapping-list').MappingList;
|
||||
|
||||
/**
|
||||
* An instance of the SourceMapGenerator represents a source map which is
|
||||
* being built incrementally. You may pass an object with the following
|
||||
* properties:
|
||||
*
|
||||
* - file: The filename of the generated source.
|
||||
* - sourceRoot: A root for all relative URLs in this source map.
|
||||
*/
|
||||
function SourceMapGenerator(aArgs) {
|
||||
if (!aArgs) {
|
||||
aArgs = {};
|
||||
}
|
||||
this._file = util.getArg(aArgs, 'file', null);
|
||||
this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
|
||||
this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
|
||||
this._sources = new ArraySet();
|
||||
this._names = new ArraySet();
|
||||
this._mappings = new MappingList();
|
||||
this._sourcesContents = null;
|
||||
}
|
||||
|
||||
SourceMapGenerator.prototype._version = 3;
|
||||
|
||||
/**
|
||||
* Creates a new SourceMapGenerator based on a SourceMapConsumer
|
||||
*
|
||||
* @param aSourceMapConsumer The SourceMap.
|
||||
*/
|
||||
SourceMapGenerator.fromSourceMap =
|
||||
function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
|
||||
var sourceRoot = aSourceMapConsumer.sourceRoot;
|
||||
var generator = new SourceMapGenerator({
|
||||
file: aSourceMapConsumer.file,
|
||||
sourceRoot: sourceRoot
|
||||
});
|
||||
aSourceMapConsumer.eachMapping(function (mapping) {
|
||||
var newMapping = {
|
||||
generated: {
|
||||
line: mapping.generatedLine,
|
||||
column: mapping.generatedColumn
|
||||
}
|
||||
};
|
||||
|
||||
if (mapping.source != null) {
|
||||
newMapping.source = mapping.source;
|
||||
if (sourceRoot != null) {
|
||||
newMapping.source = util.relative(sourceRoot, newMapping.source);
|
||||
}
|
||||
|
||||
newMapping.original = {
|
||||
line: mapping.originalLine,
|
||||
column: mapping.originalColumn
|
||||
};
|
||||
|
||||
if (mapping.name != null) {
|
||||
newMapping.name = mapping.name;
|
||||
}
|
||||
}
|
||||
|
||||
generator.addMapping(newMapping);
|
||||
});
|
||||
aSourceMapConsumer.sources.forEach(function (sourceFile) {
|
||||
var content = aSourceMapConsumer.sourceContentFor(sourceFile);
|
||||
if (content != null) {
|
||||
generator.setSourceContent(sourceFile, content);
|
||||
}
|
||||
});
|
||||
return generator;
|
||||
};
|
||||
|
||||
/**
|
||||
* Add a single mapping from original source line and column to the generated
|
||||
* source's line and column for this source map being created. The mapping
|
||||
* object should have the following properties:
|
||||
*
|
||||
* - generated: An object with the generated line and column positions.
|
||||
* - original: An object with the original line and column positions.
|
||||
* - source: The original source file (relative to the sourceRoot).
|
||||
* - name: An optional original token name for this mapping.
|
||||
*/
|
||||
SourceMapGenerator.prototype.addMapping =
|
||||
function SourceMapGenerator_addMapping(aArgs) {
|
||||
var generated = util.getArg(aArgs, 'generated');
|
||||
var original = util.getArg(aArgs, 'original', null);
|
||||
var source = util.getArg(aArgs, 'source', null);
|
||||
var name = util.getArg(aArgs, 'name', null);
|
||||
|
||||
if (!this._skipValidation) {
|
||||
this._validateMapping(generated, original, source, name);
|
||||
}
|
||||
|
||||
if (source != null && !this._sources.has(source)) {
|
||||
this._sources.add(source);
|
||||
}
|
||||
|
||||
if (name != null && !this._names.has(name)) {
|
||||
this._names.add(name);
|
||||
}
|
||||
|
||||
this._mappings.add({
|
||||
generatedLine: generated.line,
|
||||
generatedColumn: generated.column,
|
||||
originalLine: original != null && original.line,
|
||||
originalColumn: original != null && original.column,
|
||||
source: source,
|
||||
name: name
|
||||
});
|
||||
};
|
||||
|
||||
/**
|
||||
* Set the source content for a source file.
|
||||
*/
|
||||
SourceMapGenerator.prototype.setSourceContent =
|
||||
function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
|
||||
var source = aSourceFile;
|
||||
if (this._sourceRoot != null) {
|
||||
source = util.relative(this._sourceRoot, source);
|
||||
}
|
||||
|
||||
if (aSourceContent != null) {
|
||||
// Add the source content to the _sourcesContents map.
|
||||
// Create a new _sourcesContents map if the property is null.
|
||||
if (!this._sourcesContents) {
|
||||
this._sourcesContents = {};
|
||||
}
|
||||
this._sourcesContents[util.toSetString(source)] = aSourceContent;
|
||||
} else if (this._sourcesContents) {
|
||||
// Remove the source file from the _sourcesContents map.
|
||||
// If the _sourcesContents map is empty, set the property to null.
|
||||
delete this._sourcesContents[util.toSetString(source)];
|
||||
if (Object.keys(this._sourcesContents).length === 0) {
|
||||
this._sourcesContents = null;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Applies the mappings of a sub-source-map for a specific source file to the
|
||||
* source map being generated. Each mapping to the supplied source file is
|
||||
* rewritten using the supplied source map. Note: The resolution for the
|
||||
* resulting mappings is the minimium of this map and the supplied map.
|
||||
*
|
||||
* @param aSourceMapConsumer The source map to be applied.
|
||||
* @param aSourceFile Optional. The filename of the source file.
|
||||
* If omitted, SourceMapConsumer's file property will be used.
|
||||
* @param aSourceMapPath Optional. The dirname of the path to the source map
|
||||
* to be applied. If relative, it is relative to the SourceMapConsumer.
|
||||
* This parameter is needed when the two source maps aren't in the same
|
||||
* directory, and the source map to be applied contains relative source
|
||||
* paths. If so, those relative source paths need to be rewritten
|
||||
* relative to the SourceMapGenerator.
|
||||
*/
|
||||
SourceMapGenerator.prototype.applySourceMap =
|
||||
function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
|
||||
var sourceFile = aSourceFile;
|
||||
// If aSourceFile is omitted, we will use the file property of the SourceMap
|
||||
if (aSourceFile == null) {
|
||||
if (aSourceMapConsumer.file == null) {
|
||||
throw new Error(
|
||||
'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
|
||||
'or the source map\'s "file" property. Both were omitted.'
|
||||
);
|
||||
}
|
||||
sourceFile = aSourceMapConsumer.file;
|
||||
}
|
||||
var sourceRoot = this._sourceRoot;
|
||||
// Make "sourceFile" relative if an absolute Url is passed.
|
||||
if (sourceRoot != null) {
|
||||
sourceFile = util.relative(sourceRoot, sourceFile);
|
||||
}
|
||||
// Applying the SourceMap can add and remove items from the sources and
|
||||
// the names array.
|
||||
var newSources = new ArraySet();
|
||||
var newNames = new ArraySet();
|
||||
|
||||
// Find mappings for the "sourceFile"
|
||||
this._mappings.unsortedForEach(function (mapping) {
|
||||
if (mapping.source === sourceFile && mapping.originalLine != null) {
|
||||
// Check if it can be mapped by the source map, then update the mapping.
|
||||
var original = aSourceMapConsumer.originalPositionFor({
|
||||
line: mapping.originalLine,
|
||||
column: mapping.originalColumn
|
||||
});
|
||||
if (original.source != null) {
|
||||
// Copy mapping
|
||||
mapping.source = original.source;
|
||||
if (aSourceMapPath != null) {
|
||||
mapping.source = util.join(aSourceMapPath, mapping.source)
|
||||
}
|
||||
if (sourceRoot != null) {
|
||||
mapping.source = util.relative(sourceRoot, mapping.source);
|
||||
}
|
||||
mapping.originalLine = original.line;
|
||||
mapping.originalColumn = original.column;
|
||||
if (original.name != null) {
|
||||
mapping.name = original.name;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var source = mapping.source;
|
||||
if (source != null && !newSources.has(source)) {
|
||||
newSources.add(source);
|
||||
}
|
||||
|
||||
var name = mapping.name;
|
||||
if (name != null && !newNames.has(name)) {
|
||||
newNames.add(name);
|
||||
}
|
||||
|
||||
}, this);
|
||||
this._sources = newSources;
|
||||
this._names = newNames;
|
||||
|
||||
// Copy sourcesContents of applied map.
|
||||
aSourceMapConsumer.sources.forEach(function (sourceFile) {
|
||||
var content = aSourceMapConsumer.sourceContentFor(sourceFile);
|
||||
if (content != null) {
|
||||
if (aSourceMapPath != null) {
|
||||
sourceFile = util.join(aSourceMapPath, sourceFile);
|
||||
}
|
||||
if (sourceRoot != null) {
|
||||
sourceFile = util.relative(sourceRoot, sourceFile);
|
||||
}
|
||||
this.setSourceContent(sourceFile, content);
|
||||
}
|
||||
}, this);
|
||||
};
|
||||
|
||||
/**
|
||||
* A mapping can have one of the three levels of data:
|
||||
*
|
||||
* 1. Just the generated position.
|
||||
* 2. The Generated position, original position, and original source.
|
||||
* 3. Generated and original position, original source, as well as a name
|
||||
* token.
|
||||
*
|
||||
* To maintain consistency, we validate that any new mapping being added falls
|
||||
* in to one of these categories.
|
||||
*/
|
||||
SourceMapGenerator.prototype._validateMapping =
|
||||
function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
|
||||
aName) {
|
||||
if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
|
||||
&& aGenerated.line > 0 && aGenerated.column >= 0
|
||||
&& !aOriginal && !aSource && !aName) {
|
||||
// Case 1.
|
||||
return;
|
||||
}
|
||||
else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
|
||||
&& aOriginal && 'line' in aOriginal && 'column' in aOriginal
|
||||
&& aGenerated.line > 0 && aGenerated.column >= 0
|
||||
&& aOriginal.line > 0 && aOriginal.column >= 0
|
||||
&& aSource) {
|
||||
// Cases 2 and 3.
|
||||
return;
|
||||
}
|
||||
else {
|
||||
throw new Error('Invalid mapping: ' + JSON.stringify({
|
||||
generated: aGenerated,
|
||||
source: aSource,
|
||||
original: aOriginal,
|
||||
name: aName
|
||||
}));
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Serialize the accumulated mappings in to the stream of base 64 VLQs
|
||||
* specified by the source map format.
|
||||
*/
|
||||
SourceMapGenerator.prototype._serializeMappings =
|
||||
function SourceMapGenerator_serializeMappings() {
|
||||
var previousGeneratedColumn = 0;
|
||||
var previousGeneratedLine = 1;
|
||||
var previousOriginalColumn = 0;
|
||||
var previousOriginalLine = 0;
|
||||
var previousName = 0;
|
||||
var previousSource = 0;
|
||||
var result = '';
|
||||
var mapping;
|
||||
|
||||
var mappings = this._mappings.toArray();
|
||||
for (var i = 0, len = mappings.length; i < len; i++) {
|
||||
mapping = mappings[i];
|
||||
|
||||
if (mapping.generatedLine !== previousGeneratedLine) {
|
||||
previousGeneratedColumn = 0;
|
||||
while (mapping.generatedLine !== previousGeneratedLine) {
|
||||
result += ';';
|
||||
previousGeneratedLine++;
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (i > 0) {
|
||||
if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
|
||||
continue;
|
||||
}
|
||||
result += ',';
|
||||
}
|
||||
}
|
||||
|
||||
result += base64VLQ.encode(mapping.generatedColumn
|
||||
- previousGeneratedColumn);
|
||||
previousGeneratedColumn = mapping.generatedColumn;
|
||||
|
||||
if (mapping.source != null) {
|
||||
result += base64VLQ.encode(this._sources.indexOf(mapping.source)
|
||||
- previousSource);
|
||||
previousSource = this._sources.indexOf(mapping.source);
|
||||
|
||||
// lines are stored 0-based in SourceMap spec version 3
|
||||
result += base64VLQ.encode(mapping.originalLine - 1
|
||||
- previousOriginalLine);
|
||||
previousOriginalLine = mapping.originalLine - 1;
|
||||
|
||||
result += base64VLQ.encode(mapping.originalColumn
|
||||
- previousOriginalColumn);
|
||||
previousOriginalColumn = mapping.originalColumn;
|
||||
|
||||
if (mapping.name != null) {
|
||||
result += base64VLQ.encode(this._names.indexOf(mapping.name)
|
||||
- previousName);
|
||||
previousName = this._names.indexOf(mapping.name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
};
|
||||
|
||||
SourceMapGenerator.prototype._generateSourcesContent =
|
||||
function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
|
||||
return aSources.map(function (source) {
|
||||
if (!this._sourcesContents) {
|
||||
return null;
|
||||
}
|
||||
if (aSourceRoot != null) {
|
||||
source = util.relative(aSourceRoot, source);
|
||||
}
|
||||
var key = util.toSetString(source);
|
||||
return Object.prototype.hasOwnProperty.call(this._sourcesContents,
|
||||
key)
|
||||
? this._sourcesContents[key]
|
||||
: null;
|
||||
}, this);
|
||||
};
|
||||
|
||||
/**
|
||||
* Externalize the source map.
|
||||
*/
|
||||
SourceMapGenerator.prototype.toJSON =
|
||||
function SourceMapGenerator_toJSON() {
|
||||
var map = {
|
||||
version: this._version,
|
||||
sources: this._sources.toArray(),
|
||||
names: this._names.toArray(),
|
||||
mappings: this._serializeMappings()
|
||||
};
|
||||
if (this._file != null) {
|
||||
map.file = this._file;
|
||||
}
|
||||
if (this._sourceRoot != null) {
|
||||
map.sourceRoot = this._sourceRoot;
|
||||
}
|
||||
if (this._sourcesContents) {
|
||||
map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
|
||||
}
|
||||
|
||||
return map;
|
||||
};
|
||||
|
||||
/**
|
||||
* Render the source map being generated to a string.
|
||||
*/
|
||||
SourceMapGenerator.prototype.toString =
|
||||
function SourceMapGenerator_toString() {
|
||||
return JSON.stringify(this.toJSON());
|
||||
};
|
||||
|
||||
exports.SourceMapGenerator = SourceMapGenerator;
|
||||
|
||||
});
|
414
node_modules/doiuse/node_modules/source-map/lib/source-map/source-node.js
generated
vendored
Normal file
414
node_modules/doiuse/node_modules/source-map/lib/source-map/source-node.js
generated
vendored
Normal file
@@ -0,0 +1,414 @@
|
||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
||||
/*
|
||||
* Copyright 2011 Mozilla Foundation and contributors
|
||||
* Licensed under the New BSD license. See LICENSE or:
|
||||
* http://opensource.org/licenses/BSD-3-Clause
|
||||
*/
|
||||
if (typeof define !== 'function') {
|
||||
var define = require('amdefine')(module, require);
|
||||
}
|
||||
define(function (require, exports, module) {
|
||||
|
||||
var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;
|
||||
var util = require('./util');
|
||||
|
||||
// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
|
||||
// operating systems these days (capturing the result).
|
||||
var REGEX_NEWLINE = /(\r?\n)/;
|
||||
|
||||
// Newline character code for charCodeAt() comparisons
|
||||
var NEWLINE_CODE = 10;
|
||||
|
||||
// Private symbol for identifying `SourceNode`s when multiple versions of
|
||||
// the source-map library are loaded. This MUST NOT CHANGE across
|
||||
// versions!
|
||||
var isSourceNode = "$$$isSourceNode$$$";
|
||||
|
||||
/**
|
||||
* SourceNodes provide a way to abstract over interpolating/concatenating
|
||||
* snippets of generated JavaScript source code while maintaining the line and
|
||||
* column information associated with the original source code.
|
||||
*
|
||||
* @param aLine The original line number.
|
||||
* @param aColumn The original column number.
|
||||
* @param aSource The original source's filename.
|
||||
* @param aChunks Optional. An array of strings which are snippets of
|
||||
* generated JS, or other SourceNodes.
|
||||
* @param aName The original identifier.
|
||||
*/
|
||||
function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
|
||||
this.children = [];
|
||||
this.sourceContents = {};
|
||||
this.line = aLine == null ? null : aLine;
|
||||
this.column = aColumn == null ? null : aColumn;
|
||||
this.source = aSource == null ? null : aSource;
|
||||
this.name = aName == null ? null : aName;
|
||||
this[isSourceNode] = true;
|
||||
if (aChunks != null) this.add(aChunks);
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a SourceNode from generated code and a SourceMapConsumer.
|
||||
*
|
||||
* @param aGeneratedCode The generated code
|
||||
* @param aSourceMapConsumer The SourceMap for the generated code
|
||||
* @param aRelativePath Optional. The path that relative sources in the
|
||||
* SourceMapConsumer should be relative to.
|
||||
*/
|
||||
SourceNode.fromStringWithSourceMap =
|
||||
function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
|
||||
// The SourceNode we want to fill with the generated code
|
||||
// and the SourceMap
|
||||
var node = new SourceNode();
|
||||
|
||||
// All even indices of this array are one line of the generated code,
|
||||
// while all odd indices are the newlines between two adjacent lines
|
||||
// (since `REGEX_NEWLINE` captures its match).
|
||||
// Processed fragments are removed from this array, by calling `shiftNextLine`.
|
||||
var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
|
||||
var shiftNextLine = function() {
|
||||
var lineContents = remainingLines.shift();
|
||||
// The last line of a file might not have a newline.
|
||||
var newLine = remainingLines.shift() || "";
|
||||
return lineContents + newLine;
|
||||
};
|
||||
|
||||
// We need to remember the position of "remainingLines"
|
||||
var lastGeneratedLine = 1, lastGeneratedColumn = 0;
|
||||
|
||||
// The generate SourceNodes we need a code range.
|
||||
// To extract it current and last mapping is used.
|
||||
// Here we store the last mapping.
|
||||
var lastMapping = null;
|
||||
|
||||
aSourceMapConsumer.eachMapping(function (mapping) {
|
||||
if (lastMapping !== null) {
|
||||
// We add the code from "lastMapping" to "mapping":
|
||||
// First check if there is a new line in between.
|
||||
if (lastGeneratedLine < mapping.generatedLine) {
|
||||
var code = "";
|
||||
// Associate first line with "lastMapping"
|
||||
addMappingWithCode(lastMapping, shiftNextLine());
|
||||
lastGeneratedLine++;
|
||||
lastGeneratedColumn = 0;
|
||||
// The remaining code is added without mapping
|
||||
} else {
|
||||
// There is no new line in between.
|
||||
// Associate the code between "lastGeneratedColumn" and
|
||||
// "mapping.generatedColumn" with "lastMapping"
|
||||
var nextLine = remainingLines[0];
|
||||
var code = nextLine.substr(0, mapping.generatedColumn -
|
||||
lastGeneratedColumn);
|
||||
remainingLines[0] = nextLine.substr(mapping.generatedColumn -
|
||||
lastGeneratedColumn);
|
||||
lastGeneratedColumn = mapping.generatedColumn;
|
||||
addMappingWithCode(lastMapping, code);
|
||||
// No more remaining code, continue
|
||||
lastMapping = mapping;
|
||||
return;
|
||||
}
|
||||
}
|
||||
// We add the generated code until the first mapping
|
||||
// to the SourceNode without any mapping.
|
||||
// Each line is added as separate string.
|
||||
while (lastGeneratedLine < mapping.generatedLine) {
|
||||
node.add(shiftNextLine());
|
||||
lastGeneratedLine++;
|
||||
}
|
||||
if (lastGeneratedColumn < mapping.generatedColumn) {
|
||||
var nextLine = remainingLines[0];
|
||||
node.add(nextLine.substr(0, mapping.generatedColumn));
|
||||
remainingLines[0] = nextLine.substr(mapping.generatedColumn);
|
||||
lastGeneratedColumn = mapping.generatedColumn;
|
||||
}
|
||||
lastMapping = mapping;
|
||||
}, this);
|
||||
// We have processed all mappings.
|
||||
if (remainingLines.length > 0) {
|
||||
if (lastMapping) {
|
||||
// Associate the remaining code in the current line with "lastMapping"
|
||||
addMappingWithCode(lastMapping, shiftNextLine());
|
||||
}
|
||||
// and add the remaining lines without any mapping
|
||||
node.add(remainingLines.join(""));
|
||||
}
|
||||
|
||||
// Copy sourcesContent into SourceNode
|
||||
aSourceMapConsumer.sources.forEach(function (sourceFile) {
|
||||
var content = aSourceMapConsumer.sourceContentFor(sourceFile);
|
||||
if (content != null) {
|
||||
if (aRelativePath != null) {
|
||||
sourceFile = util.join(aRelativePath, sourceFile);
|
||||
}
|
||||
node.setSourceContent(sourceFile, content);
|
||||
}
|
||||
});
|
||||
|
||||
return node;
|
||||
|
||||
function addMappingWithCode(mapping, code) {
|
||||
if (mapping === null || mapping.source === undefined) {
|
||||
node.add(code);
|
||||
} else {
|
||||
var source = aRelativePath
|
||||
? util.join(aRelativePath, mapping.source)
|
||||
: mapping.source;
|
||||
node.add(new SourceNode(mapping.originalLine,
|
||||
mapping.originalColumn,
|
||||
source,
|
||||
code,
|
||||
mapping.name));
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Add a chunk of generated JS to this source node.
|
||||
*
|
||||
* @param aChunk A string snippet of generated JS code, another instance of
|
||||
* SourceNode, or an array where each member is one of those things.
|
||||
*/
|
||||
SourceNode.prototype.add = function SourceNode_add(aChunk) {
|
||||
if (Array.isArray(aChunk)) {
|
||||
aChunk.forEach(function (chunk) {
|
||||
this.add(chunk);
|
||||
}, this);
|
||||
}
|
||||
else if (aChunk[isSourceNode] || typeof aChunk === "string") {
|
||||
if (aChunk) {
|
||||
this.children.push(aChunk);
|
||||
}
|
||||
}
|
||||
else {
|
||||
throw new TypeError(
|
||||
"Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
|
||||
);
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Add a chunk of generated JS to the beginning of this source node.
|
||||
*
|
||||
* @param aChunk A string snippet of generated JS code, another instance of
|
||||
* SourceNode, or an array where each member is one of those things.
|
||||
*/
|
||||
SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
|
||||
if (Array.isArray(aChunk)) {
|
||||
for (var i = aChunk.length-1; i >= 0; i--) {
|
||||
this.prepend(aChunk[i]);
|
||||
}
|
||||
}
|
||||
else if (aChunk[isSourceNode] || typeof aChunk === "string") {
|
||||
this.children.unshift(aChunk);
|
||||
}
|
||||
else {
|
||||
throw new TypeError(
|
||||
"Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
|
||||
);
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Walk over the tree of JS snippets in this node and its children. The
|
||||
* walking function is called once for each snippet of JS and is passed that
|
||||
* snippet and the its original associated source's line/column location.
|
||||
*
|
||||
* @param aFn The traversal function.
|
||||
*/
|
||||
SourceNode.prototype.walk = function SourceNode_walk(aFn) {
|
||||
var chunk;
|
||||
for (var i = 0, len = this.children.length; i < len; i++) {
|
||||
chunk = this.children[i];
|
||||
if (chunk[isSourceNode]) {
|
||||
chunk.walk(aFn);
|
||||
}
|
||||
else {
|
||||
if (chunk !== '') {
|
||||
aFn(chunk, { source: this.source,
|
||||
line: this.line,
|
||||
column: this.column,
|
||||
name: this.name });
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
|
||||
* each of `this.children`.
|
||||
*
|
||||
* @param aSep The separator.
|
||||
*/
|
||||
SourceNode.prototype.join = function SourceNode_join(aSep) {
|
||||
var newChildren;
|
||||
var i;
|
||||
var len = this.children.length;
|
||||
if (len > 0) {
|
||||
newChildren = [];
|
||||
for (i = 0; i < len-1; i++) {
|
||||
newChildren.push(this.children[i]);
|
||||
newChildren.push(aSep);
|
||||
}
|
||||
newChildren.push(this.children[i]);
|
||||
this.children = newChildren;
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Call String.prototype.replace on the very right-most source snippet. Useful
|
||||
* for trimming whitespace from the end of a source node, etc.
|
||||
*
|
||||
* @param aPattern The pattern to replace.
|
||||
* @param aReplacement The thing to replace the pattern with.
|
||||
*/
|
||||
SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
|
||||
var lastChild = this.children[this.children.length - 1];
|
||||
if (lastChild[isSourceNode]) {
|
||||
lastChild.replaceRight(aPattern, aReplacement);
|
||||
}
|
||||
else if (typeof lastChild === 'string') {
|
||||
this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
|
||||
}
|
||||
else {
|
||||
this.children.push(''.replace(aPattern, aReplacement));
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
/**
|
||||
* Set the source content for a source file. This will be added to the SourceMapGenerator
|
||||
* in the sourcesContent field.
|
||||
*
|
||||
* @param aSourceFile The filename of the source file
|
||||
* @param aSourceContent The content of the source file
|
||||
*/
|
||||
SourceNode.prototype.setSourceContent =
|
||||
function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
|
||||
this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
|
||||
};
|
||||
|
||||
/**
|
||||
* Walk over the tree of SourceNodes. The walking function is called for each
|
||||
* source file content and is passed the filename and source content.
|
||||
*
|
||||
* @param aFn The traversal function.
|
||||
*/
|
||||
SourceNode.prototype.walkSourceContents =
|
||||
function SourceNode_walkSourceContents(aFn) {
|
||||
for (var i = 0, len = this.children.length; i < len; i++) {
|
||||
if (this.children[i][isSourceNode]) {
|
||||
this.children[i].walkSourceContents(aFn);
|
||||
}
|
||||
}
|
||||
|
||||
var sources = Object.keys(this.sourceContents);
|
||||
for (var i = 0, len = sources.length; i < len; i++) {
|
||||
aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Return the string representation of this source node. Walks over the tree
|
||||
* and concatenates all the various snippets together to one string.
|
||||
*/
|
||||
SourceNode.prototype.toString = function SourceNode_toString() {
|
||||
var str = "";
|
||||
this.walk(function (chunk) {
|
||||
str += chunk;
|
||||
});
|
||||
return str;
|
||||
};
|
||||
|
||||
/**
|
||||
* Returns the string representation of this source node along with a source
|
||||
* map.
|
||||
*/
|
||||
SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
|
||||
var generated = {
|
||||
code: "",
|
||||
line: 1,
|
||||
column: 0
|
||||
};
|
||||
var map = new SourceMapGenerator(aArgs);
|
||||
var sourceMappingActive = false;
|
||||
var lastOriginalSource = null;
|
||||
var lastOriginalLine = null;
|
||||
var lastOriginalColumn = null;
|
||||
var lastOriginalName = null;
|
||||
this.walk(function (chunk, original) {
|
||||
generated.code += chunk;
|
||||
if (original.source !== null
|
||||
&& original.line !== null
|
||||
&& original.column !== null) {
|
||||
if(lastOriginalSource !== original.source
|
||||
|| lastOriginalLine !== original.line
|
||||
|| lastOriginalColumn !== original.column
|
||||
|| lastOriginalName !== original.name) {
|
||||
map.addMapping({
|
||||
source: original.source,
|
||||
original: {
|
||||
line: original.line,
|
||||
column: original.column
|
||||
},
|
||||
generated: {
|
||||
line: generated.line,
|
||||
column: generated.column
|
||||
},
|
||||
name: original.name
|
||||
});
|
||||
}
|
||||
lastOriginalSource = original.source;
|
||||
lastOriginalLine = original.line;
|
||||
lastOriginalColumn = original.column;
|
||||
lastOriginalName = original.name;
|
||||
sourceMappingActive = true;
|
||||
} else if (sourceMappingActive) {
|
||||
map.addMapping({
|
||||
generated: {
|
||||
line: generated.line,
|
||||
column: generated.column
|
||||
}
|
||||
});
|
||||
lastOriginalSource = null;
|
||||
sourceMappingActive = false;
|
||||
}
|
||||
for (var idx = 0, length = chunk.length; idx < length; idx++) {
|
||||
if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
|
||||
generated.line++;
|
||||
generated.column = 0;
|
||||
// Mappings end at eol
|
||||
if (idx + 1 === length) {
|
||||
lastOriginalSource = null;
|
||||
sourceMappingActive = false;
|
||||
} else if (sourceMappingActive) {
|
||||
map.addMapping({
|
||||
source: original.source,
|
||||
original: {
|
||||
line: original.line,
|
||||
column: original.column
|
||||
},
|
||||
generated: {
|
||||
line: generated.line,
|
||||
column: generated.column
|
||||
},
|
||||
name: original.name
|
||||
});
|
||||
}
|
||||
} else {
|
||||
generated.column++;
|
||||
}
|
||||
}
|
||||
});
|
||||
this.walkSourceContents(function (sourceFile, sourceContent) {
|
||||
map.setSourceContent(sourceFile, sourceContent);
|
||||
});
|
||||
|
||||
return { code: generated.code, map: map };
|
||||
};
|
||||
|
||||
exports.SourceNode = SourceNode;
|
||||
|
||||
});
|
370
node_modules/doiuse/node_modules/source-map/lib/source-map/util.js
generated
vendored
Normal file
370
node_modules/doiuse/node_modules/source-map/lib/source-map/util.js
generated
vendored
Normal file
@@ -0,0 +1,370 @@
|
||||
/* -*- Mode: js; js-indent-level: 2; -*- */
|
||||
/*
|
||||
* Copyright 2011 Mozilla Foundation and contributors
|
||||
* Licensed under the New BSD license. See LICENSE or:
|
||||
* http://opensource.org/licenses/BSD-3-Clause
|
||||
*/
|
||||
if (typeof define !== 'function') {
|
||||
var define = require('amdefine')(module, require);
|
||||
}
|
||||
define(function (require, exports, module) {
|
||||
|
||||
/**
|
||||
* This is a helper function for getting values from parameter/options
|
||||
* objects.
|
||||
*
|
||||
* @param args The object we are extracting values from
|
||||
* @param name The name of the property we are getting.
|
||||
* @param defaultValue An optional value to return if the property is missing
|
||||
* from the object. If this is not specified and the property is missing, an
|
||||
* error will be thrown.
|
||||
*/
|
||||
function getArg(aArgs, aName, aDefaultValue) {
|
||||
if (aName in aArgs) {
|
||||
return aArgs[aName];
|
||||
} else if (arguments.length === 3) {
|
||||
return aDefaultValue;
|
||||
} else {
|
||||
throw new Error('"' + aName + '" is a required argument.');
|
||||
}
|
||||
}
|
||||
exports.getArg = getArg;
|
||||
|
||||
var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/;
|
||||
var dataUrlRegexp = /^data:.+\,.+$/;
|
||||
|
||||
function urlParse(aUrl) {
|
||||
var match = aUrl.match(urlRegexp);
|
||||
if (!match) {
|
||||
return null;
|
||||
}
|
||||
return {
|
||||
scheme: match[1],
|
||||
auth: match[2],
|
||||
host: match[3],
|
||||
port: match[4],
|
||||
path: match[5]
|
||||
};
|
||||
}
|
||||
exports.urlParse = urlParse;
|
||||
|
||||
function urlGenerate(aParsedUrl) {
|
||||
var url = '';
|
||||
if (aParsedUrl.scheme) {
|
||||
url += aParsedUrl.scheme + ':';
|
||||
}
|
||||
url += '//';
|
||||
if (aParsedUrl.auth) {
|
||||
url += aParsedUrl.auth + '@';
|
||||
}
|
||||
if (aParsedUrl.host) {
|
||||
url += aParsedUrl.host;
|
||||
}
|
||||
if (aParsedUrl.port) {
|
||||
url += ":" + aParsedUrl.port
|
||||
}
|
||||
if (aParsedUrl.path) {
|
||||
url += aParsedUrl.path;
|
||||
}
|
||||
return url;
|
||||
}
|
||||
exports.urlGenerate = urlGenerate;
|
||||
|
||||
/**
|
||||
* Normalizes a path, or the path portion of a URL:
|
||||
*
|
||||
* - Replaces consequtive slashes with one slash.
|
||||
* - Removes unnecessary '.' parts.
|
||||
* - Removes unnecessary '<dir>/..' parts.
|
||||
*
|
||||
* Based on code in the Node.js 'path' core module.
|
||||
*
|
||||
* @param aPath The path or url to normalize.
|
||||
*/
|
||||
function normalize(aPath) {
|
||||
var path = aPath;
|
||||
var url = urlParse(aPath);
|
||||
if (url) {
|
||||
if (!url.path) {
|
||||
return aPath;
|
||||
}
|
||||
path = url.path;
|
||||
}
|
||||
var isAbsolute = (path.charAt(0) === '/');
|
||||
|
||||
var parts = path.split(/\/+/);
|
||||
for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
|
||||
part = parts[i];
|
||||
if (part === '.') {
|
||||
parts.splice(i, 1);
|
||||
} else if (part === '..') {
|
||||
up++;
|
||||
} else if (up > 0) {
|
||||
if (part === '') {
|
||||
// The first part is blank if the path is absolute. Trying to go
|
||||
// above the root is a no-op. Therefore we can remove all '..' parts
|
||||
// directly after the root.
|
||||
parts.splice(i + 1, up);
|
||||
up = 0;
|
||||
} else {
|
||||
parts.splice(i, 2);
|
||||
up--;
|
||||
}
|
||||
}
|
||||
}
|
||||
path = parts.join('/');
|
||||
|
||||
if (path === '') {
|
||||
path = isAbsolute ? '/' : '.';
|
||||
}
|
||||
|
||||
if (url) {
|
||||
url.path = path;
|
||||
return urlGenerate(url);
|
||||
}
|
||||
return path;
|
||||
}
|
||||
exports.normalize = normalize;
|
||||
|
||||
/**
|
||||
* Joins two paths/URLs.
|
||||
*
|
||||
* @param aRoot The root path or URL.
|
||||
* @param aPath The path or URL to be joined with the root.
|
||||
*
|
||||
* - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
|
||||
* scheme-relative URL: Then the scheme of aRoot, if any, is prepended
|
||||
* first.
|
||||
* - Otherwise aPath is a path. If aRoot is a URL, then its path portion
|
||||
* is updated with the result and aRoot is returned. Otherwise the result
|
||||
* is returned.
|
||||
* - If aPath is absolute, the result is aPath.
|
||||
* - Otherwise the two paths are joined with a slash.
|
||||
* - Joining for example 'http://' and 'www.example.com' is also supported.
|
||||
*/
|
||||
function join(aRoot, aPath) {
|
||||
if (aRoot === "") {
|
||||
aRoot = ".";
|
||||
}
|
||||
if (aPath === "") {
|
||||
aPath = ".";
|
||||
}
|
||||
var aPathUrl = urlParse(aPath);
|
||||
var aRootUrl = urlParse(aRoot);
|
||||
if (aRootUrl) {
|
||||
aRoot = aRootUrl.path || '/';
|
||||
}
|
||||
|
||||
// `join(foo, '//www.example.org')`
|
||||
if (aPathUrl && !aPathUrl.scheme) {
|
||||
if (aRootUrl) {
|
||||
aPathUrl.scheme = aRootUrl.scheme;
|
||||
}
|
||||
return urlGenerate(aPathUrl);
|
||||
}
|
||||
|
||||
if (aPathUrl || aPath.match(dataUrlRegexp)) {
|
||||
return aPath;
|
||||
}
|
||||
|
||||
// `join('http://', 'www.example.com')`
|
||||
if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
|
||||
aRootUrl.host = aPath;
|
||||
return urlGenerate(aRootUrl);
|
||||
}
|
||||
|
||||
var joined = aPath.charAt(0) === '/'
|
||||
? aPath
|
||||
: normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
|
||||
|
||||
if (aRootUrl) {
|
||||
aRootUrl.path = joined;
|
||||
return urlGenerate(aRootUrl);
|
||||
}
|
||||
return joined;
|
||||
}
|
||||
exports.join = join;
|
||||
|
||||
/**
|
||||
* Make a path relative to a URL or another path.
|
||||
*
|
||||
* @param aRoot The root path or URL.
|
||||
* @param aPath The path or URL to be made relative to aRoot.
|
||||
*/
|
||||
function relative(aRoot, aPath) {
|
||||
if (aRoot === "") {
|
||||
aRoot = ".";
|
||||
}
|
||||
|
||||
aRoot = aRoot.replace(/\/$/, '');
|
||||
|
||||
// It is possible for the path to be above the root. In this case, simply
|
||||
// checking whether the root is a prefix of the path won't work. Instead, we
|
||||
// need to remove components from the root one by one, until either we find
|
||||
// a prefix that fits, or we run out of components to remove.
|
||||
var level = 0;
|
||||
while (aPath.indexOf(aRoot + '/') !== 0) {
|
||||
var index = aRoot.lastIndexOf("/");
|
||||
if (index < 0) {
|
||||
return aPath;
|
||||
}
|
||||
|
||||
// If the only part of the root that is left is the scheme (i.e. http://,
|
||||
// file:///, etc.), one or more slashes (/), or simply nothing at all, we
|
||||
// have exhausted all components, so the path is not relative to the root.
|
||||
aRoot = aRoot.slice(0, index);
|
||||
if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
|
||||
return aPath;
|
||||
}
|
||||
|
||||
++level;
|
||||
}
|
||||
|
||||
// Make sure we add a "../" for each component we removed from the root.
|
||||
return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
|
||||
}
|
||||
exports.relative = relative;
|
||||
|
||||
/**
|
||||
* Because behavior goes wacky when you set `__proto__` on objects, we
|
||||
* have to prefix all the strings in our set with an arbitrary character.
|
||||
*
|
||||
* See https://github.com/mozilla/source-map/pull/31 and
|
||||
* https://github.com/mozilla/source-map/issues/30
|
||||
*
|
||||
* @param String aStr
|
||||
*/
|
||||
function toSetString(aStr) {
|
||||
return '$' + aStr;
|
||||
}
|
||||
exports.toSetString = toSetString;
|
||||
|
||||
function fromSetString(aStr) {
|
||||
return aStr.substr(1);
|
||||
}
|
||||
exports.fromSetString = fromSetString;
|
||||
|
||||
/**
|
||||
* Comparator between two mappings where the original positions are compared.
|
||||
*
|
||||
* Optionally pass in `true` as `onlyCompareGenerated` to consider two
|
||||
* mappings with the same original source/line/column, but different generated
|
||||
* line and column the same. Useful when searching for a mapping with a
|
||||
* stubbed out mapping.
|
||||
*/
|
||||
function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
|
||||
var cmp = mappingA.source - mappingB.source;
|
||||
if (cmp !== 0) {
|
||||
return cmp;
|
||||
}
|
||||
|
||||
cmp = mappingA.originalLine - mappingB.originalLine;
|
||||
if (cmp !== 0) {
|
||||
return cmp;
|
||||
}
|
||||
|
||||
cmp = mappingA.originalColumn - mappingB.originalColumn;
|
||||
if (cmp !== 0 || onlyCompareOriginal) {
|
||||
return cmp;
|
||||
}
|
||||
|
||||
cmp = mappingA.generatedColumn - mappingB.generatedColumn;
|
||||
if (cmp !== 0) {
|
||||
return cmp;
|
||||
}
|
||||
|
||||
cmp = mappingA.generatedLine - mappingB.generatedLine;
|
||||
if (cmp !== 0) {
|
||||
return cmp;
|
||||
}
|
||||
|
||||
return mappingA.name - mappingB.name;
|
||||
};
|
||||
exports.compareByOriginalPositions = compareByOriginalPositions;
|
||||
|
||||
/**
|
||||
* Comparator between two mappings with deflated source and name indices where
|
||||
* the generated positions are compared.
|
||||
*
|
||||
* Optionally pass in `true` as `onlyCompareGenerated` to consider two
|
||||
* mappings with the same generated line and column, but different
|
||||
* source/name/original line and column the same. Useful when searching for a
|
||||
* mapping with a stubbed out mapping.
|
||||
*/
|
||||
function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
|
||||
var cmp = mappingA.generatedLine - mappingB.generatedLine;
|
||||
if (cmp !== 0) {
|
||||
return cmp;
|
||||
}
|
||||
|
||||
cmp = mappingA.generatedColumn - mappingB.generatedColumn;
|
||||
if (cmp !== 0 || onlyCompareGenerated) {
|
||||
return cmp;
|
||||
}
|
||||
|
||||
cmp = mappingA.source - mappingB.source;
|
||||
if (cmp !== 0) {
|
||||
return cmp;
|
||||
}
|
||||
|
||||
cmp = mappingA.originalLine - mappingB.originalLine;
|
||||
if (cmp !== 0) {
|
||||
return cmp;
|
||||
}
|
||||
|
||||
cmp = mappingA.originalColumn - mappingB.originalColumn;
|
||||
if (cmp !== 0) {
|
||||
return cmp;
|
||||
}
|
||||
|
||||
return mappingA.name - mappingB.name;
|
||||
};
|
||||
exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
|
||||
|
||||
function strcmp(aStr1, aStr2) {
|
||||
if (aStr1 === aStr2) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (aStr1 > aStr2) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
return -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Comparator between two mappings with inflated source and name strings where
|
||||
* the generated positions are compared.
|
||||
*/
|
||||
function compareByGeneratedPositionsInflated(mappingA, mappingB) {
|
||||
var cmp = mappingA.generatedLine - mappingB.generatedLine;
|
||||
if (cmp !== 0) {
|
||||
return cmp;
|
||||
}
|
||||
|
||||
cmp = mappingA.generatedColumn - mappingB.generatedColumn;
|
||||
if (cmp !== 0) {
|
||||
return cmp;
|
||||
}
|
||||
|
||||
cmp = strcmp(mappingA.source, mappingB.source);
|
||||
if (cmp !== 0) {
|
||||
return cmp;
|
||||
}
|
||||
|
||||
cmp = mappingA.originalLine - mappingB.originalLine;
|
||||
if (cmp !== 0) {
|
||||
return cmp;
|
||||
}
|
||||
|
||||
cmp = mappingA.originalColumn - mappingB.originalColumn;
|
||||
if (cmp !== 0) {
|
||||
return cmp;
|
||||
}
|
||||
|
||||
return strcmp(mappingA.name, mappingB.name);
|
||||
};
|
||||
exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
|
||||
|
||||
});
|
226
node_modules/doiuse/node_modules/source-map/package.json
generated
vendored
Normal file
226
node_modules/doiuse/node_modules/source-map/package.json
generated
vendored
Normal file
@@ -0,0 +1,226 @@
|
||||
{
|
||||
"_args": [
|
||||
[
|
||||
"source-map@^0.4.2",
|
||||
"/Users/pmarsceill/_projects/just-the-docs/node_modules/doiuse"
|
||||
]
|
||||
],
|
||||
"_from": "source-map@>=0.4.2 <0.5.0",
|
||||
"_id": "source-map@0.4.4",
|
||||
"_inCache": true,
|
||||
"_installable": true,
|
||||
"_location": "/doiuse/source-map",
|
||||
"_npmUser": {
|
||||
"email": "fitzgen@gmail.com",
|
||||
"name": "nickfitzgerald"
|
||||
},
|
||||
"_npmVersion": "1.4.9",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"name": "source-map",
|
||||
"raw": "source-map@^0.4.2",
|
||||
"rawSpec": "^0.4.2",
|
||||
"scope": null,
|
||||
"spec": ">=0.4.2 <0.5.0",
|
||||
"type": "range"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/doiuse"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
|
||||
"_shasum": "eba4f5da9c0dc999de68032d8b4f76173652036b",
|
||||
"_shrinkwrap": null,
|
||||
"_spec": "source-map@^0.4.2",
|
||||
"_where": "/Users/pmarsceill/_projects/just-the-docs/node_modules/doiuse",
|
||||
"author": {
|
||||
"email": "nfitzgerald@mozilla.com",
|
||||
"name": "Nick Fitzgerald"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/mozilla/source-map/issues"
|
||||
},
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Hugh Kennedy",
|
||||
"email": "hughskennedy@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Tobias Koppers",
|
||||
"email": "tobias.koppers@googlemail.com"
|
||||
},
|
||||
{
|
||||
"name": "Stephen Crane",
|
||||
"email": "scrane@mozilla.com"
|
||||
},
|
||||
{
|
||||
"name": "Ryan Seddon",
|
||||
"email": "seddon.ryan@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Miles Elam",
|
||||
"email": "miles.elam@deem.com"
|
||||
},
|
||||
{
|
||||
"name": "Mihai Bazon",
|
||||
"email": "mihai.bazon@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Michael Ficarra",
|
||||
"email": "github.public.email@michael.ficarra.me"
|
||||
},
|
||||
{
|
||||
"name": "Todd Wolfson",
|
||||
"email": "todd@twolfson.com"
|
||||
},
|
||||
{
|
||||
"name": "Alexander Solovyov",
|
||||
"email": "alexander@solovyov.net"
|
||||
},
|
||||
{
|
||||
"name": "Felix Gnass",
|
||||
"email": "fgnass@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Conrad Irwin",
|
||||
"email": "conrad.irwin@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "usrbincc",
|
||||
"email": "usrbincc@yahoo.com"
|
||||
},
|
||||
{
|
||||
"name": "David Glasser",
|
||||
"email": "glasser@davidglasser.net"
|
||||
},
|
||||
{
|
||||
"name": "Chase Douglas",
|
||||
"email": "chase@newrelic.com"
|
||||
},
|
||||
{
|
||||
"name": "Evan Wallace",
|
||||
"email": "evan.exe@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Heather Arthur",
|
||||
"email": "fayearthur@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Duncan Beevers",
|
||||
"email": "duncan@dweebd.com"
|
||||
},
|
||||
{
|
||||
"name": "David Glasser",
|
||||
"email": "glasser@davidglasser.net"
|
||||
},
|
||||
{
|
||||
"name": "Simon Lydell",
|
||||
"email": "simon.lydell@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Jmeas Smith",
|
||||
"email": "jellyes2@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Michael Z Goddard",
|
||||
"email": "mzgoddard@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "azu",
|
||||
"email": "azu@users.noreply.github.com"
|
||||
},
|
||||
{
|
||||
"name": "John Gozde",
|
||||
"email": "john@gozde.ca"
|
||||
},
|
||||
{
|
||||
"name": "Adam Kirkton",
|
||||
"email": "akirkton@truefitinnovation.com"
|
||||
},
|
||||
{
|
||||
"name": "Chris Montgomery",
|
||||
"email": "christopher.montgomery@dowjones.com"
|
||||
},
|
||||
{
|
||||
"name": "J. Ryan Stinnett",
|
||||
"email": "jryans@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Jack Herrington",
|
||||
"email": "jherrington@walmartlabs.com"
|
||||
},
|
||||
{
|
||||
"name": "Chris Truter",
|
||||
"email": "jeffpalentine@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Daniel Espeset",
|
||||
"email": "daniel@danielespeset.com"
|
||||
},
|
||||
{
|
||||
"name": "Jamie Wong",
|
||||
"email": "jamie.lf.wong@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Eddy Bruël",
|
||||
"email": "ejpbruel@mozilla.com"
|
||||
},
|
||||
{
|
||||
"name": "Hawken Rives",
|
||||
"email": "hawkrives@gmail.com"
|
||||
},
|
||||
{
|
||||
"name": "Gilad Peleg",
|
||||
"email": "giladp007@gmail.com"
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"amdefine": ">=0.0.4"
|
||||
},
|
||||
"description": "Generates and consumes source maps",
|
||||
"devDependencies": {
|
||||
"dryice": ">=0.4.8"
|
||||
},
|
||||
"directories": {
|
||||
"lib": "./lib"
|
||||
},
|
||||
"dist": {
|
||||
"shasum": "eba4f5da9c0dc999de68032d8b4f76173652036b",
|
||||
"tarball": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.8.0"
|
||||
},
|
||||
"files": [
|
||||
"build/",
|
||||
"lib/"
|
||||
],
|
||||
"homepage": "https://github.com/mozilla/source-map",
|
||||
"license": "BSD-3-Clause",
|
||||
"main": "./lib/source-map.js",
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "mozilla-devtools",
|
||||
"email": "mozilla-developer-tools@googlegroups.com"
|
||||
},
|
||||
{
|
||||
"name": "mozilla",
|
||||
"email": "dherman@mozilla.com"
|
||||
},
|
||||
{
|
||||
"name": "nickfitzgerald",
|
||||
"email": "fitzgen@gmail.com"
|
||||
}
|
||||
],
|
||||
"name": "source-map",
|
||||
"optionalDependencies": {},
|
||||
"readme": "ERROR: No README data found!",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+ssh://git@github.com/mozilla/source-map.git"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "node Makefile.dryice.js",
|
||||
"test": "node test/run-tests.js"
|
||||
},
|
||||
"version": "0.4.4"
|
||||
}
|
37
node_modules/doiuse/node_modules/string-width/index.js
generated
vendored
Normal file
37
node_modules/doiuse/node_modules/string-width/index.js
generated
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
'use strict';
|
||||
var stripAnsi = require('strip-ansi');
|
||||
var codePointAt = require('code-point-at');
|
||||
var isFullwidthCodePoint = require('is-fullwidth-code-point');
|
||||
|
||||
// https://github.com/nodejs/io.js/blob/cff7300a578be1b10001f2d967aaedc88aee6402/lib/readline.js#L1345
|
||||
module.exports = function (str) {
|
||||
if (typeof str !== 'string' || str.length === 0) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
var width = 0;
|
||||
|
||||
str = stripAnsi(str);
|
||||
|
||||
for (var i = 0; i < str.length; i++) {
|
||||
var code = codePointAt(str, i);
|
||||
|
||||
// ignore control characters
|
||||
if (code <= 0x1f || (code >= 0x7f && code <= 0x9f)) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// surrogates
|
||||
if (code >= 0x10000) {
|
||||
i++;
|
||||
}
|
||||
|
||||
if (isFullwidthCodePoint(code)) {
|
||||
width += 2;
|
||||
} else {
|
||||
width++;
|
||||
}
|
||||
}
|
||||
|
||||
return width;
|
||||
};
|
21
node_modules/doiuse/node_modules/string-width/license
generated
vendored
Normal file
21
node_modules/doiuse/node_modules/string-width/license
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (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.
|
115
node_modules/doiuse/node_modules/string-width/package.json
generated
vendored
Normal file
115
node_modules/doiuse/node_modules/string-width/package.json
generated
vendored
Normal file
@@ -0,0 +1,115 @@
|
||||
{
|
||||
"_args": [
|
||||
[
|
||||
"string-width@^1.0.1",
|
||||
"/Users/pmarsceill/_projects/just-the-docs/node_modules/doiuse/node_modules/yargs"
|
||||
]
|
||||
],
|
||||
"_from": "string-width@>=1.0.1 <2.0.0",
|
||||
"_id": "string-width@1.0.2",
|
||||
"_inCache": true,
|
||||
"_installable": true,
|
||||
"_location": "/doiuse/string-width",
|
||||
"_nodeVersion": "4.4.5",
|
||||
"_npmOperationalInternal": {
|
||||
"host": "packages-12-west.internal.npmjs.com",
|
||||
"tmp": "tmp/string-width-1.0.2.tgz_1471188233009_0.6573935742489994"
|
||||
},
|
||||
"_npmUser": {
|
||||
"email": "sindresorhus@gmail.com",
|
||||
"name": "sindresorhus"
|
||||
},
|
||||
"_npmVersion": "2.15.5",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"name": "string-width",
|
||||
"raw": "string-width@^1.0.1",
|
||||
"rawSpec": "^1.0.1",
|
||||
"scope": null,
|
||||
"spec": ">=1.0.1 <2.0.0",
|
||||
"type": "range"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/doiuse/yargs"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
|
||||
"_shasum": "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3",
|
||||
"_shrinkwrap": null,
|
||||
"_spec": "string-width@^1.0.1",
|
||||
"_where": "/Users/pmarsceill/_projects/just-the-docs/node_modules/doiuse/node_modules/yargs",
|
||||
"author": {
|
||||
"email": "sindresorhus@gmail.com",
|
||||
"name": "Sindre Sorhus",
|
||||
"url": "sindresorhus.com"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/sindresorhus/string-width/issues"
|
||||
},
|
||||
"dependencies": {
|
||||
"code-point-at": "^1.0.0",
|
||||
"is-fullwidth-code-point": "^1.0.0",
|
||||
"strip-ansi": "^3.0.0"
|
||||
},
|
||||
"description": "Get the visual width of a string - the number of columns required to display it",
|
||||
"devDependencies": {
|
||||
"ava": "*",
|
||||
"xo": "*"
|
||||
},
|
||||
"directories": {},
|
||||
"dist": {
|
||||
"shasum": "118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3",
|
||||
"tarball": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
},
|
||||
"files": [
|
||||
"index.js"
|
||||
],
|
||||
"gitHead": "282cf3d53918a92cc3ee0778dcf938039bcbc47b",
|
||||
"homepage": "https://github.com/sindresorhus/string-width#readme",
|
||||
"keywords": [
|
||||
"ansi",
|
||||
"char",
|
||||
"character",
|
||||
"chinese",
|
||||
"cjk",
|
||||
"cli",
|
||||
"codes",
|
||||
"column",
|
||||
"columns",
|
||||
"command-line",
|
||||
"console",
|
||||
"escape",
|
||||
"fixed-width",
|
||||
"full",
|
||||
"full-width",
|
||||
"fullwidth",
|
||||
"japanese",
|
||||
"korean",
|
||||
"str",
|
||||
"string",
|
||||
"terminal",
|
||||
"unicode",
|
||||
"visual",
|
||||
"width"
|
||||
],
|
||||
"license": "MIT",
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "sindresorhus",
|
||||
"email": "sindresorhus@gmail.com"
|
||||
}
|
||||
],
|
||||
"name": "string-width",
|
||||
"optionalDependencies": {},
|
||||
"readme": "ERROR: No README data found!",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/sindresorhus/string-width.git"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "xo && ava"
|
||||
},
|
||||
"version": "1.0.2"
|
||||
}
|
42
node_modules/doiuse/node_modules/string-width/readme.md
generated
vendored
Normal file
42
node_modules/doiuse/node_modules/string-width/readme.md
generated
vendored
Normal file
@@ -0,0 +1,42 @@
|
||||
# string-width [](https://travis-ci.org/sindresorhus/string-width)
|
||||
|
||||
> Get the visual width of a string - the number of columns required to display it
|
||||
|
||||
Some Unicode characters are [fullwidth](https://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms) and use double the normal width. [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code) are stripped and doesn't affect the width.
|
||||
|
||||
Useful to be able to measure the actual width of command-line output.
|
||||
|
||||
|
||||
## Install
|
||||
|
||||
```
|
||||
$ npm install --save string-width
|
||||
```
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
const stringWidth = require('string-width');
|
||||
|
||||
stringWidth('古');
|
||||
//=> 2
|
||||
|
||||
stringWidth('\u001b[1m古\u001b[22m');
|
||||
//=> 2
|
||||
|
||||
stringWidth('a');
|
||||
//=> 1
|
||||
```
|
||||
|
||||
|
||||
## Related
|
||||
|
||||
- [string-width-cli](https://github.com/sindresorhus/string-width-cli) - CLI for this module
|
||||
- [string-length](https://github.com/sindresorhus/string-length) - Get the real length of a string
|
||||
- [widest-line](https://github.com/sindresorhus/widest-line) - Get the visual width of the widest line in a string
|
||||
|
||||
|
||||
## License
|
||||
|
||||
MIT © [Sindre Sorhus](https://sindresorhus.com)
|
508
node_modules/doiuse/node_modules/yargs/CHANGELOG.md
generated
vendored
Normal file
508
node_modules/doiuse/node_modules/yargs/CHANGELOG.md
generated
vendored
Normal file
@@ -0,0 +1,508 @@
|
||||
## Change Log
|
||||
|
||||
### v3.32.0 (2016/1/14 10:13 +07:00)
|
||||
|
||||
- [#344](https://github.com/bcoe/yargs/pull/344) yargs now has a code of conduct and contributor guidelines (@bcoe)
|
||||
- [#341](https://github.com/bcoe/yargs/issues/341) Fix edge-case with camel-case arguments (@davibe)
|
||||
- [#331](https://github.com/bcoe/yargs/pull/331) Handle parsing a raw argument string (@kellyselden)
|
||||
- [#325](https://github.com/bcoe/yargs/pull/325) Tweaks to make tests pass again on Windows (@isaacs)
|
||||
- [#321](https://github.com/bcoe/yargs/pull/321) Custom config parsing function (@bcoe)
|
||||
|
||||
### v3.31.0 (2015/12/03 10:15 +07:00)
|
||||
|
||||
- [#239](https://github.com/bcoe/yargs/pull/239) Pass argv to commands (@bcoe)
|
||||
- [#308](https://github.com/bcoe/yargs/pull/308) Yargs now handles environment variables (@nexdrew)
|
||||
- [#302](https://github.com/bcoe/yargs/pull/302) Add Indonesian translation (@rilut)
|
||||
- [#300](https://github.com/bcoe/yargs/pull/300) Add Turkish translation (@feyzo)
|
||||
- [#298](https://github.com/bcoe/yargs/pull/298) Add Norwegian Bokmål translation (@sindresorhus)
|
||||
- [#297](https://github.com/bcoe/yargs/pull/297) Fix for layout of cjk characters (@disjukr)
|
||||
- [#296](https://github.com/bcoe/yargs/pull/296) Add Korean translation (@disjukr)
|
||||
|
||||
### v3.30.0 (2015/11/13 16:29 +07:00)
|
||||
|
||||
- [#293](https://github.com/bcoe/yargs/pull/293) Polish language support (@kamilogorek)
|
||||
- [#291](https://github.com/bcoe/yargs/pull/291) fix edge-cases with `.alias()` (@bcoe)
|
||||
- [#289](https://github.com/bcoe/yargs/pull/289) group options in custom groups (@bcoe)
|
||||
|
||||
### v3.29.0 (2015/10/16 21:51 +07:00)
|
||||
|
||||
- [#282](https://github.com/bcoe/yargs/pull/282) completions now accept promises (@LinusU)
|
||||
- [#281](https://github.com/bcoe/yargs/pull/281) fix parsing issues with dot notation (@bcoe)
|
||||
|
||||
### v3.28.0 (2015/10/16 1:55 +07:00)
|
||||
|
||||
- [#277](https://github.com/bcoe/yargs/pull/277) adds support for ansi escape codes (@bcoe)
|
||||
|
||||
### v3.27.0 (2015/10/08 1:55 +00:00)
|
||||
|
||||
- [#271](https://github.com/bcoe/yargs/pull/273) skips validation for help or version flags with exitProcess(false) (@tepez)
|
||||
- [#273](https://github.com/bcoe/yargs/pull/273) implements single output for errors with exitProcess(false) (@nexdrew)
|
||||
- [#269](https://github.com/bcoe/yargs/pull/269) verifies single output for errors with exitProcess(false) (@tepez)
|
||||
- [#268](https://github.com/bcoe/yargs/pull/268) adds Chinese translation (@qiu8310)
|
||||
- [#266](https://github.com/bcoe/yargs/pull/266) adds case for -- after -- in parser test (@geophree)
|
||||
|
||||
### v3.26.0 (2015/09/25 2:14 +00:00)
|
||||
|
||||
- [#263](https://github.com/bcoe/yargs/pull/263) document count() and option() object keys (@nexdrew)
|
||||
- [#259](https://github.com/bcoe/yargs/pull/259) remove util in readme (@38elements)
|
||||
- [#258](https://github.com/bcoe/yargs/pull/258) node v4 builds, update deps (@nexdrew)
|
||||
- [#257](https://github.com/bcoe/yargs/pull/257) fix spelling errors (@dkoleary88)
|
||||
|
||||
### v3.25.0 (2015/09/13 7:38 -07:00)
|
||||
|
||||
- [#254](https://github.com/bcoe/yargs/pull/254) adds Japanese translation (@oti)
|
||||
- [#253](https://github.com/bcoe/yargs/pull/253) fixes for tests on Windows (@bcoe)
|
||||
|
||||
### v3.24.0 (2015/09/04 12:02 +00:00)
|
||||
|
||||
- [#248](https://github.com/bcoe/yargs/pull/248) reinstate os-locale, no spawning (@nexdrew)
|
||||
- [#249](https://github.com/bcoe/yargs/pull/249) use travis container-based infrastructure (@nexdrew)
|
||||
- [#247](https://github.com/bcoe/yargs/pull/247) upgrade standard (@nexdrew)
|
||||
|
||||
### v3.23.0 (2015/08/30 23:00 +00:00)
|
||||
|
||||
- [#246](https://github.com/bcoe/yargs/pull/246) detect locale based only on environment variables (@bcoe)
|
||||
- [#244](https://github.com/bcoe/yargs/pull/244) adds Windows CI testing (@bcoe)
|
||||
- [#245](https://github.com/bcoe/yargs/pull/245) adds OSX CI testing (@bcoe, @nexdrew)
|
||||
|
||||
### v3.22.0 (2015/08/28 22:26 +00:00)
|
||||
- [#242](https://github.com/bcoe/yargs/pull/242) adds detectLocale config option (@bcoe)
|
||||
|
||||
### v3.21.1 (2015/08/28 20:58 +00:00)
|
||||
- [#240](https://github.com/bcoe/yargs/pull/240) hot-fix for Atom on Windows (@bcoe)
|
||||
|
||||
### v3.21.0 (2015/08/21 21:20 +00:00)
|
||||
- [#238](https://github.com/bcoe/yargs/pull/238) upgrade camelcase, window-size, chai, mocha (@nexdrew)
|
||||
- [#237](https://github.com/bcoe/yargs/pull/237) adds defaultDescription to option() (@nexdrew)
|
||||
|
||||
### v3.20.0 (2015/08/20 01:29 +00:00)
|
||||
- [#231](https://github.com/bcoe/yargs/pull/231) Merge pull request #231 from bcoe/detect-locale (@sindresorhus)
|
||||
- [#235](https://github.com/bcoe/yargs/pull/235) adds german translation to yargs (@maxrimue)
|
||||
|
||||
### v3.19.0 (2015/08/14 05:12 +00:00)
|
||||
- [#224](https://github.com/bcoe/yargs/pull/224) added Portuguese translation (@codemonkey3045)
|
||||
|
||||
### v3.18.1 (2015/08/12 05:53 +00:00)
|
||||
|
||||
- [#228](https://github.com/bcoe/yargs/pull/228) notes about embedding yargs in Electron (@etiktin)
|
||||
- [#223](https://github.com/bcoe/yargs/pull/223) make booleans work in config files (@sgentle)
|
||||
|
||||
### v3.18.0 (2015/08/06 20:05 +00:00)
|
||||
- [#222](https://github.com/bcoe/yargs/pull/222) updates fr locale (@nexdrew)
|
||||
- [#221](https://github.com/bcoe/yargs/pull/221) adds missing locale strings (@nexdrew)
|
||||
- [#220](https://github.com/bcoe/yargs/pull/220) adds es locale (@zkat)
|
||||
|
||||
### v3.17.1 (2015/08/02 19:35 +00:00)
|
||||
- [#218](https://github.com/bcoe/yargs/pull/218) upgrades nyc (@bcoe)
|
||||
|
||||
### v3.17.0 (2015/08/02 18:39 +00:00)
|
||||
- [#217](https://github.com/bcoe/yargs/pull/217) sort methods in README.md (@nexdrew)
|
||||
- [#215](https://github.com/bcoe/yargs/pull/215) adds fr locale (@LoicMahieu)
|
||||
|
||||
### v3.16.0 (2015/07/30 04:35 +00:00)
|
||||
- [#210](https://github.com/bcoe/yargs/pull/210) adds i18n support to yargs (@bcoe)
|
||||
- [#209](https://github.com/bcoe/yargs/pull/209) adds choices type to yargs (@nexdrew)
|
||||
- [#207](https://github.com/bcoe/yargs/pull/207) pretty new shields from shields.io (@SimenB)
|
||||
- [#208](https://github.com/bcoe/yargs/pull/208) improvements to README.md (@nexdrew)
|
||||
- [#205](https://github.com/bcoe/yargs/pull/205) faster build times on Travis (@ChristianMurphy)
|
||||
|
||||
### v3.15.0 (2015/07/06 06:01 +00:00)
|
||||
- [#197](https://github.com/bcoe/yargs/pull/197) tweaks to how errors bubble up from parser.js (@bcoe)
|
||||
- [#193](https://github.com/bcoe/yargs/pull/193) upgraded nyc, reporting now happens by default (@bcoe)
|
||||
|
||||
### v3.14.0 (2015/06/28 02:12 +00:00)
|
||||
|
||||
- [#192](https://github.com/bcoe/yargs/pull/192) standard style nits (@bcoe)
|
||||
- [#190](https://github.com/bcoe/yargs/pull/190) allow for hidden commands, e.g.,
|
||||
.completion('completion', false) (@tschaub)
|
||||
|
||||
### v3.13.0 (2015/06/24 04:12 +00:00)
|
||||
|
||||
- [#187](https://github.com/bcoe/yargs/pull/187) completion now behaves differently
|
||||
if it is being run in the context of a command (@tschaub)
|
||||
- [#186](https://github.com/bcoe/yargs/pull/186) if no matches are found for a completion
|
||||
default to filename completion (@tschaub)
|
||||
|
||||
### v3.12.0 (2015/06/19 03:23 +00:00)
|
||||
- [#183](https://github.com/bcoe/yargs/pull/183) don't complete commands if they've already been completed (@tschaub)
|
||||
- [#181](https://github.com/bcoe/yargs/pull/181) various fixes for completion. (@bcoe, @tschaub)
|
||||
- [#182](https://github.com/bcoe/yargs/pull/182) you can now set a maximum # of of required arguments (@bcoe)
|
||||
|
||||
### v3.11.0 (2015/06/15 05:15 +00:00)
|
||||
|
||||
- [#173](https://github.com/bcoe/yargs/pull/173) update standard, window-size, chai (@bcoe)
|
||||
- [#171](https://github.com/bcoe/yargs/pull/171) a description can now be set
|
||||
when providing a config option. (@5c077yP)
|
||||
|
||||
### v3.10.0 (2015/05/29 04:25 +00:00)
|
||||
|
||||
- [#165](https://github.com/bcoe/yargs/pull/165) expose yargs.terminalWidth() thanks @ensonic (@bcoe)
|
||||
- [#164](https://github.com/bcoe/yargs/pull/164) better array handling thanks @getify (@bcoe)
|
||||
|
||||
### v3.9.1 (2015/05/20 05:14 +00:00)
|
||||
- [b6662b6](https://github.com/bcoe/yargs/commit/b6662b6774cfeab4876f41ec5e2f67b7698f4e2f) clarify .config() docs (@linclark)
|
||||
- [0291360](https://github.com/bcoe/yargs/commit/02913606285ce31ce81d7f12c48d8a3029776ec7) fixed tests, switched to nyc for coverage, fixed security issue, added Lin as collaborator (@bcoe)
|
||||
|
||||
### v3.9.0 (2015/05/10 18:32 +00:00)
|
||||
- [#157](https://github.com/bcoe/yargs/pull/157) Merge pull request #157 from bcoe/command-yargs. allows handling of command specific arguments. Thanks for the suggestion @ohjames (@bcoe)
|
||||
- [#158](https://github.com/bcoe/yargs/pull/158) Merge pull request #158 from kemitchell/spdx-license. Update license format (@kemitchell)
|
||||
|
||||
### v3.8.0 (2015/04/24 23:10 +00:00)
|
||||
- [#154](https://github.com/bcoe/yargs/pull/154) showHelp's method signature was misleading fixes #153 (@bcoe)
|
||||
- [#151](https://github.com/bcoe/yargs/pull/151) refactor yargs' table layout logic to use new helper library (@bcoe)
|
||||
- [#150](https://github.com/bcoe/yargs/pull/150) Fix README example in argument requirements (@annonymouse)
|
||||
|
||||
### v3.7.2 (2015/04/13 11:52 -07:00)
|
||||
|
||||
* [679fbbf](https://github.com/bcoe/yargs/commit/679fbbf55904030ccee8a2635e8e5f46551ab2f0) updated yargs to use the [standard](https://github.com/feross/standard) style guide (agokjr)
|
||||
* [22382ee](https://github.com/bcoe/yargs/commit/22382ee9f5b495bc2586c1758cd1091cec3647f9 various bug fixes for $0 (@nylen)
|
||||
|
||||
### v3.7.1 (2015/04/10 11:06 -07:00)
|
||||
|
||||
* [89e1992](https://github.com/bcoe/yargs/commit/89e1992a004ba73609b5f9ee6890c4060857aba4) detect iojs bin along with node bin. (@bcoe)
|
||||
* [755509e](https://github.com/bcoe/yargs/commit/755509ea90041e5f7833bba3b8c5deffe56f0aab) improvements to example documentation in README.md (@rstacruz)
|
||||
* [0d2dfc8](https://github.com/bcoe/yargs/commit/0d2dfc822a43418242908ad97ddd5291a1b35dc6) showHelp() no longer requires that .argv has been called (@bcoe)
|
||||
|
||||
### v3.7.0 (2015/04/04 02:29 -07:00)
|
||||
|
||||
* [56cbe2d](https://github.com/bcoe/yargs/commit/56cbe2ddd33dc176dcbf97ba40559864a9f114e4) make .requiresArg() work with type hints. (@bcoe).
|
||||
* [2f5d562](https://github.com/bcoe/yargs/commit/2f5d5624f736741deeedf6a664d57bc4d857bdd0) serialize arrays and objects in usage strings. (@bcoe).
|
||||
* [5126304](https://github.com/bcoe/yargs/commit/5126304dd18351fc28f10530616fdd9361e0af98) be more lenient about alias/primary key ordering in chaining API. (@bcoe)
|
||||
|
||||
### v3.6.0 (2015/03/21 01:00 +00:00)
|
||||
- [4e24e22](https://github.com/bcoe/yargs/commit/4e24e22e6a195e55ab943ede704a0231ac33b99c) support for .js configuration files. (@pirxpilot)
|
||||
|
||||
### v3.5.4 (2015/03/12 05:56 +00:00)
|
||||
- [c16cc08](https://github.com/bcoe/yargs/commit/c16cc085501155cf7fd853ccdf8584b05ab92b78) message for non-option arguments is now optional, thanks to (@raine)
|
||||
|
||||
### v3.5.3 (2015/03/09 06:14 +00:00)
|
||||
- [870b428](https://github.com/bcoe/yargs/commit/870b428cf515d560926ca392555b7ad57dba9e3d) completion script was missing in package.json (@bcoe)
|
||||
|
||||
### v3.5.2 (2015/03/09 06:11 +00:00)
|
||||
- [58a4b24](https://github.com/bcoe/yargs/commit/58a4b2473ebbb326713d522be53e32d3aabb08d2) parse was being called multiple times, resulting in strange behavior (@bcoe)
|
||||
|
||||
### v3.5.1 (2015/03/09 04:55 +00:00)
|
||||
- [4e588e0](https://github.com/bcoe/yargs/commit/4e588e055afbeb9336533095f051496e3977f515) accidentally left testing logic in (@bcoe)
|
||||
|
||||
### v3.5.0 (2015/03/09 04:49 +00:00)
|
||||
- [718bacd](https://github.com/bcoe/yargs/commit/718bacd81b9b44f786af76b2afe491fe06274f19) added support for bash completions see #4 (@bcoe)
|
||||
- [a192882](https://github.com/bcoe/yargs/commit/a19288270fc431396c42af01125eeb4443664528) downgrade to mocha 2.1.0 until https://github.com/mochajs/mocha/issues/1585 can be sorted out (@bcoe)
|
||||
|
||||
### v3.4.7 (2015/03/09 04:09 +00:00)
|
||||
- [9845e5c](https://github.com/bcoe/yargs/commit/9845e5c1a9c684ba0be3f0bfb40e7b62ab49d9c8) the Argv singleton was not being updated when manually parsing arguments, fixes #114 (@bcoe)
|
||||
|
||||
### v3.4.6 (2015/03/09 04:01 +00:00)
|
||||
- [45b4c80](https://github.com/bcoe/yargs/commit/45b4c80b890d02770b0a94f326695a8a566e8fe9) set placeholders for all keys fixes #115 (@bcoe)
|
||||
|
||||
### v3.4.5 (2015/03/01 20:31 +00:00)
|
||||
- [a758e0b](https://github.com/bcoe/yargs/commit/a758e0b2556184f067cf3d9c4ef886d39817ebd2) fix for count consuming too many arguments (@bcoe)
|
||||
|
||||
### v3.4.4 (2015/02/28 04:52 +00:00)
|
||||
- [0476af7](https://github.com/bcoe/yargs/commit/0476af757966acf980d998b45108221d4888cfcb) added nargs feature, allowing you to specify the number of arguments after an option (@bcoe)
|
||||
- [092477d](https://github.com/bcoe/yargs/commit/092477d7ab3efbf0ba11cede57f7d8cfc70b024f) updated README with full example of v3.0 API (@bcoe)
|
||||
|
||||
### v3.3.3 (2015/02/28 04:23 +00:00)
|
||||
- [0c4b769](https://github.com/bcoe/yargs/commit/0c4b769516cd8d93a7c4e5e675628ae0049aa9a8) remove string dependency, which conflicted with other libraries see #106 (@bcoe)
|
||||
|
||||
### v3.3.2 (2015/02/28 04:11 +00:00)
|
||||
- [2a98906](https://github.com/bcoe/yargs/commit/2a9890675821c0e7a12f146ce008b0562cb8ec9a) add $0 to epilog (@schnittstabil)
|
||||
|
||||
### v3.3.1 (2015/02/24 03:28 +00:00)
|
||||
- [ad485ce](https://github.com/bcoe/yargs/commit/ad485ce748ebdfce25b88ef9d6e83d97a2f68987) fix for applying defaults to camel-case args (@bcoe)
|
||||
|
||||
### v3.3.0 (2015/02/24 00:49 +00:00)
|
||||
- [8bfe36d](https://github.com/bcoe/yargs/commit/8bfe36d7fb0f93a799ea3f4c756a7467c320f8c0) fix and document restart() command, as a tool for building nested CLIs (@bcoe)
|
||||
|
||||
### v3.2.1 (2015/02/22 05:45 +00:00)
|
||||
- [49a6d18](https://github.com/bcoe/yargs/commit/49a6d1822a4ef9b1ea6f90cc366be60912628885) you can now provide a function that generates a default value (@bcoe)
|
||||
|
||||
### v3.2.0 (2015/02/22 05:24 +00:00)
|
||||
- [7a55886](https://github.com/bcoe/yargs/commit/7a55886c9343cf71a20744ca5cdd56d2ea7412d5) improvements to yargs two-column text layout (@bcoe)
|
||||
- [b6ab513](https://github.com/bcoe/yargs/commit/b6ab5136a4c3fa6aa496f6b6360382e403183989) Tweak NPM version badge (@nylen)
|
||||
|
||||
### v3.1.0 (2015/02/19 19:37 +00:00)
|
||||
- [9bd2379](https://github.com/bcoe/yargs/commit/9bd237921cf1b61fd9f32c0e6d23f572fc225861) version now accepts a function, making it easy to load version #s from a package.json (@bcoe)
|
||||
|
||||
### v3.0.4 (2015/02/14 01:40 +00:00)
|
||||
- [0b7c19b](https://github.com/bcoe/yargs/commit/0b7c19beaecb747267ca4cc10e5cb2a8550bc4b7) various fixes for dot-notation handling (@bcoe)
|
||||
|
||||
### v3.0.3 (2015/02/14 00:59 +00:00)
|
||||
- [c3f35e9](https://github.com/bcoe/yargs/commit/c3f35e99bd5a0d278073fcadd95e2d778616cc17) make sure dot-notation is applied to aliases (@bcoe)
|
||||
|
||||
### 3.0.2 (2015/02/13 16:50 +00:00)
|
||||
- [74c8967](https://github.com/bcoe/yargs/commit/74c8967c340c204a0a7edf8a702b6f46c2705435) document epilog shorthand of epilogue. (@bcoe)
|
||||
- [670110f](https://github.com/bcoe/yargs/commit/670110fc01bedc4831b6fec6afac54517d5a71bc) any non-truthy value now causes check to fail see #76 (@bcoe)
|
||||
- [0d8f791](https://github.com/bcoe/yargs/commit/0d8f791a33c11ced4cd431ea8d3d3a337d456b56) finished implementing my wish-list of fetures for yargs 3.0. see #88 (@bcoe)
|
||||
- [5768447](https://github.com/bcoe/yargs/commit/5768447447c4c8e8304f178846206ce86540f063) fix coverage. (@bcoe)
|
||||
- [82e793f](https://github.com/bcoe/yargs/commit/82e793f3f61c41259eaacb67f0796aea2cf2aaa0) detect console width and perform word-wrapping. (@bcoe)
|
||||
- [67476b3](https://github.com/bcoe/yargs/commit/67476b37eea07fee55f23f35b9e0c7d76682b86d) refactor two-column table layout so that we can use it for examples and usage (@bcoe)
|
||||
- [4724cdf](https://github.com/bcoe/yargs/commit/4724cdfcc8e37ae1ca3dcce9d762f476e9ef4bb4) major refactor of index.js, in prep for 3.x release. (@bcoe)
|
||||
|
||||
### v2.3.0 (2015/02/08 20:41 +00:00)
|
||||
- [d824620](https://github.com/bcoe/yargs/commit/d824620493df4e63664af1fe320764dd1a9244e6) allow for undefined boolean defaults (@ashi009)
|
||||
|
||||
### v2.2.0 (2015/02/08 20:07 +00:00)
|
||||
- [d6edd98](https://github.com/bcoe/yargs/commit/d6edd9848826e7389ed1393858c45d03961365fd) in-prep for further refactoring, and a 3.x release I've shuffled some things around and gotten test-coverage to 100%. (@bcoe)
|
||||
|
||||
### v2.1.2 (2015/02/08 06:05 +00:00)
|
||||
- [d640745](https://github.com/bcoe/yargs/commit/d640745a7b9f8d476e0223879d056d18d9c265c4) switch to path.relative (@bcoe)
|
||||
- [3bfd41f](https://github.com/bcoe/yargs/commit/3bfd41ff262a041f29d828b88936a79c63cad594) remove mocha.opts. (@bcoe)
|
||||
- [47a2f35](https://github.com/bcoe/yargs/commit/47a2f357091db70903a402d6765501c1d63f15fe) document using .string('_') for string ids. see #56 (@bcoe)
|
||||
- [#57](https://github.com/bcoe/yargs/pull/57) Merge pull request #57 from eush77/option-readme (@eush77)
|
||||
|
||||
### v2.1.1 (2015/02/06 08:08 +00:00)
|
||||
- [01c6c61](https://github.com/bcoe/yargs/commit/01c6c61d67b4ebf88f41f0b32a345ec67f0ac17d) fix for #71, 'newAliases' of undefined (@bcoe)
|
||||
|
||||
### v2.1.0 (2015/02/06 07:59 +00:00)
|
||||
- [6a1a3fa](https://github.com/bcoe/yargs/commit/6a1a3fa731958e26ccd56885f183dd8985cc828f) try to guess argument types, and apply sensible defaults see #73 (@bcoe)
|
||||
|
||||
### v2.0.1 (2015/02/06 07:54 +00:00)
|
||||
- [96a06b2](https://github.com/bcoe/yargs/commit/96a06b2650ff1d085a52b7328d8bba614c20cc12) Fix for strange behavior with --sort option, see #51 (@bcoe)
|
||||
|
||||
### v2.0.0 (2015/02/06 07:45 +00:00)
|
||||
- [0250517](https://github.com/bcoe/yargs/commit/0250517c9643e53f431b824e8ccfa54937414011) - [108fb84](https://github.com/bcoe/yargs/commit/108fb8409a3a63dcaf99d917fe4dfcfaa1de236d) fixed bug with boolean parsing, when bools separated by = see #66 (@bcoe)
|
||||
- [a465a59](https://github.com/bcoe/yargs/commit/a465a5915f912715738de890982e4f8395958b10) Add `files` field to the package.json (@shinnn)
|
||||
- [31043de](https://github.com/bcoe/yargs/commit/31043de7a38a17c4c97711f1099f5fb164334db3) fix for yargs.argv having the same keys added multiple times see #63 (@bcoe)
|
||||
- [2d68c5b](https://github.com/bcoe/yargs/commit/2d68c5b91c976431001c4863ce47c9297850f1ad) Disable process.exit calls using .exitProcess(false) (@cianclarke)
|
||||
- [45da9ec](https://github.com/bcoe/yargs/commit/45da9ec4c55a7bd394721bc6a1db0dabad7bc52a) Mention .option in README (@eush77)
|
||||
|
||||
### v1.3.2 (2014/10/06 21:56 +00:00)
|
||||
- [b8d3472](https://github.com/bcoe/yargs/commit/b8d34725482e5821a3cc809c0df71378f282f526) 1.3.2 (@chevex)
|
||||
|
||||
### list (2014/08/30 18:41 +00:00)
|
||||
- [fbc777f](https://github.com/bcoe/yargs/commit/fbc777f416eeefd37c84e44d27d7dfc7c1925721) Now that yargs is the successor to optimist, I'm changing the README language to be more universal. Pirate speak isn't very accessible to non-native speakers. (@chevex)
|
||||
- [a54d068](https://github.com/bcoe/yargs/commit/a54d0682ae2efc2394d407ab171cc8a8bbd135ea) version output will not print extra newline (@boneskull)
|
||||
- [1cef5d6](https://github.com/bcoe/yargs/commit/1cef5d62a9d6d61a3948a49574892e01932cc6ae) Added contributors section to package.json (@chrisn)
|
||||
- [cc295c0](https://github.com/bcoe/yargs/commit/cc295c0a80a2de267e0155b60d315fc4b6f7c709) Added 'require' and 'required' as synonyms for 'demand' (@chrisn)
|
||||
- [d0bf951](https://github.com/bcoe/yargs/commit/d0bf951d949066b6280101ed606593d079ee15c8) Updating minimist. (@chevex)
|
||||
- [c15f8e7](https://github.com/bcoe/yargs/commit/c15f8e7f245b261e542cf205ce4f4313630cbdb4) Fix #31 (bad interaction between camelCase options and strict mode) (@nylen)
|
||||
- [d991b9b](https://github.com/bcoe/yargs/commit/d991b9be687a68812dee1e3b185ba64b7778b82d) Added .help() and .version() methods (@chrisn)
|
||||
- [e8c8aa4](https://github.com/bcoe/yargs/commit/e8c8aa46268379357cb11e9fc34b8c403037724b) Added .showHelpOnFail() method (@chrisn)
|
||||
- [e855af4](https://github.com/bcoe/yargs/commit/e855af4a933ea966b5bbdd3c4c6397a4bac1a053) Allow boolean flag with .demand() (@chrisn)
|
||||
- [14dbec2](https://github.com/bcoe/yargs/commit/14dbec24fb7380683198e2b20c4deb8423e64bea) Fixes issue #22. Arguments are no longer printed to the console when using .config. (@chevex)
|
||||
- [bef74fc](https://github.com/bcoe/yargs/commit/bef74fcddc1544598a804f80d0a3728459f196bf) Informing users that Yargs is the official optimist successor. (@chevex)
|
||||
- [#24](https://github.com/bcoe/yargs/pull/24) Merge pull request #24 from chrisn/strict (@chrisn)
|
||||
- [889a2b2](https://github.com/bcoe/yargs/commit/889a2b28eb9768801b05163360a470d0fd6c8b79) Added requiresArg option, for options that require values (@chrisn)
|
||||
- [eb16369](https://github.com/bcoe/yargs/commit/eb163692262be1fe80b992fd8803d5923c5a9b18) Added .strict() method, to report error if unknown arguments are given (@chrisn)
|
||||
- [0471c3f](https://github.com/bcoe/yargs/commit/0471c3fd999e1ad4e6cded88b8aa02013b66d14f) Changed optimist to yargs in usage-options.js example (@chrisn)
|
||||
- [5c88f74](https://github.com/bcoe/yargs/commit/5c88f74e3cf031b17c54b4b6606c83e485ff520e) Change optimist to yargs in examples (@chrisn)
|
||||
- [66f12c8](https://github.com/bcoe/yargs/commit/66f12c82ba3c943e4de8ca862980e835da8ecb3a) Fix a couple of bad interactions between aliases and defaults (@nylen)
|
||||
- [8fa1d80](https://github.com/bcoe/yargs/commit/8fa1d80f14b03eb1f2898863a61f1d1615bceb50) Document second argument of usage(message, opts) (@Gobie)
|
||||
- [56e6528](https://github.com/bcoe/yargs/commit/56e6528cf674ff70d63083fb044ff240f608448e) For "--some-option", also set argv.someOption (@nylen)
|
||||
- [ed5f6d3](https://github.com/bcoe/yargs/commit/ed5f6d33f57ad1086b11c91b51100f7c6c7fa8ee) Finished porting unit tests to Mocha. (@chevex)
|
||||
|
||||
### v1.0.15 (2014/02/05 23:18 +00:00)
|
||||
- [e2b1fc0](https://github.com/bcoe/yargs/commit/e2b1fc0c4a59cf532ae9b01b275e1ef57eeb64d2) 1.0.15 update to badges (@chevex)
|
||||
|
||||
### v1.0.14 (2014/02/05 23:17 +00:00)
|
||||
- [f33bbb0](https://github.com/bcoe/yargs/commit/f33bbb0f00fe18960f849cc8e15a7428a4cd59b8) Revert "Fixed issue which caused .demand function not to work correctly." (@chevex)
|
||||
|
||||
### v1.0.13 (2014/02/05 22:13 +00:00)
|
||||
- [6509e5e](https://github.com/bcoe/yargs/commit/6509e5e7dee6ef1a1f60eea104be0faa1a045075) Fixed issue which caused .demand function not to work correctly. (@chevex)
|
||||
|
||||
### v1.0.12 (2013/12/13 00:09 +00:00)
|
||||
- [05eb267](https://github.com/bcoe/yargs/commit/05eb26741c9ce446b33ff006e5d33221f53eaceb) 1.0.12 (@chevex)
|
||||
|
||||
### v1.0.11 (2013/12/13 00:07 +00:00)
|
||||
- [c1bde46](https://github.com/bcoe/yargs/commit/c1bde46e37318a68b87d17a50c130c861d6ce4a9) 1.0.11 (@chevex)
|
||||
|
||||
### v1.0.10 (2013/12/12 23:57 +00:00)
|
||||
- [dfebf81](https://github.com/bcoe/yargs/commit/dfebf8164c25c650701528ee581ca483a99dc21c) Fixed formatting in README (@chevex)
|
||||
|
||||
### v1.0.9 (2013/12/12 23:47 +00:00)
|
||||
- [0b4e34a](https://github.com/bcoe/yargs/commit/0b4e34af5e6d84a9dbb3bb6d02cd87588031c182) Update README.md (@chevex)
|
||||
|
||||
### v1.0.8 (2013/12/06 16:36 +00:00)
|
||||
- [#1](https://github.com/bcoe/yargs/pull/1) fix error caused by check() see #1 (@martinheidegger)
|
||||
|
||||
### v1.0.7 (2013/11/24 18:01 +00:00)
|
||||
- [a247d88](https://github.com/bcoe/yargs/commit/a247d88d6e46644cbb7303c18b1bb678fc132d72) Modified Pirate Joe image. (@chevex)
|
||||
|
||||
### v1.0.6 (2013/11/23 19:21 +00:00)
|
||||
- [d7f69e1](https://github.com/bcoe/yargs/commit/d7f69e1d34bc929736a8bdccdc724583e21b7eab) Updated Pirate Joe image. (@chevex)
|
||||
|
||||
### v1.0.5 (2013/11/23 19:09 +00:00)
|
||||
- [ece809c](https://github.com/bcoe/yargs/commit/ece809cf317cc659175e1d66d87f3ca68c2760be) Updated readme notice again. (@chevex)
|
||||
|
||||
### v1.0.4 (2013/11/23 19:05 +00:00)
|
||||
- [9e81e81](https://github.com/bcoe/yargs/commit/9e81e81654028f83ba86ffc3ac772a0476084e5e) Updated README with a notice about yargs being a fork of optimist and what that implies. (@chevex)
|
||||
|
||||
### v1.0.3 (2013/11/23 17:43 +00:00)
|
||||
- [65e7a78](https://github.com/bcoe/yargs/commit/65e7a782c86764944d63d084416aba9ee6019c5f) Changed some small wording in README.md. (@chevex)
|
||||
- [459e20e](https://github.com/bcoe/yargs/commit/459e20e539b366b85128dd281ccd42221e96c7da) Fix a bug in the options function, when string and boolean options weren't applied to aliases. (@shockone)
|
||||
|
||||
### v1.0.2 (2013/11/23 09:46 +00:00)
|
||||
- [3d80ebe](https://github.com/bcoe/yargs/commit/3d80ebed866d3799224b6f7d596247186a3898a9) 1.0.2 (@chevex)
|
||||
|
||||
### v1.0.1 (2013/11/23 09:39 +00:00)
|
||||
- [f80ff36](https://github.com/bcoe/yargs/commit/f80ff3642d580d4b68bf9f5a94277481bd027142) Updated image. (@chevex)
|
||||
|
||||
### v1.0.0 (2013/11/23 09:33 +00:00)
|
||||
- [54e31d5](https://github.com/bcoe/yargs/commit/54e31d505f820b80af13644e460894b320bf25a3) Rebranded from optimist to yargs in the spirit of the fork :D (@chevex)
|
||||
- [4ebb6c5](https://github.com/bcoe/yargs/commit/4ebb6c59f44787db7c24c5b8fe2680f01a23f498) Added documentation for demandCount(). (@chevex)
|
||||
- [4561ce6](https://github.com/bcoe/yargs/commit/4561ce66dcffa95f49e8b4449b25b94cd68acb25) Simplified the error messages returned by .check(). (@chevex)
|
||||
- [661c678](https://github.com/bcoe/yargs/commit/661c67886f479b16254a830b7e1db3be29e6b7a6) Fixed an issue with demand not accepting a zero value. (@chevex)
|
||||
- [731dd3c](https://github.com/bcoe/yargs/commit/731dd3c37624790490bd6df4d5f1da8f4348279e) Add .fail(fn) so death isn't the only option. Should fix issue #39. (@chevex)
|
||||
- [fa15417](https://github.com/bcoe/yargs/commit/fa15417ff9e70dace0d726627a5818654824c1d8) Added a few missing 'return self' (@chevex)
|
||||
- [e655e4d](https://github.com/bcoe/yargs/commit/e655e4d99d1ae1d3695ef755d51c2de08d669761) Fix showing help in certain JS environments. (@chevex)
|
||||
- [a746a31](https://github.com/bcoe/yargs/commit/a746a31cd47c87327028e6ea33762d6187ec5c87) Better string representation of default values. (@chevex)
|
||||
- [6134619](https://github.com/bcoe/yargs/commit/6134619a7e90b911d5443230b644c5d447c1a68c) Implies: conditional demands (@chevex)
|
||||
- [046b93b](https://github.com/bcoe/yargs/commit/046b93b5d40a27367af4cb29726e4d781d934639) Added support for JSON config files. (@chevex)
|
||||
- [a677ec0](https://github.com/bcoe/yargs/commit/a677ec0a0ecccd99c75e571d03323f950688da03) Add .example(cmd, desc) feature. (@chevex)
|
||||
- [1bd4375](https://github.com/bcoe/yargs/commit/1bd4375e11327ba1687d4bb6e5e9f3c30c1be2af) Added 'defaults' as alias to 'default' so as to avoid usage of a reserved keyword. (@chevex)
|
||||
- [6b753c1](https://github.com/bcoe/yargs/commit/6b753c16ca09e723060e70b773b430323b29c45c) add .normalize(args..) support for normalizing paths (@chevex)
|
||||
- [33d7d59](https://github.com/bcoe/yargs/commit/33d7d59341d364f03d3a25f0a55cb99004dbbe4b) Customize error messages with demand(key, msg) (@chevex)
|
||||
- [647d37f](https://github.com/bcoe/yargs/commit/647d37f164c20f4bafbf67dd9db6cd6e2cd3b49f) Merge branch 'rewrite-duplicate-test' of github.com:isbadawi/node-optimist (@chevex)
|
||||
- [9059d1a](https://github.com/bcoe/yargs/commit/9059d1ad5e8aea686c2a01c89a23efdf929fff2e) Pass aliases object to check functions for greater versatility. (@chevex)
|
||||
- [623dc26](https://github.com/bcoe/yargs/commit/623dc26c7331abff2465ef8532e3418996d42fe6) Added ability to count boolean options and rolled minimist library back into project. (@chevex)
|
||||
- [49f0dce](https://github.com/bcoe/yargs/commit/49f0dcef35de4db544c3966350d36eb5838703f6) Fixed small typo. (@chevex)
|
||||
- [79ec980](https://github.com/bcoe/yargs/commit/79ec9806d9ca6eb0014cfa4b6d1849f4f004baf2) Removed dependency on wordwrap module. (@chevex)
|
||||
- [ea14630](https://github.com/bcoe/yargs/commit/ea14630feddd69d1de99dd8c0e08948f4c91f00a) Merge branch 'master' of github.com:chbrown/node-optimist (@chevex)
|
||||
- [2b75da2](https://github.com/bcoe/yargs/commit/2b75da2624061e0f4f3107d20303c06ec9054906) Merge branch 'master' of github.com:seanzhou1023/node-optimist (@chevex)
|
||||
- [d9bda11](https://github.com/bcoe/yargs/commit/d9bda1116e26f3b40e833ca9ca19263afea53565) Merge branch 'patch-1' of github.com:thefourtheye/node-optimist (@chevex)
|
||||
- [d6cc606](https://github.com/bcoe/yargs/commit/d6cc6064a4f1bea38a16a4430b8a1334832fbeff) Renamed README. (@chevex)
|
||||
- [9498d3f](https://github.com/bcoe/yargs/commit/9498d3f59acfb5e102826503e681623c3a64b178) Renamed readme and added .gitignore. (@chevex)
|
||||
- [bbd1fe3](https://github.com/bcoe/yargs/commit/bbd1fe37fefa366dde0fb3dc44d91fe8b28f57f5) Included examples for ```help``` and ```showHelp``` functions and fixed few formatting issues (@thefourtheye)
|
||||
- [37fea04](https://github.com/bcoe/yargs/commit/37fea0470a5796a0294c1dcfff68d8041650e622) .alias({}) behaves differently based on mapping direction when generating descriptions (@chbrown)
|
||||
- [855b20d](https://github.com/bcoe/yargs/commit/855b20d0be567ca121d06b30bea64001b74f3d6d) Documented function signatures are useful for dynamically typed languages. (@chbrown)
|
||||
|
||||
### 0.6.0 (2013/06/25 08:48 +00:00)
|
||||
- [d37bfe0](https://github.com/bcoe/yargs/commit/d37bfe05ae6d295a0ab481efe4881222412791f4) all tests passing using minimist (@substack)
|
||||
- [76f1352](https://github.com/bcoe/yargs/commit/76f135270399d01f2bbc621e524a5966e5c422fd) all parse tests now passing (@substack)
|
||||
- [a7b6754](https://github.com/bcoe/yargs/commit/a7b6754276c38d1565479a5685c3781aeb947816) using minimist, some tests passing (@substack)
|
||||
- [6655688](https://github.com/bcoe/yargs/commit/66556882aa731cbbbe16cc4d42c85740a2e98099) Give credit where its due (@DeadAlready)
|
||||
- [602a2a9](https://github.com/bcoe/yargs/commit/602a2a92a459f93704794ad51b115bbb08b535ce) v0.5.3 - Remove wordwrap as dependency (@DeadAlready)
|
||||
|
||||
### 0.5.2 (2013/05/31 03:46 +00:00)
|
||||
- [4497ca5](https://github.com/bcoe/yargs/commit/4497ca55e332760a37b866ec119ded347ca27a87) fixed the whitespace bug without breaking anything else (@substack)
|
||||
- [5a3dd1a](https://github.com/bcoe/yargs/commit/5a3dd1a4e0211a38613c6e02f61328e1031953fa) failing test for whitespace arg (@substack)
|
||||
|
||||
### 0.5.1 (2013/05/30 07:17 +00:00)
|
||||
- [a20228f](https://github.com/bcoe/yargs/commit/a20228f62a454755dd07f628a7c5759113918327) fix parse() to work with functions before it (@substack)
|
||||
- [b13bd4c](https://github.com/bcoe/yargs/commit/b13bd4cac856a9821d42fa173bdb58f089365a7d) failing test for parse() with modifiers (@substack)
|
||||
|
||||
### 0.5.0 (2013/05/18 21:59 +00:00)
|
||||
- [c474a64](https://github.com/bcoe/yargs/commit/c474a649231527915c222156e3b40806d365a87c) fixes for dash (@substack)
|
||||
|
||||
### 0.4.0 (2013/04/13 19:03 +00:00)
|
||||
- [dafe3e1](https://github.com/bcoe/yargs/commit/dafe3e18d7c6e7c2d68e06559df0e5cbea3adb14) failing short test (@substack)
|
||||
|
||||
### 0.3.7 (2013/04/04 04:07 +00:00)
|
||||
- [6c7a0ec](https://github.com/bcoe/yargs/commit/6c7a0ec94ce4199a505f0518b4d6635d4e47cc81) Fix for windows. On windows there is no _ in environment. (@hdf)
|
||||
|
||||
### 0.3.6 (2013/04/04 04:04 +00:00)
|
||||
- [e72346a](https://github.com/bcoe/yargs/commit/e72346a727b7267af5aa008b418db89970873f05) Add support for newlines in -a="" arguments (@danielbeardsley)
|
||||
- [71e1fb5](https://github.com/bcoe/yargs/commit/71e1fb55ea9987110a669ac6ec12338cfff3821c) drop 0.4, add 0.8 to travis (@substack)
|
||||
|
||||
### 0.3.5 (2012/10/10 11:09 +00:00)
|
||||
- [ee692b3](https://github.com/bcoe/yargs/commit/ee692b37554c70a0bb16389a50a26b66745cbbea) Fix parsing booleans (@vojtajina)
|
||||
- [5045122](https://github.com/bcoe/yargs/commit/5045122664c3f5b4805addf1be2148d5856f7ce8) set $0 properly in the tests (@substack)
|
||||
|
||||
### 0.3.4 (2012/04/30 06:54 +00:00)
|
||||
- [f28c0e6](https://github.com/bcoe/yargs/commit/f28c0e62ca94f6e0bb2e6d82fc3d91a55e69b903) bump for string "true" params (@substack)
|
||||
- [8f44aeb](https://github.com/bcoe/yargs/commit/8f44aeb74121ddd689580e2bf74ef86a605e9bf2) Fix failing test for aliased booleans. (@coderarity)
|
||||
- [b9f7b61](https://github.com/bcoe/yargs/commit/b9f7b613b1e68e11e6c23fbda9e555a517dcc976) Add failing test for short aliased booleans. (@coderarity)
|
||||
|
||||
### 0.3.3 (2012/04/30 06:45 +00:00)
|
||||
- [541bac8](https://github.com/bcoe/yargs/commit/541bac8dd787a5f1a5d28f6d8deb1627871705e7) Fixes #37.
|
||||
|
||||
### 0.3.2 (2012/04/12 20:28 +00:00)
|
||||
- [3a0f014](https://github.com/bcoe/yargs/commit/3a0f014c1451280ac1c9caa1f639d31675586eec) travis badge (@substack)
|
||||
- [4fb60bf](https://github.com/bcoe/yargs/commit/4fb60bf17845f4ce3293f8ca49c9a1a7c736cfce) Fix boolean aliases. (@coderarity)
|
||||
- [f14dda5](https://github.com/bcoe/yargs/commit/f14dda546efc4fe06ace04d36919bfbb7634f79b) Adjusted package.json to use tap (@jfhbrook)
|
||||
- [88e5d32](https://github.com/bcoe/yargs/commit/88e5d32295be6e544c8d355ff84e355af38a1c74) test/usage.js no longer hangs (@jfhbrook)
|
||||
- [e1e740c](https://github.com/bcoe/yargs/commit/e1e740c27082f3ce84deca2093d9db2ef735d0e5) two tests for combined boolean/alias opts parsing (@jfhbrook)
|
||||
|
||||
### 0.3.1 (2011/12/31 08:44 +00:00)
|
||||
- [d09b719](https://github.com/bcoe/yargs/commit/d09b71980ef711b6cf3918cd19beec8257e40e82) If "default" is set to false it was not passed on, fixed. (@wolframkriesing)
|
||||
|
||||
### 0.3.0 (2011/12/09 06:03 +00:00)
|
||||
- [6e74aa7](https://github.com/bcoe/yargs/commit/6e74aa7b46a65773e20c0cb68d2d336d4a0d553d) bump and documented dot notation (@substack)
|
||||
|
||||
### 0.2.7 (2011/10/20 02:25 +00:00)
|
||||
- [94adee2](https://github.com/bcoe/yargs/commit/94adee20e17b58d0836f80e8b9cdbe9813800916) argv._ can be told 'Hey! argv._! Don't be messing with my args.', and it WILL obey (@colinta)
|
||||
- [c46fdd5](https://github.com/bcoe/yargs/commit/c46fdd56a05410ae4a1e724a4820c82e77ff5469) optimistic critter image (@substack)
|
||||
- [5c95c73](https://github.com/bcoe/yargs/commit/5c95c73aedf4c7482bd423e10c545e86d7c8a125) alias options() to option() (@substack)
|
||||
- [f7692ea](https://github.com/bcoe/yargs/commit/f7692ea8da342850af819367833abb685fde41d8) [fix] Fix for parsing boolean edge case (@indexzero)
|
||||
- [d1f92d1](https://github.com/bcoe/yargs/commit/d1f92d1425bd7f356055e78621b30cdf9741a3c2)
|
||||
- [b01bda8](https://github.com/bcoe/yargs/commit/b01bda8d86e455bbf74ce497864cb8ab5b9fb847) [fix test] Update to ensure optimist is aware of default booleans. Associated tests included (@indexzero)
|
||||
- [aa753e7](https://github.com/bcoe/yargs/commit/aa753e7c54fb3a12f513769a0ff6d54aa0f63943) [dist test] Update devDependencies in package.json. Update test pathing to be more npm and require.paths future-proof (@indexzero)
|
||||
- [7bfce2f](https://github.com/bcoe/yargs/commit/7bfce2f3b3c98e6539e7549d35fbabced7e9341e) s/sys/util/ (@substack)
|
||||
- [d420a7a](https://github.com/bcoe/yargs/commit/d420a7a9c890d2cdb11acfaf3ea3f43bc3e39f41) update usage output (@substack)
|
||||
- [cf86eed](https://github.com/bcoe/yargs/commit/cf86eede2e5fc7495b6ec15e6d137d9ac814f075) some sage readme protips about parsing rules (@substack)
|
||||
- [5da9f7a](https://github.com/bcoe/yargs/commit/5da9f7a5c0e1758ec7c5801fb3e94d3f6e970513) documented all the methods finally (@substack)
|
||||
- [8ca6879](https://github.com/bcoe/yargs/commit/8ca6879311224b25933642987300f6a29de5c21b) fenced syntax highlighting (@substack)
|
||||
- [b72bacf](https://github.com/bcoe/yargs/commit/b72bacf1d02594778c1935405bc8137eb61761dc) right-alignment of wrapped extra params (@substack)
|
||||
- [2b980bf](https://github.com/bcoe/yargs/commit/2b980bf2656b4ee8fc5134dc5f56a48855c35198) now with .wrap() (@substack)
|
||||
- [d614f63](https://github.com/bcoe/yargs/commit/d614f639654057d1b7e35e3f5a306e88ec2ad1e4) don't show 'Options:' when there aren't any (@substack)
|
||||
- [691eda3](https://github.com/bcoe/yargs/commit/691eda354df97b5a86168317abcbcaabdc08a0fb) failing test for multi-aliasing (@substack)
|
||||
- [0826c9f](https://github.com/bcoe/yargs/commit/0826c9f462109feab2bc7a99346d22e72bf774b7) "Options:" > "options:" (@substack)
|
||||
- [72f7490](https://github.com/bcoe/yargs/commit/72f749025d01b7f295738ed370a669d885fbada0) [minor] Update formatting for `.showHelp()` (@indexzero)
|
||||
- [75aecce](https://github.com/bcoe/yargs/commit/75aeccea74329094072f95800e02c275e7d999aa) options works again, too lazy to write a proper test right now (@substack)
|
||||
- [f742e54](https://github.com/bcoe/yargs/commit/f742e5439817c662dc3bd8734ddd6467e6018cfd) line_count_options example, which breaks (@substack)
|
||||
- [4ca06b8](https://github.com/bcoe/yargs/commit/4ca06b8b4ea99b5d5714b315a2a8576bee6e5537) line count example (@substack)
|
||||
- [eeb8423](https://github.com/bcoe/yargs/commit/eeb8423e0a5ecc9dc3eb1e6df9f3f8c1c88f920b) remove self.argv setting in boolean (@substack)
|
||||
- [6903412](https://github.com/bcoe/yargs/commit/69034126804660af9cc20ea7f4457b50338ee3d7) removed camel case for now (@substack)
|
||||
- [5a0d88b](https://github.com/bcoe/yargs/commit/5a0d88bf23e9fa79635dd034e2a1aa992acc83cd) remove dead longest checking code (@substack)
|
||||
- [d782170](https://github.com/bcoe/yargs/commit/d782170babf7284b1aa34f5350df0dd49c373fa8) .help() too (@substack)
|
||||
- [622ec17](https://github.com/bcoe/yargs/commit/622ec17379bb5374fdbb190404c82bc600975791) rm old help generator (@substack)
|
||||
- [7c8baac](https://github.com/bcoe/yargs/commit/7c8baac4d66195e9f5158503ea9ebfb61153dab7) nub keys (@substack)
|
||||
- [8197785](https://github.com/bcoe/yargs/commit/8197785ad4762465084485b041abd722f69bf344) generate help message based on the previous calls, todo: nub (@substack)
|
||||
- [3ffbdc3](https://github.com/bcoe/yargs/commit/3ffbdc33c8f5e83d4ea2ac60575ce119570c7ede) stub out new showHelp, better checks (@substack)
|
||||
- [d4e21f5](https://github.com/bcoe/yargs/commit/d4e21f56a4830f7de841900d3c79756fb9886184) let .options() take single options too (@substack)
|
||||
- [3c4cf29](https://github.com/bcoe/yargs/commit/3c4cf2901a29bac119cca8e983028d8669230ec6) .options() is now heaps simpler (@substack)
|
||||
- [89f0d04](https://github.com/bcoe/yargs/commit/89f0d043cbccd302f10ab30c2069e05d2bf817c9) defaults work again, all tests pass (@substack)
|
||||
- [dd87333](https://github.com/bcoe/yargs/commit/dd8733365423006a6e4156372ebb55f98323af58) update test error messages, down to 2 failing tests (@substack)
|
||||
- [53f7bc6](https://github.com/bcoe/yargs/commit/53f7bc626b9875f2abdfc5dd7a80bde7f14143a3) fix for bools doubling up, passes the parse test again, others fail (@substack)
|
||||
- [2213e2d](https://github.com/bcoe/yargs/commit/2213e2ddc7263226fba717fb041dc3fde9bc2ee4) refactored for an argv getter, failing several tests (@substack)
|
||||
- [d1e7379](https://github.com/bcoe/yargs/commit/d1e737970f15c6c006bebdd8917706827ff2f0f2) just rescan for now, alias test passes (@substack)
|
||||
- [b2f8c99](https://github.com/bcoe/yargs/commit/b2f8c99cc477a8eb0fdf4cf178e1785b63185cfd) failing alias test (@substack)
|
||||
- [d0c0174](https://github.com/bcoe/yargs/commit/d0c0174daa144bfb6dc7290fdc448c393c475e15) .alias() (@substack)
|
||||
- [d85f431](https://github.com/bcoe/yargs/commit/d85f431ad7d07b058af3f2a57daa51495576c164) [api] Remove `.describe()` in favor of building upon the existing `.usage()` API (@indexzero)
|
||||
- [edbd527](https://github.com/bcoe/yargs/commit/edbd5272a8e213e71acd802782135c7f9699913a) [doc api] Add `.describe()`, `.options()`, and `.showHelp()` methods along with example. (@indexzero)
|
||||
- [be4902f](https://github.com/bcoe/yargs/commit/be4902ff0961ae8feb9093f2c0a4066463ded2cf) updates for coffee since it now does argv the node way (@substack)
|
||||
- [e24cb23](https://github.com/bcoe/yargs/commit/e24cb23798ee64e53b60815e7fda78b87f42390c) more general coffeescript detection (@substack)
|
||||
- [78ac753](https://github.com/bcoe/yargs/commit/78ac753e5d0ec32a96d39d893272afe989e42a4d) Don't trigger the CoffeeScript hack when running under node_g. (@papandreou)
|
||||
- [bcfe973](https://github.com/bcoe/yargs/commit/bcfe9731d7f90d4632281b8a52e8d76eb0195ae6) .string() but failing test (@substack)
|
||||
- [1987aca](https://github.com/bcoe/yargs/commit/1987aca28c7ba4e8796c07bbc547cb984804c826) test hex strings (@substack)
|
||||
- [ef36db3](https://github.com/bcoe/yargs/commit/ef36db32259b0b0d62448dc907c760e5554fb7e7) more keywords (@substack)
|
||||
- [cc53c56](https://github.com/bcoe/yargs/commit/cc53c56329960bed6ab077a79798e991711ba01d) Added camelCase function that converts --multi-word-option to camel case (so it becomes argv.multiWordOption). (@papandreou)
|
||||
- [60b57da](https://github.com/bcoe/yargs/commit/60b57da36797716e5783a633c6d5c79099016d45) fixed boolean bug by rescanning (@substack)
|
||||
- [dff6d07](https://github.com/bcoe/yargs/commit/dff6d078d97f8ac503c7d18dcc7b7a8c364c2883) boolean examples (@substack)
|
||||
- [0e380b9](https://github.com/bcoe/yargs/commit/0e380b92c4ef4e3c8dac1da18b5c31d85b1d02c9) boolean() with passing test (@substack)
|
||||
- [62644d4](https://github.com/bcoe/yargs/commit/62644d4bffbb8d1bbf0c2baf58a1d14a6359ef07) coffee compatibility with node regex for versions too (@substack)
|
||||
- [430fafc](https://github.com/bcoe/yargs/commit/430fafcf1683d23774772826581acff84b456827) argv._ fixed by fixing the coffee detection (@substack)
|
||||
- [343b8af](https://github.com/bcoe/yargs/commit/343b8afefd98af274ebe21b5a16b3a949ec5429f) whichNodeArgs test fails too (@substack)
|
||||
- [63df2f3](https://github.com/bcoe/yargs/commit/63df2f371f31e63d7f1dec2cbf0022a5f08da9d2) replicated mnot's bug in whichNodeEmpty test (@substack)
|
||||
- [35473a4](https://github.com/bcoe/yargs/commit/35473a4d93a45e5e7e512af8bb54ebb532997ae1) test for ./bin usage (@substack)
|
||||
- [13df151](https://github.com/bcoe/yargs/commit/13df151e44228eed10e5441c7cd163e086c458a4) don't coerce booleans to numbers (@substack)
|
||||
- [85f8007](https://github.com/bcoe/yargs/commit/85f8007e93b8be7124feea64b1f1916d8ba1894a) package bump for automatic number conversion (@substack)
|
||||
- [8f17014](https://github.com/bcoe/yargs/commit/8f170141cded4ccc0c6d67a849c5bf996aa29643) updated readme and examples with new auto-numberification goodness (@substack)
|
||||
- [73dc901](https://github.com/bcoe/yargs/commit/73dc9011ac968e39b55e19e916084a839391b506) auto number conversion works yay (@substack)
|
||||
- [bcec56b](https://github.com/bcoe/yargs/commit/bcec56b3d031e018064cbb691539ccc4f28c14ad) failing test for not-implemented auto numification (@substack)
|
||||
- [ebd2844](https://github.com/bcoe/yargs/commit/ebd2844d683feeac583df79af0e5124a7a7db04e) odd that eql doesn't check types careflly (@substack)
|
||||
- [fd854b0](https://github.com/bcoe/yargs/commit/fd854b02e512ce854b76386d395672a7969c1bc4) package author + keywords (@substack)
|
||||
- [656a1d5](https://github.com/bcoe/yargs/commit/656a1d5a1b7c0e49d72e80cb13f20671d56f76c6) updated readme with .default() stuff (@substack)
|
||||
- [cd7f8c5](https://github.com/bcoe/yargs/commit/cd7f8c55f0b82b79b690d14c5f806851236998a1) passing tests for new .default() behavior (@substack)
|
||||
- [932725e](https://github.com/bcoe/yargs/commit/932725e39ce65bc91a0385a5fab659a5fa976ac2) new default() thing for setting default key/values (@substack)
|
||||
- [4e6c7ab](https://github.com/bcoe/yargs/commit/4e6c7aba6374ac9ebc6259ecf91f13af7bce40e3) test for coffee usage (@substack)
|
||||
- [d54ffcc](https://github.com/bcoe/yargs/commit/d54ffccf2a5a905f51ed5108f7c647f35d64ae23) new --key value style with passing tests. NOTE: changes existing behavior (@substack)
|
||||
- [ed2a2d5](https://github.com/bcoe/yargs/commit/ed2a2d5d828100ebeef6385c0fb88d146a5cfe9b) package bump for summatix's coffee script fix (@substack)
|
||||
- [75a975e](https://github.com/bcoe/yargs/commit/75a975eed8430d28e2a79dc9e6d819ad545f4587) Added support for CoffeeScript (@summatix)
|
||||
- [56b2b1d](https://github.com/bcoe/yargs/commit/56b2b1de8d11f8a2b91979d8ae2d6db02d8fe64d) test coverage for the falsy check() usage (@substack)
|
||||
- [a4843a9](https://github.com/bcoe/yargs/commit/a4843a9f0e69ffb4afdf6a671d89eb6f218be35d) check bug fixed plus a handy string (@substack)
|
||||
- [857bd2d](https://github.com/bcoe/yargs/commit/857bd2db933a5aaa9cfecba0ced2dc9b415f8111) tests for demandCount, back up to 100% coverage (@substack)
|
||||
- [073b776](https://github.com/bcoe/yargs/commit/073b7768ebd781668ef05c13f9003aceca2f5c35) call demandCount from demand (@substack)
|
||||
- [4bd4b7a](https://github.com/bcoe/yargs/commit/4bd4b7a085c8b6ce1d885a0f486cc9865cee2db1) add demandCount to check for the number of arguments in the _ list (@marshall)
|
||||
- [b8689ac](https://github.com/bcoe/yargs/commit/b8689ac68dacf248119d242bba39a41cb0adfa07) Rebase checks. That will be its own module eventually. (@substack)
|
||||
- [e688370](https://github.com/bcoe/yargs/commit/e688370b576f0aa733c3f46183df69e1b561668e) a $0 like in perl (@substack)
|
||||
- [2e5e196](https://github.com/bcoe/yargs/commit/2e5e1960fc19afb21fb3293752316eaa8bcd3609) usage test hacking around process and console (@substack)
|
||||
- [fcc3521](https://github.com/bcoe/yargs/commit/fcc352163fbec6a1dfe8caf47a0df39de24fe016) description pun (@substack)
|
||||
- [87a1fe2](https://github.com/bcoe/yargs/commit/87a1fe29037ca2ca5fefda85141aaeb13e8ce761) mit/x11 license (@substack)
|
||||
- [8d089d2](https://github.com/bcoe/yargs/commit/8d089d24cd687c0bde3640a96c09b78f884900dd) bool example is more consistent and also shows off short option grouping (@substack)
|
||||
- [448d747](https://github.com/bcoe/yargs/commit/448d7473ac68e8e03d8befc9457b0d9e21725be0) start of the readme and examples (@substack)
|
||||
- [da74dea](https://github.com/bcoe/yargs/commit/da74dea799a9b59dbf022cbb8001bfdb0d52eec9) more tests for long and short captures (@substack)
|
||||
- [ab6387e](https://github.com/bcoe/yargs/commit/ab6387e6769ca4af82ca94c4c67c7319f0d9fcfa) silly bug in the tests with s/not/no/, all tests pass now (@substack)
|
||||
- [102496a](https://github.com/bcoe/yargs/commit/102496a319e8e06f6550d828fc2f72992c7d9ecc) hack an instance for process.argv onto Argv so the export can be called to create an instance or used for argv, which is the most common case (@substack)
|
||||
- [a01caeb](https://github.com/bcoe/yargs/commit/a01caeb532546d19f68f2b2b87f7036cfe1aaedd) divide example (@substack)
|
||||
- [443da55](https://github.com/bcoe/yargs/commit/443da55736acbaf8ff8b04d1b9ce19ab016ddda2) start of the lib with a package.json (@substack)
|
21
node_modules/doiuse/node_modules/yargs/LICENSE
generated
vendored
Normal file
21
node_modules/doiuse/node_modules/yargs/LICENSE
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
Copyright 2010 James Halliday (mail@substack.net)
|
||||
|
||||
This project is free software released under the MIT/X11 license:
|
||||
|
||||
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.
|
1243
node_modules/doiuse/node_modules/yargs/README.md
generated
vendored
Normal file
1243
node_modules/doiuse/node_modules/yargs/README.md
generated
vendored
Normal file
File diff suppressed because it is too large
Load Diff
28
node_modules/doiuse/node_modules/yargs/completion.sh.hbs
generated
vendored
Normal file
28
node_modules/doiuse/node_modules/yargs/completion.sh.hbs
generated
vendored
Normal file
@@ -0,0 +1,28 @@
|
||||
###-begin-{{app_name}}-completions-###
|
||||
#
|
||||
# yargs command completion script
|
||||
#
|
||||
# Installation: {{app_path}} completion >> ~/.bashrc
|
||||
# or {{app_path}} completion >> ~/.bash_profile on OSX.
|
||||
#
|
||||
_yargs_completions()
|
||||
{
|
||||
local cur_word args type_list
|
||||
|
||||
cur_word="${COMP_WORDS[COMP_CWORD]}"
|
||||
args=$(printf "%s " "${COMP_WORDS[@]}")
|
||||
|
||||
# ask yargs to generate completions.
|
||||
type_list=`{{app_path}} --get-yargs-completions $args`
|
||||
|
||||
COMPREPLY=( $(compgen -W "${type_list}" -- ${cur_word}) )
|
||||
|
||||
# if no match was found, fall back to filename completion
|
||||
if [ ${#COMPREPLY[@]} -eq 0 ]; then
|
||||
COMPREPLY=( $(compgen -f -- "${cur_word}" ) )
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
complete -F _yargs_completions {{app_name}}
|
||||
###-end-{{app_name}}-completions-###
|
665
node_modules/doiuse/node_modules/yargs/index.js
generated
vendored
Normal file
665
node_modules/doiuse/node_modules/yargs/index.js
generated
vendored
Normal file
@@ -0,0 +1,665 @@
|
||||
var assert = require('assert')
|
||||
var Completion = require('./lib/completion')
|
||||
var Parser = require('./lib/parser')
|
||||
var path = require('path')
|
||||
var tokenizeArgString = require('./lib/tokenize-arg-string')
|
||||
var Usage = require('./lib/usage')
|
||||
var Validation = require('./lib/validation')
|
||||
var Y18n = require('y18n')
|
||||
|
||||
Argv(process.argv.slice(2))
|
||||
|
||||
var exports = module.exports = Argv
|
||||
function Argv (processArgs, cwd) {
|
||||
processArgs = processArgs || [] // handle calling yargs().
|
||||
|
||||
var self = {}
|
||||
var completion = null
|
||||
var usage = null
|
||||
var validation = null
|
||||
var y18n = Y18n({
|
||||
directory: path.resolve(__dirname, './locales'),
|
||||
updateFiles: false
|
||||
})
|
||||
|
||||
if (!cwd) cwd = process.cwd()
|
||||
|
||||
self.$0 = process.argv
|
||||
.slice(0, 2)
|
||||
.map(function (x, i) {
|
||||
// ignore the node bin, specify this in your
|
||||
// bin file with #!/usr/bin/env node
|
||||
if (i === 0 && /\b(node|iojs)$/.test(x)) return
|
||||
var b = rebase(cwd, x)
|
||||
return x.match(/^\//) && b.length < x.length ? b : x
|
||||
})
|
||||
.join(' ').trim()
|
||||
|
||||
if (process.env._ !== undefined && process.argv[1] === process.env._) {
|
||||
self.$0 = process.env._.replace(
|
||||
path.dirname(process.execPath) + '/', ''
|
||||
)
|
||||
}
|
||||
|
||||
var options
|
||||
self.resetOptions = self.reset = function () {
|
||||
// put yargs back into its initial
|
||||
// state, this is useful for creating a
|
||||
// nested CLI.
|
||||
options = {
|
||||
array: [],
|
||||
boolean: [],
|
||||
string: [],
|
||||
narg: {},
|
||||
key: {},
|
||||
alias: {},
|
||||
default: {},
|
||||
defaultDescription: {},
|
||||
choices: {},
|
||||
requiresArg: [],
|
||||
count: [],
|
||||
normalize: [],
|
||||
config: {},
|
||||
envPrefix: undefined
|
||||
}
|
||||
|
||||
usage = Usage(self, y18n) // handle usage output.
|
||||
validation = Validation(self, usage, y18n) // handle arg validation.
|
||||
completion = Completion(self, usage)
|
||||
|
||||
demanded = {}
|
||||
groups = {}
|
||||
|
||||
exitProcess = true
|
||||
strict = false
|
||||
helpOpt = null
|
||||
versionOpt = null
|
||||
commandHandlers = {}
|
||||
self.parsed = false
|
||||
|
||||
return self
|
||||
}
|
||||
self.resetOptions()
|
||||
|
||||
self.boolean = function (bools) {
|
||||
options.boolean.push.apply(options.boolean, [].concat(bools))
|
||||
return self
|
||||
}
|
||||
|
||||
self.array = function (arrays) {
|
||||
options.array.push.apply(options.array, [].concat(arrays))
|
||||
return self
|
||||
}
|
||||
|
||||
self.nargs = function (key, n) {
|
||||
if (typeof key === 'object') {
|
||||
Object.keys(key).forEach(function (k) {
|
||||
self.nargs(k, key[k])
|
||||
})
|
||||
} else {
|
||||
options.narg[key] = n
|
||||
}
|
||||
return self
|
||||
}
|
||||
|
||||
self.choices = function (key, values) {
|
||||
if (typeof key === 'object') {
|
||||
Object.keys(key).forEach(function (k) {
|
||||
self.choices(k, key[k])
|
||||
})
|
||||
} else {
|
||||
options.choices[key] = (options.choices[key] || []).concat(values)
|
||||
}
|
||||
return self
|
||||
}
|
||||
|
||||
self.normalize = function (strings) {
|
||||
options.normalize.push.apply(options.normalize, [].concat(strings))
|
||||
return self
|
||||
}
|
||||
|
||||
self.config = function (key, msg, parseFn) {
|
||||
if (typeof msg === 'function') {
|
||||
parseFn = msg
|
||||
msg = null
|
||||
}
|
||||
self.describe(key, msg || usage.deferY18nLookup('Path to JSON config file'))
|
||||
;(Array.isArray(key) ? key : [key]).forEach(function (k) {
|
||||
options.config[k] = parseFn || true
|
||||
})
|
||||
return self
|
||||
}
|
||||
|
||||
self.example = function (cmd, description) {
|
||||
usage.example(cmd, description)
|
||||
return self
|
||||
}
|
||||
|
||||
self.command = function (cmd, description, fn) {
|
||||
if (description !== false) {
|
||||
usage.command(cmd, description)
|
||||
}
|
||||
if (fn) commandHandlers[cmd] = fn
|
||||
return self
|
||||
}
|
||||
|
||||
var commandHandlers = {}
|
||||
self.getCommandHandlers = function () {
|
||||
return commandHandlers
|
||||
}
|
||||
|
||||
self.string = function (strings) {
|
||||
options.string.push.apply(options.string, [].concat(strings))
|
||||
return self
|
||||
}
|
||||
|
||||
self.default = function (key, value, defaultDescription) {
|
||||
if (typeof key === 'object') {
|
||||
Object.keys(key).forEach(function (k) {
|
||||
self.default(k, key[k])
|
||||
})
|
||||
} else {
|
||||
if (defaultDescription) options.defaultDescription[key] = defaultDescription
|
||||
if (typeof value === 'function') {
|
||||
if (!options.defaultDescription[key]) options.defaultDescription[key] = usage.functionDescription(value)
|
||||
value = value.call()
|
||||
}
|
||||
options.default[key] = value
|
||||
}
|
||||
return self
|
||||
}
|
||||
|
||||
self.alias = function (x, y) {
|
||||
if (typeof x === 'object') {
|
||||
Object.keys(x).forEach(function (key) {
|
||||
self.alias(key, x[key])
|
||||
})
|
||||
} else {
|
||||
// perhaps 'x' is already an alias in another list?
|
||||
// if so we should append to x's list.
|
||||
var aliases = null
|
||||
Object.keys(options.alias).forEach(function (key) {
|
||||
if (~options.alias[key].indexOf(x)) aliases = options.alias[key]
|
||||
})
|
||||
|
||||
if (aliases) { // x was an alias itself.
|
||||
aliases.push(y)
|
||||
} else { // x is a new alias key.
|
||||
options.alias[x] = (options.alias[x] || []).concat(y)
|
||||
}
|
||||
|
||||
// wait! perhaps we've created two lists of aliases
|
||||
// that reference each other?
|
||||
if (options.alias[y]) {
|
||||
Array.prototype.push.apply((options.alias[x] || aliases), options.alias[y])
|
||||
delete options.alias[y]
|
||||
}
|
||||
}
|
||||
return self
|
||||
}
|
||||
|
||||
self.count = function (counts) {
|
||||
options.count.push.apply(options.count, [].concat(counts))
|
||||
return self
|
||||
}
|
||||
|
||||
var demanded = {}
|
||||
self.demand = self.required = self.require = function (keys, max, msg) {
|
||||
// you can optionally provide a 'max' key,
|
||||
// which will raise an exception if too many '_'
|
||||
// options are provided.
|
||||
if (typeof max !== 'number') {
|
||||
msg = max
|
||||
max = Infinity
|
||||
}
|
||||
|
||||
if (typeof keys === 'number') {
|
||||
if (!demanded._) demanded._ = { count: 0, msg: null, max: max }
|
||||
demanded._.count = keys
|
||||
demanded._.msg = msg
|
||||
} else if (Array.isArray(keys)) {
|
||||
keys.forEach(function (key) {
|
||||
self.demand(key, msg)
|
||||
})
|
||||
} else {
|
||||
if (typeof msg === 'string') {
|
||||
demanded[keys] = { msg: msg }
|
||||
} else if (msg === true || typeof msg === 'undefined') {
|
||||
demanded[keys] = { msg: undefined }
|
||||
}
|
||||
}
|
||||
|
||||
return self
|
||||
}
|
||||
self.getDemanded = function () {
|
||||
return demanded
|
||||
}
|
||||
|
||||
self.requiresArg = function (requiresArgs) {
|
||||
options.requiresArg.push.apply(options.requiresArg, [].concat(requiresArgs))
|
||||
return self
|
||||
}
|
||||
|
||||
self.implies = function (key, value) {
|
||||
validation.implies(key, value)
|
||||
return self
|
||||
}
|
||||
|
||||
self.usage = function (msg, opts) {
|
||||
if (!opts && typeof msg === 'object') {
|
||||
opts = msg
|
||||
msg = null
|
||||
}
|
||||
|
||||
usage.usage(msg)
|
||||
|
||||
if (opts) self.options(opts)
|
||||
|
||||
return self
|
||||
}
|
||||
|
||||
self.epilogue = self.epilog = function (msg) {
|
||||
usage.epilog(msg)
|
||||
return self
|
||||
}
|
||||
|
||||
self.fail = function (f) {
|
||||
usage.failFn(f)
|
||||
return self
|
||||
}
|
||||
|
||||
self.check = function (f) {
|
||||
validation.check(f)
|
||||
return self
|
||||
}
|
||||
|
||||
self.defaults = self.default
|
||||
|
||||
self.describe = function (key, desc) {
|
||||
options.key[key] = true
|
||||
usage.describe(key, desc)
|
||||
return self
|
||||
}
|
||||
|
||||
self.parse = function (args) {
|
||||
return parseArgs(args)
|
||||
}
|
||||
|
||||
self.option = self.options = function (key, opt) {
|
||||
if (typeof key === 'object') {
|
||||
Object.keys(key).forEach(function (k) {
|
||||
self.options(k, key[k])
|
||||
})
|
||||
} else {
|
||||
assert(typeof opt === 'object', 'second argument to option must be an object')
|
||||
|
||||
options.key[key] = true // track manually set keys.
|
||||
|
||||
if (opt.alias) self.alias(key, opt.alias)
|
||||
|
||||
var demand = opt.demand || opt.required || opt.require
|
||||
|
||||
if (demand) {
|
||||
self.demand(key, demand)
|
||||
} if ('config' in opt) {
|
||||
self.config(key, opt.configParser)
|
||||
} if ('default' in opt) {
|
||||
self.default(key, opt.default)
|
||||
} if ('nargs' in opt) {
|
||||
self.nargs(key, opt.nargs)
|
||||
} if ('choices' in opt) {
|
||||
self.choices(key, opt.choices)
|
||||
} if ('group' in opt) {
|
||||
self.group(key, opt.group)
|
||||
} if (opt.boolean || opt.type === 'boolean') {
|
||||
self.boolean(key)
|
||||
if (opt.alias) self.boolean(opt.alias)
|
||||
} if (opt.array || opt.type === 'array') {
|
||||
self.array(key)
|
||||
if (opt.alias) self.array(opt.alias)
|
||||
} if (opt.string || opt.type === 'string') {
|
||||
self.string(key)
|
||||
if (opt.alias) self.string(opt.alias)
|
||||
} if (opt.count || opt.type === 'count') {
|
||||
self.count(key)
|
||||
} if (opt.defaultDescription) {
|
||||
options.defaultDescription[key] = opt.defaultDescription
|
||||
}
|
||||
|
||||
var desc = opt.describe || opt.description || opt.desc
|
||||
if (desc) {
|
||||
self.describe(key, desc)
|
||||
}
|
||||
|
||||
if (opt.requiresArg) {
|
||||
self.requiresArg(key)
|
||||
}
|
||||
}
|
||||
|
||||
return self
|
||||
}
|
||||
self.getOptions = function () {
|
||||
return options
|
||||
}
|
||||
|
||||
var groups = {}
|
||||
self.group = function (opts, groupName) {
|
||||
var seen = {}
|
||||
groups[groupName] = (groups[groupName] || []).concat(opts).filter(function (key) {
|
||||
if (seen[key]) return false
|
||||
return (seen[key] = true)
|
||||
})
|
||||
return self
|
||||
}
|
||||
self.getGroups = function () {
|
||||
return groups
|
||||
}
|
||||
|
||||
// as long as options.envPrefix is not undefined,
|
||||
// parser will apply env vars matching prefix to argv
|
||||
self.env = function (prefix) {
|
||||
if (prefix === false) options.envPrefix = undefined
|
||||
else options.envPrefix = prefix || ''
|
||||
return self
|
||||
}
|
||||
|
||||
self.wrap = function (cols) {
|
||||
usage.wrap(cols)
|
||||
return self
|
||||
}
|
||||
|
||||
var strict = false
|
||||
self.strict = function () {
|
||||
strict = true
|
||||
return self
|
||||
}
|
||||
self.getStrict = function () {
|
||||
return strict
|
||||
}
|
||||
|
||||
self.showHelp = function (level) {
|
||||
if (!self.parsed) parseArgs(processArgs) // run parser, if it has not already been executed.
|
||||
usage.showHelp(level)
|
||||
return self
|
||||
}
|
||||
|
||||
var versionOpt = null
|
||||
self.version = function (ver, opt, msg) {
|
||||
versionOpt = opt || 'version'
|
||||
usage.version(ver)
|
||||
self.boolean(versionOpt)
|
||||
self.describe(versionOpt, msg || usage.deferY18nLookup('Show version number'))
|
||||
return self
|
||||
}
|
||||
|
||||
var helpOpt = null
|
||||
self.addHelpOpt = function (opt, msg) {
|
||||
helpOpt = opt
|
||||
self.boolean(opt)
|
||||
self.describe(opt, msg || usage.deferY18nLookup('Show help'))
|
||||
return self
|
||||
}
|
||||
|
||||
self.showHelpOnFail = function (enabled, message) {
|
||||
usage.showHelpOnFail(enabled, message)
|
||||
return self
|
||||
}
|
||||
|
||||
var exitProcess = true
|
||||
self.exitProcess = function (enabled) {
|
||||
if (typeof enabled !== 'boolean') {
|
||||
enabled = true
|
||||
}
|
||||
exitProcess = enabled
|
||||
return self
|
||||
}
|
||||
self.getExitProcess = function () {
|
||||
return exitProcess
|
||||
}
|
||||
|
||||
self.help = function () {
|
||||
if (arguments.length > 0) return self.addHelpOpt.apply(self, arguments)
|
||||
|
||||
if (!self.parsed) parseArgs(processArgs) // run parser, if it has not already been executed.
|
||||
|
||||
return usage.help()
|
||||
}
|
||||
|
||||
var completionCommand = null
|
||||
self.completion = function (cmd, desc, fn) {
|
||||
// a function to execute when generating
|
||||
// completions can be provided as the second
|
||||
// or third argument to completion.
|
||||
if (typeof desc === 'function') {
|
||||
fn = desc
|
||||
desc = null
|
||||
}
|
||||
|
||||
// register the completion command.
|
||||
completionCommand = cmd || 'completion'
|
||||
if (!desc && desc !== false) {
|
||||
desc = 'generate bash completion script'
|
||||
}
|
||||
self.command(completionCommand, desc)
|
||||
|
||||
// a function can be provided
|
||||
if (fn) completion.registerFunction(fn)
|
||||
|
||||
return self
|
||||
}
|
||||
|
||||
self.showCompletionScript = function ($0) {
|
||||
$0 = $0 || self.$0
|
||||
console.log(completion.generateCompletionScript($0))
|
||||
return self
|
||||
}
|
||||
|
||||
self.locale = function (locale) {
|
||||
if (arguments.length === 0) {
|
||||
guessLocale()
|
||||
return y18n.getLocale()
|
||||
}
|
||||
detectLocale = false
|
||||
y18n.setLocale(locale)
|
||||
return self
|
||||
}
|
||||
|
||||
self.updateStrings = self.updateLocale = function (obj) {
|
||||
detectLocale = false
|
||||
y18n.updateLocale(obj)
|
||||
return self
|
||||
}
|
||||
|
||||
var detectLocale = true
|
||||
self.detectLocale = function (detect) {
|
||||
detectLocale = detect
|
||||
return self
|
||||
}
|
||||
self.getDetectLocale = function () {
|
||||
return detectLocale
|
||||
}
|
||||
|
||||
self.getUsageInstance = function () {
|
||||
return usage
|
||||
}
|
||||
|
||||
self.getValidationInstance = function () {
|
||||
return validation
|
||||
}
|
||||
|
||||
self.terminalWidth = function () {
|
||||
return require('window-size').width
|
||||
}
|
||||
|
||||
Object.defineProperty(self, 'argv', {
|
||||
get: function () {
|
||||
var args = null
|
||||
|
||||
try {
|
||||
args = parseArgs(processArgs)
|
||||
} catch (err) {
|
||||
usage.fail(err.message)
|
||||
}
|
||||
|
||||
return args
|
||||
},
|
||||
enumerable: true
|
||||
})
|
||||
|
||||
function parseArgs (args) {
|
||||
args = normalizeArgs(args)
|
||||
|
||||
var parsed = Parser(args, options, y18n)
|
||||
var argv = parsed.argv
|
||||
var aliases = parsed.aliases
|
||||
|
||||
argv.$0 = self.$0
|
||||
|
||||
self.parsed = parsed
|
||||
|
||||
guessLocale() // guess locale lazily, so that it can be turned off in chain.
|
||||
|
||||
// while building up the argv object, there
|
||||
// are two passes through the parser. If completion
|
||||
// is being performed short-circuit on the first pass.
|
||||
if (completionCommand &&
|
||||
(process.argv.join(' ')).indexOf(completion.completionKey) !== -1 &&
|
||||
!argv[completion.completionKey]) {
|
||||
return argv
|
||||
}
|
||||
|
||||
// if there's a handler associated with a
|
||||
// command defer processing to it.
|
||||
var handlerKeys = Object.keys(self.getCommandHandlers())
|
||||
for (var i = 0, command; (command = handlerKeys[i]) !== undefined; i++) {
|
||||
if (~argv._.indexOf(command)) {
|
||||
runCommand(command, self, argv)
|
||||
return self.argv
|
||||
}
|
||||
}
|
||||
|
||||
// generate a completion script for adding to ~/.bashrc.
|
||||
if (completionCommand && ~argv._.indexOf(completionCommand) && !argv[completion.completionKey]) {
|
||||
self.showCompletionScript()
|
||||
if (exitProcess) {
|
||||
process.exit(0)
|
||||
}
|
||||
}
|
||||
|
||||
// we must run completions first, a user might
|
||||
// want to complete the --help or --version option.
|
||||
if (completion.completionKey in argv) {
|
||||
// we allow for asynchronous completions,
|
||||
// e.g., loading in a list of commands from an API.
|
||||
completion.getCompletion(function (completions) {
|
||||
;(completions || []).forEach(function (completion) {
|
||||
console.log(completion)
|
||||
})
|
||||
|
||||
if (exitProcess) {
|
||||
process.exit(0)
|
||||
}
|
||||
})
|
||||
return
|
||||
}
|
||||
|
||||
var helpOrVersion = false
|
||||
Object.keys(argv).forEach(function (key) {
|
||||
if (key === helpOpt && argv[key]) {
|
||||
helpOrVersion = true
|
||||
self.showHelp('log')
|
||||
if (exitProcess) {
|
||||
process.exit(0)
|
||||
}
|
||||
} else if (key === versionOpt && argv[key]) {
|
||||
helpOrVersion = true
|
||||
usage.showVersion()
|
||||
if (exitProcess) {
|
||||
process.exit(0)
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
// If the help or version options where used and exitProcess is false,
|
||||
// we won't run validations
|
||||
if (!helpOrVersion) {
|
||||
if (parsed.error) throw parsed.error
|
||||
|
||||
// if we're executed via bash completion, don't
|
||||
// bother with validation.
|
||||
if (!argv[completion.completionKey]) {
|
||||
validation.nonOptionCount(argv)
|
||||
validation.missingArgumentValue(argv)
|
||||
validation.requiredArguments(argv)
|
||||
if (strict) validation.unknownArguments(argv, aliases)
|
||||
validation.customChecks(argv, aliases)
|
||||
validation.limitedChoices(argv)
|
||||
validation.implications(argv)
|
||||
}
|
||||
}
|
||||
|
||||
setPlaceholderKeys(argv)
|
||||
|
||||
return argv
|
||||
}
|
||||
|
||||
function guessLocale () {
|
||||
if (!detectLocale) return
|
||||
|
||||
try {
|
||||
var osLocale = require('os-locale')
|
||||
self.locale(osLocale.sync({ spawn: false }))
|
||||
} catch (err) {
|
||||
// if we explode looking up locale just noop
|
||||
// we'll keep using the default language 'en'.
|
||||
}
|
||||
}
|
||||
|
||||
function runCommand (command, yargs, argv) {
|
||||
setPlaceholderKeys(argv)
|
||||
yargs.getCommandHandlers()[command](yargs.reset(), argv)
|
||||
}
|
||||
|
||||
function setPlaceholderKeys (argv) {
|
||||
Object.keys(options.key).forEach(function (key) {
|
||||
// don't set placeholder keys for dot
|
||||
// notation options 'foo.bar'.
|
||||
if (~key.indexOf('.')) return
|
||||
if (typeof argv[key] === 'undefined') argv[key] = undefined
|
||||
})
|
||||
}
|
||||
|
||||
function normalizeArgs (args) {
|
||||
if (typeof args === 'string') {
|
||||
return tokenizeArgString(args)
|
||||
}
|
||||
return args
|
||||
}
|
||||
|
||||
singletonify(self)
|
||||
return self
|
||||
}
|
||||
|
||||
// rebase an absolute path to a relative one with respect to a base directory
|
||||
// exported for tests
|
||||
exports.rebase = rebase
|
||||
function rebase (base, dir) {
|
||||
return path.relative(base, dir)
|
||||
}
|
||||
|
||||
/* Hack an instance of Argv with process.argv into Argv
|
||||
so people can do
|
||||
require('yargs')(['--beeble=1','-z','zizzle']).argv
|
||||
to parse a list of args and
|
||||
require('yargs').argv
|
||||
to get a parsed version of process.argv.
|
||||
*/
|
||||
function singletonify (inst) {
|
||||
Object.keys(inst).forEach(function (key) {
|
||||
if (key === 'argv') {
|
||||
Argv.__defineGetter__(key, inst.__lookupGetter__(key))
|
||||
} else {
|
||||
Argv[key] = typeof inst[key] === 'function' ? inst[key].bind(inst) : inst[key]
|
||||
}
|
||||
})
|
||||
}
|
91
node_modules/doiuse/node_modules/yargs/lib/completion.js
generated
vendored
Normal file
91
node_modules/doiuse/node_modules/yargs/lib/completion.js
generated
vendored
Normal file
@@ -0,0 +1,91 @@
|
||||
var fs = require('fs')
|
||||
var path = require('path')
|
||||
|
||||
// add bash completions to your
|
||||
// yargs-powered applications.
|
||||
module.exports = function (yargs, usage) {
|
||||
var self = {
|
||||
completionKey: 'get-yargs-completions'
|
||||
}
|
||||
|
||||
// get a list of completion commands.
|
||||
self.getCompletion = function (done) {
|
||||
var completions = []
|
||||
var current = process.argv[process.argv.length - 1]
|
||||
var previous = process.argv.slice(process.argv.indexOf('--' + self.completionKey) + 1)
|
||||
var argv = yargs.parse(previous)
|
||||
|
||||
// a custom completion function can be provided
|
||||
// to completion().
|
||||
if (completionFunction) {
|
||||
if (completionFunction.length < 3) {
|
||||
var result = completionFunction(current, argv)
|
||||
|
||||
// promise based completion function.
|
||||
if (typeof result.then === 'function') {
|
||||
return result.then(function (list) {
|
||||
process.nextTick(function () { done(list) })
|
||||
}).catch(function (err) {
|
||||
process.nextTick(function () { throw err })
|
||||
})
|
||||
}
|
||||
|
||||
// synchronous completion function.
|
||||
return done(result)
|
||||
} else {
|
||||
// asynchronous completion function
|
||||
return completionFunction(current, argv, function (completions) {
|
||||
done(completions)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
var handlers = yargs.getCommandHandlers()
|
||||
for (var i = 0, ii = previous.length; i < ii; ++i) {
|
||||
if (handlers[previous[i]]) {
|
||||
return handlers[previous[i]](yargs.reset())
|
||||
}
|
||||
}
|
||||
|
||||
if (!current.match(/^-/)) {
|
||||
usage.getCommands().forEach(function (command) {
|
||||
if (previous.indexOf(command[0]) === -1) {
|
||||
completions.push(command[0])
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
if (current.match(/^-/)) {
|
||||
Object.keys(yargs.getOptions().key).forEach(function (key) {
|
||||
completions.push('--' + key)
|
||||
})
|
||||
}
|
||||
|
||||
done(completions)
|
||||
}
|
||||
|
||||
// generate the completion script to add to your .bashrc.
|
||||
self.generateCompletionScript = function ($0) {
|
||||
var script = fs.readFileSync(
|
||||
path.resolve(__dirname, '../completion.sh.hbs'),
|
||||
'utf-8'
|
||||
)
|
||||
var name = path.basename($0)
|
||||
|
||||
// add ./to applications not yet installed as bin.
|
||||
if ($0.match(/\.js$/)) $0 = './' + $0
|
||||
|
||||
script = script.replace(/{{app_name}}/g, name)
|
||||
return script.replace(/{{app_path}}/g, $0)
|
||||
}
|
||||
|
||||
// register a function to perform your own custom
|
||||
// completions., this function can be either
|
||||
// synchrnous or asynchronous.
|
||||
var completionFunction = null
|
||||
self.registerFunction = function (fn) {
|
||||
completionFunction = fn
|
||||
}
|
||||
|
||||
return self
|
||||
}
|
520
node_modules/doiuse/node_modules/yargs/lib/parser.js
generated
vendored
Normal file
520
node_modules/doiuse/node_modules/yargs/lib/parser.js
generated
vendored
Normal file
@@ -0,0 +1,520 @@
|
||||
// fancy-pants parsing of argv, originally forked
|
||||
// from minimist: https://www.npmjs.com/package/minimist
|
||||
var camelCase = require('camelcase')
|
||||
var path = require('path')
|
||||
|
||||
function increment (orig) {
|
||||
return orig !== undefined ? orig + 1 : 0
|
||||
}
|
||||
|
||||
module.exports = function (args, opts, y18n) {
|
||||
if (!opts) opts = {}
|
||||
|
||||
var __ = y18n.__
|
||||
var error = null
|
||||
var flags = { arrays: {}, bools: {}, strings: {}, counts: {}, normalize: {}, configs: {}, defaulted: {} }
|
||||
|
||||
;[].concat(opts['array']).filter(Boolean).forEach(function (key) {
|
||||
flags.arrays[key] = true
|
||||
})
|
||||
|
||||
;[].concat(opts['boolean']).filter(Boolean).forEach(function (key) {
|
||||
flags.bools[key] = true
|
||||
})
|
||||
|
||||
;[].concat(opts.string).filter(Boolean).forEach(function (key) {
|
||||
flags.strings[key] = true
|
||||
})
|
||||
|
||||
;[].concat(opts.count).filter(Boolean).forEach(function (key) {
|
||||
flags.counts[key] = true
|
||||
})
|
||||
|
||||
;[].concat(opts.normalize).filter(Boolean).forEach(function (key) {
|
||||
flags.normalize[key] = true
|
||||
})
|
||||
|
||||
Object.keys(opts.config).forEach(function (k) {
|
||||
flags.configs[k] = opts.config[k]
|
||||
})
|
||||
|
||||
var aliases = {}
|
||||
var newAliases = {}
|
||||
|
||||
extendAliases(opts.key)
|
||||
extendAliases(opts.alias)
|
||||
extendAliases(opts.default)
|
||||
|
||||
var defaults = opts['default'] || {}
|
||||
Object.keys(defaults).forEach(function (key) {
|
||||
if (/-/.test(key) && !opts.alias[key]) {
|
||||
aliases[key] = aliases[key] || []
|
||||
}
|
||||
(aliases[key] || []).forEach(function (alias) {
|
||||
defaults[alias] = defaults[key]
|
||||
})
|
||||
})
|
||||
|
||||
var argv = { _: [] }
|
||||
|
||||
Object.keys(flags.bools).forEach(function (key) {
|
||||
setArg(key, !(key in defaults) ? false : defaults[key])
|
||||
setDefaulted(key)
|
||||
})
|
||||
|
||||
var notFlags = []
|
||||
if (args.indexOf('--') !== -1) {
|
||||
notFlags = args.slice(args.indexOf('--') + 1)
|
||||
args = args.slice(0, args.indexOf('--'))
|
||||
}
|
||||
|
||||
for (var i = 0; i < args.length; i++) {
|
||||
var arg = args[i]
|
||||
var broken
|
||||
var key
|
||||
var letters
|
||||
var m
|
||||
var next
|
||||
var value
|
||||
|
||||
// -- seperated by =
|
||||
if (arg.match(/^--.+=/)) {
|
||||
// Using [\s\S] instead of . because js doesn't support the
|
||||
// 'dotall' regex modifier. See:
|
||||
// http://stackoverflow.com/a/1068308/13216
|
||||
m = arg.match(/^--([^=]+)=([\s\S]*)$/)
|
||||
|
||||
// nargs format = '--f=monkey washing cat'
|
||||
if (checkAllAliases(m[1], opts.narg)) {
|
||||
args.splice(i + 1, m[1], m[2])
|
||||
i = eatNargs(i, m[1], args)
|
||||
// arrays format = '--f=a b c'
|
||||
} else if (checkAllAliases(m[1], flags.arrays) && args.length > i + 1) {
|
||||
args.splice(i + 1, m[1], m[2])
|
||||
i = eatArray(i, m[1], args)
|
||||
} else {
|
||||
setArg(m[1], m[2])
|
||||
}
|
||||
} else if (arg.match(/^--no-.+/)) {
|
||||
key = arg.match(/^--no-(.+)/)[1]
|
||||
setArg(key, false)
|
||||
|
||||
// -- seperated by space.
|
||||
} else if (arg.match(/^--.+/)) {
|
||||
key = arg.match(/^--(.+)/)[1]
|
||||
|
||||
// nargs format = '--foo a b c'
|
||||
if (checkAllAliases(key, opts.narg)) {
|
||||
i = eatNargs(i, key, args)
|
||||
// array format = '--foo a b c'
|
||||
} else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) {
|
||||
i = eatArray(i, key, args)
|
||||
} else {
|
||||
next = args[i + 1]
|
||||
|
||||
if (next !== undefined && !next.match(/^-/) &&
|
||||
!checkAllAliases(key, flags.bools) &&
|
||||
!checkAllAliases(key, flags.counts)) {
|
||||
setArg(key, next)
|
||||
i++
|
||||
} else if (/^(true|false)$/.test(next)) {
|
||||
setArg(key, next)
|
||||
i++
|
||||
} else {
|
||||
setArg(key, defaultForType(guessType(key, flags)))
|
||||
}
|
||||
}
|
||||
|
||||
// dot-notation flag seperated by '='.
|
||||
} else if (arg.match(/^-.\..+=/)) {
|
||||
m = arg.match(/^-([^=]+)=([\s\S]*)$/)
|
||||
setArg(m[1], m[2])
|
||||
|
||||
// dot-notation flag seperated by space.
|
||||
} else if (arg.match(/^-.\..+/)) {
|
||||
next = args[i + 1]
|
||||
key = arg.match(/^-(.\..+)/)[1]
|
||||
|
||||
if (next !== undefined && !next.match(/^-/) &&
|
||||
!checkAllAliases(key, flags.bools) &&
|
||||
!checkAllAliases(key, flags.counts)) {
|
||||
setArg(key, next)
|
||||
i++
|
||||
} else {
|
||||
setArg(key, defaultForType(guessType(key, flags)))
|
||||
}
|
||||
} else if (arg.match(/^-[^-]+/)) {
|
||||
letters = arg.slice(1, -1).split('')
|
||||
broken = false
|
||||
|
||||
for (var j = 0; j < letters.length; j++) {
|
||||
next = arg.slice(j + 2)
|
||||
|
||||
if (letters[j + 1] && letters[j + 1] === '=') {
|
||||
value = arg.slice(j + 3)
|
||||
key = letters[j]
|
||||
|
||||
// nargs format = '-f=monkey washing cat'
|
||||
if (checkAllAliases(letters[j], opts.narg)) {
|
||||
args.splice(i + 1, 0, value)
|
||||
i = eatNargs(i, key, args)
|
||||
// array format = '-f=a b c'
|
||||
} else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) {
|
||||
args.splice(i + 1, 0, value)
|
||||
i = eatArray(i, key, args)
|
||||
} else {
|
||||
setArg(key, value)
|
||||
}
|
||||
|
||||
broken = true
|
||||
break
|
||||
}
|
||||
|
||||
if (next === '-') {
|
||||
setArg(letters[j], next)
|
||||
continue
|
||||
}
|
||||
|
||||
if (/[A-Za-z]/.test(letters[j]) &&
|
||||
/-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) {
|
||||
setArg(letters[j], next)
|
||||
broken = true
|
||||
break
|
||||
}
|
||||
|
||||
if (letters[j + 1] && letters[j + 1].match(/\W/)) {
|
||||
setArg(letters[j], arg.slice(j + 2))
|
||||
broken = true
|
||||
break
|
||||
} else {
|
||||
setArg(letters[j], defaultForType(guessType(letters[j], flags)))
|
||||
}
|
||||
}
|
||||
|
||||
key = arg.slice(-1)[0]
|
||||
|
||||
if (!broken && key !== '-') {
|
||||
// nargs format = '-f a b c'
|
||||
if (checkAllAliases(key, opts.narg)) {
|
||||
i = eatNargs(i, key, args)
|
||||
// array format = '-f a b c'
|
||||
} else if (checkAllAliases(key, flags.arrays) && args.length > i + 1) {
|
||||
i = eatArray(i, key, args)
|
||||
} else {
|
||||
if (args[i + 1] && !/^(-|--)[^-]/.test(args[i + 1]) &&
|
||||
!checkAllAliases(key, flags.bools) &&
|
||||
!checkAllAliases(key, flags.counts)) {
|
||||
setArg(key, args[i + 1])
|
||||
i++
|
||||
} else if (args[i + 1] && /true|false/.test(args[i + 1])) {
|
||||
setArg(key, args[i + 1])
|
||||
i++
|
||||
} else {
|
||||
setArg(key, defaultForType(guessType(key, flags)))
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
argv._.push(
|
||||
flags.strings['_'] || !isNumber(arg) ? arg : Number(arg)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
// order of precedence:
|
||||
// 1. command line arg
|
||||
// 2. value from config file
|
||||
// 3. value from env var
|
||||
// 4. configured default value
|
||||
applyEnvVars(opts, argv, true) // special case: check env vars that point to config file
|
||||
setConfig(argv)
|
||||
applyEnvVars(opts, argv, false)
|
||||
applyDefaultsAndAliases(argv, aliases, defaults)
|
||||
|
||||
Object.keys(flags.counts).forEach(function (key) {
|
||||
setArg(key, defaults[key])
|
||||
})
|
||||
|
||||
notFlags.forEach(function (key) {
|
||||
argv._.push(key)
|
||||
})
|
||||
|
||||
// how many arguments should we consume, based
|
||||
// on the nargs option?
|
||||
function eatNargs (i, key, args) {
|
||||
var toEat = checkAllAliases(key, opts.narg)
|
||||
|
||||
if (args.length - (i + 1) < toEat) error = Error(__('Not enough arguments following: %s', key))
|
||||
|
||||
for (var ii = i + 1; ii < (toEat + i + 1); ii++) {
|
||||
setArg(key, args[ii])
|
||||
}
|
||||
|
||||
return (i + toEat)
|
||||
}
|
||||
|
||||
// if an option is an array, eat all non-hyphenated arguments
|
||||
// following it... YUM!
|
||||
// e.g., --foo apple banana cat becomes ["apple", "banana", "cat"]
|
||||
function eatArray (i, key, args) {
|
||||
for (var ii = i + 1; ii < args.length; ii++) {
|
||||
if (/^-/.test(args[ii])) break
|
||||
i = ii
|
||||
setArg(key, args[ii])
|
||||
}
|
||||
|
||||
return i
|
||||
}
|
||||
|
||||
function setArg (key, val) {
|
||||
unsetDefaulted(key)
|
||||
|
||||
// handle parsing boolean arguments --foo=true --bar false.
|
||||
if (checkAllAliases(key, flags.bools) || checkAllAliases(key, flags.counts)) {
|
||||
if (typeof val === 'string') val = val === 'true'
|
||||
}
|
||||
|
||||
if (/-/.test(key) && !(aliases[key] && aliases[key].length)) {
|
||||
var c = camelCase(key)
|
||||
aliases[key] = [c]
|
||||
newAliases[c] = true
|
||||
}
|
||||
|
||||
var value = !checkAllAliases(key, flags.strings) && isNumber(val) ? Number(val) : val
|
||||
|
||||
if (checkAllAliases(key, flags.counts)) {
|
||||
value = increment
|
||||
}
|
||||
|
||||
var splitKey = key.split('.')
|
||||
setKey(argv, splitKey, value)
|
||||
|
||||
// alias references an inner-value within
|
||||
// a dot-notation object. see #279.
|
||||
if (~key.indexOf('.') && aliases[key]) {
|
||||
aliases[key].forEach(function (x) {
|
||||
x = x.split('.')
|
||||
setKey(argv, x, value)
|
||||
})
|
||||
}
|
||||
|
||||
;(aliases[splitKey[0]] || []).forEach(function (x) {
|
||||
x = x.split('.')
|
||||
|
||||
// handle populating dot notation for both
|
||||
// the key and its aliases.
|
||||
if (splitKey.length > 1) {
|
||||
var a = [].concat(splitKey)
|
||||
a.shift() // nuke the old key.
|
||||
x = x.concat(a)
|
||||
}
|
||||
|
||||
setKey(argv, x, value)
|
||||
})
|
||||
|
||||
var keys = [key].concat(aliases[key] || [])
|
||||
for (var i = 0, l = keys.length; i < l; i++) {
|
||||
if (flags.normalize[keys[i]]) {
|
||||
keys.forEach(function (key) {
|
||||
argv.__defineSetter__(key, function (v) {
|
||||
val = path.normalize(v)
|
||||
})
|
||||
|
||||
argv.__defineGetter__(key, function () {
|
||||
return typeof val === 'string' ? path.normalize(val) : val
|
||||
})
|
||||
})
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// set args from config.json file, this should be
|
||||
// applied last so that defaults can be applied.
|
||||
function setConfig (argv) {
|
||||
var configLookup = {}
|
||||
|
||||
// expand defaults/aliases, in-case any happen to reference
|
||||
// the config.json file.
|
||||
applyDefaultsAndAliases(configLookup, aliases, defaults)
|
||||
|
||||
Object.keys(flags.configs).forEach(function (configKey) {
|
||||
var configPath = argv[configKey] || configLookup[configKey]
|
||||
if (configPath) {
|
||||
try {
|
||||
var config = null
|
||||
var resolvedConfigPath = path.resolve(process.cwd(), configPath)
|
||||
|
||||
if (typeof flags.configs[configKey] === 'function') {
|
||||
try {
|
||||
config = flags.configs[configKey](resolvedConfigPath)
|
||||
} catch (e) {
|
||||
config = e
|
||||
}
|
||||
if (config instanceof Error) {
|
||||
error = config
|
||||
return
|
||||
}
|
||||
} else {
|
||||
config = require(resolvedConfigPath)
|
||||
}
|
||||
|
||||
Object.keys(config).forEach(function (key) {
|
||||
// setting arguments via CLI takes precedence over
|
||||
// values within the config file.
|
||||
if (argv[key] === undefined || (flags.defaulted[key])) {
|
||||
delete argv[key]
|
||||
setArg(key, config[key])
|
||||
}
|
||||
})
|
||||
} catch (ex) {
|
||||
if (argv[configKey]) error = Error(__('Invalid JSON config file: %s', configPath))
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function applyEnvVars (opts, argv, configOnly) {
|
||||
if (typeof opts.envPrefix === 'undefined') return
|
||||
|
||||
var prefix = typeof opts.envPrefix === 'string' ? opts.envPrefix : ''
|
||||
Object.keys(process.env).forEach(function (envVar) {
|
||||
if (prefix === '' || envVar.lastIndexOf(prefix, 0) === 0) {
|
||||
var key = camelCase(envVar.substring(prefix.length))
|
||||
if (((configOnly && flags.configs[key]) || !configOnly) && (!(key in argv) || flags.defaulted[key])) {
|
||||
setArg(key, process.env[envVar])
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function applyDefaultsAndAliases (obj, aliases, defaults) {
|
||||
Object.keys(defaults).forEach(function (key) {
|
||||
if (!hasKey(obj, key.split('.'))) {
|
||||
setKey(obj, key.split('.'), defaults[key])
|
||||
|
||||
;(aliases[key] || []).forEach(function (x) {
|
||||
if (hasKey(obj, x.split('.'))) return
|
||||
setKey(obj, x.split('.'), defaults[key])
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
function hasKey (obj, keys) {
|
||||
var o = obj
|
||||
keys.slice(0, -1).forEach(function (key) {
|
||||
o = (o[key] || {})
|
||||
})
|
||||
|
||||
var key = keys[keys.length - 1]
|
||||
|
||||
if (typeof o !== 'object') return false
|
||||
else return key in o
|
||||
}
|
||||
|
||||
function setKey (obj, keys, value) {
|
||||
var o = obj
|
||||
keys.slice(0, -1).forEach(function (key) {
|
||||
if (o[key] === undefined) o[key] = {}
|
||||
o = o[key]
|
||||
})
|
||||
|
||||
var key = keys[keys.length - 1]
|
||||
if (value === increment) {
|
||||
o[key] = increment(o[key])
|
||||
} else if (o[key] === undefined && checkAllAliases(key, flags.arrays)) {
|
||||
o[key] = Array.isArray(value) ? value : [value]
|
||||
} else if (o[key] === undefined || typeof o[key] === 'boolean') {
|
||||
o[key] = value
|
||||
} else if (Array.isArray(o[key])) {
|
||||
o[key].push(value)
|
||||
} else {
|
||||
o[key] = [ o[key], value ]
|
||||
}
|
||||
}
|
||||
|
||||
// extend the aliases list with inferred aliases.
|
||||
function extendAliases (obj) {
|
||||
Object.keys(obj || {}).forEach(function (key) {
|
||||
// short-circuit if we've already added a key
|
||||
// to the aliases array, for example it might
|
||||
// exist in both 'opts.default' and 'opts.key'.
|
||||
if (aliases[key]) return
|
||||
|
||||
aliases[key] = [].concat(opts.alias[key] || [])
|
||||
// For "--option-name", also set argv.optionName
|
||||
aliases[key].concat(key).forEach(function (x) {
|
||||
if (/-/.test(x)) {
|
||||
var c = camelCase(x)
|
||||
aliases[key].push(c)
|
||||
newAliases[c] = true
|
||||
}
|
||||
})
|
||||
aliases[key].forEach(function (x) {
|
||||
aliases[x] = [key].concat(aliases[key].filter(function (y) {
|
||||
return x !== y
|
||||
}))
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// check if a flag is set for any of a key's aliases.
|
||||
function checkAllAliases (key, flag) {
|
||||
var isSet = false
|
||||
var toCheck = [].concat(aliases[key] || [], key)
|
||||
|
||||
toCheck.forEach(function (key) {
|
||||
if (flag[key]) isSet = flag[key]
|
||||
})
|
||||
|
||||
return isSet
|
||||
}
|
||||
|
||||
function setDefaulted (key) {
|
||||
[].concat(aliases[key] || [], key).forEach(function (k) {
|
||||
flags.defaulted[k] = true
|
||||
})
|
||||
}
|
||||
|
||||
function unsetDefaulted (key) {
|
||||
[].concat(aliases[key] || [], key).forEach(function (k) {
|
||||
delete flags.defaulted[k]
|
||||
})
|
||||
}
|
||||
|
||||
// return a default value, given the type of a flag.,
|
||||
// e.g., key of type 'string' will default to '', rather than 'true'.
|
||||
function defaultForType (type) {
|
||||
var def = {
|
||||
boolean: true,
|
||||
string: '',
|
||||
array: []
|
||||
}
|
||||
|
||||
return def[type]
|
||||
}
|
||||
|
||||
// given a flag, enforce a default type.
|
||||
function guessType (key, flags) {
|
||||
var type = 'boolean'
|
||||
|
||||
if (flags.strings && flags.strings[key]) type = 'string'
|
||||
else if (flags.arrays && flags.arrays[key]) type = 'array'
|
||||
|
||||
return type
|
||||
}
|
||||
|
||||
function isNumber (x) {
|
||||
if (typeof x === 'number') return true
|
||||
if (/^0x[0-9a-f]+$/i.test(x)) return true
|
||||
return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x)
|
||||
}
|
||||
|
||||
return {
|
||||
argv: argv,
|
||||
aliases: aliases,
|
||||
error: error,
|
||||
newAliases: newAliases
|
||||
}
|
||||
}
|
32
node_modules/doiuse/node_modules/yargs/lib/tokenize-arg-string.js
generated
vendored
Normal file
32
node_modules/doiuse/node_modules/yargs/lib/tokenize-arg-string.js
generated
vendored
Normal file
@@ -0,0 +1,32 @@
|
||||
// take an un-split argv string and tokenize it.
|
||||
module.exports = function (argString) {
|
||||
var i = 0
|
||||
var c = null
|
||||
var opening = null
|
||||
var args = []
|
||||
|
||||
for (var ii = 0; ii < argString.length; ii++) {
|
||||
c = argString.charAt(ii)
|
||||
|
||||
// split on spaces unless we're in quotes.
|
||||
if (c === ' ' && !opening) {
|
||||
i++
|
||||
continue
|
||||
}
|
||||
|
||||
// don't split the string if we're in matching
|
||||
// opening or closing single and double quotes.
|
||||
if (c === opening) {
|
||||
opening = null
|
||||
continue
|
||||
} else if ((c === "'" || c === '"') && !opening) {
|
||||
opening = c
|
||||
continue
|
||||
}
|
||||
|
||||
if (!args[i]) args[i] = ''
|
||||
args[i] += c
|
||||
}
|
||||
|
||||
return args
|
||||
}
|
383
node_modules/doiuse/node_modules/yargs/lib/usage.js
generated
vendored
Normal file
383
node_modules/doiuse/node_modules/yargs/lib/usage.js
generated
vendored
Normal file
@@ -0,0 +1,383 @@
|
||||
// this file handles outputting usage instructions,
|
||||
// failures, etc. keeps logging in one place.
|
||||
var cliui = require('cliui')
|
||||
var decamelize = require('decamelize')
|
||||
var stringWidth = require('string-width')
|
||||
var wsize = require('window-size')
|
||||
|
||||
module.exports = function (yargs, y18n) {
|
||||
var __ = y18n.__
|
||||
var self = {}
|
||||
|
||||
// methods for ouputting/building failure message.
|
||||
var fails = []
|
||||
self.failFn = function (f) {
|
||||
fails.push(f)
|
||||
}
|
||||
|
||||
var failMessage = null
|
||||
var showHelpOnFail = true
|
||||
self.showHelpOnFail = function (enabled, message) {
|
||||
if (typeof enabled === 'string') {
|
||||
message = enabled
|
||||
enabled = true
|
||||
} else if (typeof enabled === 'undefined') {
|
||||
enabled = true
|
||||
}
|
||||
failMessage = message
|
||||
showHelpOnFail = enabled
|
||||
return self
|
||||
}
|
||||
|
||||
var failureOutput = false
|
||||
self.fail = function (msg) {
|
||||
if (fails.length) {
|
||||
fails.forEach(function (f) {
|
||||
f(msg)
|
||||
})
|
||||
} else {
|
||||
// don't output failure message more than once
|
||||
if (!failureOutput) {
|
||||
failureOutput = true
|
||||
if (showHelpOnFail) yargs.showHelp('error')
|
||||
if (msg) console.error(msg)
|
||||
if (failMessage) {
|
||||
if (msg) console.error('')
|
||||
console.error(failMessage)
|
||||
}
|
||||
}
|
||||
if (yargs.getExitProcess()) {
|
||||
process.exit(1)
|
||||
} else {
|
||||
throw new Error(msg)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// methods for ouputting/building help (usage) message.
|
||||
var usage
|
||||
self.usage = function (msg) {
|
||||
usage = msg
|
||||
}
|
||||
|
||||
var examples = []
|
||||
self.example = function (cmd, description) {
|
||||
examples.push([cmd, description || ''])
|
||||
}
|
||||
|
||||
var commands = []
|
||||
self.command = function (cmd, description) {
|
||||
commands.push([cmd, description || ''])
|
||||
}
|
||||
self.getCommands = function () {
|
||||
return commands
|
||||
}
|
||||
|
||||
var descriptions = {}
|
||||
self.describe = function (key, desc) {
|
||||
if (typeof key === 'object') {
|
||||
Object.keys(key).forEach(function (k) {
|
||||
self.describe(k, key[k])
|
||||
})
|
||||
} else {
|
||||
descriptions[key] = desc
|
||||
}
|
||||
}
|
||||
self.getDescriptions = function () {
|
||||
return descriptions
|
||||
}
|
||||
|
||||
var epilog
|
||||
self.epilog = function (msg) {
|
||||
epilog = msg
|
||||
}
|
||||
|
||||
var wrap = windowWidth()
|
||||
self.wrap = function (cols) {
|
||||
wrap = cols
|
||||
}
|
||||
|
||||
var deferY18nLookupPrefix = '__yargsString__:'
|
||||
self.deferY18nLookup = function (str) {
|
||||
return deferY18nLookupPrefix + str
|
||||
}
|
||||
|
||||
var defaultGroup = 'Options:'
|
||||
self.help = function () {
|
||||
normalizeAliases()
|
||||
|
||||
var demanded = yargs.getDemanded()
|
||||
var groups = yargs.getGroups()
|
||||
var options = yargs.getOptions()
|
||||
var keys = Object.keys(
|
||||
Object.keys(descriptions)
|
||||
.concat(Object.keys(demanded))
|
||||
.concat(Object.keys(options.default))
|
||||
.reduce(function (acc, key) {
|
||||
if (key !== '_') acc[key] = true
|
||||
return acc
|
||||
}, {})
|
||||
)
|
||||
var ui = cliui({
|
||||
width: wrap,
|
||||
wrap: !!wrap
|
||||
})
|
||||
|
||||
// the usage string.
|
||||
if (usage) {
|
||||
var u = usage.replace(/\$0/g, yargs.$0)
|
||||
ui.div(u + '\n')
|
||||
}
|
||||
|
||||
// your application's commands, i.e., non-option
|
||||
// arguments populated in '_'.
|
||||
if (commands.length) {
|
||||
ui.div(__('Commands:'))
|
||||
|
||||
commands.forEach(function (command) {
|
||||
ui.div(
|
||||
{text: command[0], padding: [0, 2, 0, 2], width: maxWidth(commands) + 4},
|
||||
{text: command[1]}
|
||||
)
|
||||
})
|
||||
|
||||
ui.div()
|
||||
}
|
||||
|
||||
// perform some cleanup on the keys array, making it
|
||||
// only include top-level keys not their aliases.
|
||||
var aliasKeys = (Object.keys(options.alias) || [])
|
||||
.concat(Object.keys(yargs.parsed.newAliases) || [])
|
||||
|
||||
keys = keys.filter(function (key) {
|
||||
return !yargs.parsed.newAliases[key] && aliasKeys.every(function (alias) {
|
||||
return (options.alias[alias] || []).indexOf(key) === -1
|
||||
})
|
||||
})
|
||||
|
||||
// populate 'Options:' group with any keys that have not
|
||||
// explicitly had a group set.
|
||||
if (!groups[defaultGroup]) groups[defaultGroup] = []
|
||||
addUngroupedKeys(keys, options.alias, groups)
|
||||
|
||||
// display 'Options:' table along with any custom tables:
|
||||
Object.keys(groups).forEach(function (groupName) {
|
||||
if (!groups[groupName].length) return
|
||||
|
||||
ui.div(__(groupName))
|
||||
|
||||
// if we've grouped the key 'f', but 'f' aliases 'foobar',
|
||||
// normalizedKeys should contain only 'foobar'.
|
||||
var normalizedKeys = groups[groupName].map(function (key) {
|
||||
if (~aliasKeys.indexOf(key)) return key
|
||||
for (var i = 0, aliasKey; (aliasKey = aliasKeys[i]) !== undefined; i++) {
|
||||
if (~(options.alias[aliasKey] || []).indexOf(key)) return aliasKey
|
||||
}
|
||||
return key
|
||||
})
|
||||
|
||||
// actually generate the switches string --foo, -f, --bar.
|
||||
var switches = normalizedKeys.reduce(function (acc, key) {
|
||||
acc[key] = [ key ].concat(options.alias[key] || [])
|
||||
.map(function (sw) {
|
||||
return (sw.length > 1 ? '--' : '-') + sw
|
||||
})
|
||||
.join(', ')
|
||||
|
||||
return acc
|
||||
}, {})
|
||||
|
||||
normalizedKeys.forEach(function (key) {
|
||||
var kswitch = switches[key]
|
||||
var desc = descriptions[key] || ''
|
||||
var type = null
|
||||
|
||||
if (~desc.lastIndexOf(deferY18nLookupPrefix)) desc = __(desc.substring(deferY18nLookupPrefix.length))
|
||||
|
||||
if (~options.boolean.indexOf(key)) type = '[' + __('boolean') + ']'
|
||||
if (~options.count.indexOf(key)) type = '[' + __('count') + ']'
|
||||
if (~options.string.indexOf(key)) type = '[' + __('string') + ']'
|
||||
if (~options.normalize.indexOf(key)) type = '[' + __('string') + ']'
|
||||
if (~options.array.indexOf(key)) type = '[' + __('array') + ']'
|
||||
|
||||
var extra = [
|
||||
type,
|
||||
demanded[key] ? '[' + __('required') + ']' : null,
|
||||
options.choices && options.choices[key] ? '[' + __('choices:') + ' ' +
|
||||
self.stringifiedValues(options.choices[key]) + ']' : null,
|
||||
defaultString(options.default[key], options.defaultDescription[key])
|
||||
].filter(Boolean).join(' ')
|
||||
|
||||
ui.span(
|
||||
{text: kswitch, padding: [0, 2, 0, 2], width: maxWidth(switches) + 4},
|
||||
desc
|
||||
)
|
||||
|
||||
if (extra) ui.div({text: extra, padding: [0, 0, 0, 2], align: 'right'})
|
||||
else ui.div()
|
||||
})
|
||||
|
||||
ui.div()
|
||||
})
|
||||
|
||||
// describe some common use-cases for your application.
|
||||
if (examples.length) {
|
||||
ui.div(__('Examples:'))
|
||||
|
||||
examples.forEach(function (example) {
|
||||
example[0] = example[0].replace(/\$0/g, yargs.$0)
|
||||
})
|
||||
|
||||
examples.forEach(function (example) {
|
||||
ui.div(
|
||||
{text: example[0], padding: [0, 2, 0, 2], width: maxWidth(examples) + 4},
|
||||
example[1]
|
||||
)
|
||||
})
|
||||
|
||||
ui.div()
|
||||
}
|
||||
|
||||
// the usage string.
|
||||
if (epilog) {
|
||||
var e = epilog.replace(/\$0/g, yargs.$0)
|
||||
ui.div(e + '\n')
|
||||
}
|
||||
|
||||
return ui.toString()
|
||||
}
|
||||
|
||||
// return the maximum width of a string
|
||||
// in the left-hand column of a table.
|
||||
function maxWidth (table) {
|
||||
var width = 0
|
||||
|
||||
// table might be of the form [leftColumn],
|
||||
// or {key: leftColumn}}
|
||||
if (!Array.isArray(table)) {
|
||||
table = Object.keys(table).map(function (key) {
|
||||
return [table[key]]
|
||||
})
|
||||
}
|
||||
|
||||
table.forEach(function (v) {
|
||||
width = Math.max(stringWidth(v[0]), width)
|
||||
})
|
||||
|
||||
// if we've enabled 'wrap' we should limit
|
||||
// the max-width of the left-column.
|
||||
if (wrap) width = Math.min(width, parseInt(wrap * 0.5, 10))
|
||||
|
||||
return width
|
||||
}
|
||||
|
||||
// make sure any options set for aliases,
|
||||
// are copied to the keys being aliased.
|
||||
function normalizeAliases () {
|
||||
var demanded = yargs.getDemanded()
|
||||
var options = yargs.getOptions()
|
||||
|
||||
;(Object.keys(options.alias) || []).forEach(function (key) {
|
||||
options.alias[key].forEach(function (alias) {
|
||||
// copy descriptions.
|
||||
if (descriptions[alias]) self.describe(key, descriptions[alias])
|
||||
// copy demanded.
|
||||
if (demanded[alias]) yargs.demand(key, demanded[alias].msg)
|
||||
// type messages.
|
||||
if (~options.boolean.indexOf(alias)) yargs.boolean(key)
|
||||
if (~options.count.indexOf(alias)) yargs.count(key)
|
||||
if (~options.string.indexOf(alias)) yargs.string(key)
|
||||
if (~options.normalize.indexOf(alias)) yargs.normalize(key)
|
||||
if (~options.array.indexOf(alias)) yargs.array(key)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// given a set of keys, place any keys that are
|
||||
// ungrouped under the 'Options:' grouping.
|
||||
function addUngroupedKeys (keys, aliases, groups) {
|
||||
var groupedKeys = []
|
||||
var toCheck = null
|
||||
Object.keys(groups).forEach(function (group) {
|
||||
groupedKeys = groupedKeys.concat(groups[group])
|
||||
})
|
||||
|
||||
keys.forEach(function (key) {
|
||||
toCheck = [key].concat(aliases[key])
|
||||
if (!toCheck.some(function (k) {
|
||||
return groupedKeys.indexOf(k) !== -1
|
||||
})) {
|
||||
groups[defaultGroup].push(key)
|
||||
}
|
||||
})
|
||||
return groupedKeys
|
||||
}
|
||||
|
||||
self.showHelp = function (level) {
|
||||
level = level || 'error'
|
||||
console[level](self.help())
|
||||
}
|
||||
|
||||
self.functionDescription = function (fn) {
|
||||
var description = fn.name ? decamelize(fn.name, '-') : __('generated-value')
|
||||
return ['(', description, ')'].join('')
|
||||
}
|
||||
|
||||
self.stringifiedValues = function (values, separator) {
|
||||
var string = ''
|
||||
var sep = separator || ', '
|
||||
var array = [].concat(values)
|
||||
|
||||
if (!values || !array.length) return string
|
||||
|
||||
array.forEach(function (value) {
|
||||
if (string.length) string += sep
|
||||
string += JSON.stringify(value)
|
||||
})
|
||||
|
||||
return string
|
||||
}
|
||||
|
||||
// format the default-value-string displayed in
|
||||
// the right-hand column.
|
||||
function defaultString (value, defaultDescription) {
|
||||
var string = '[' + __('default:') + ' '
|
||||
|
||||
if (value === undefined && !defaultDescription) return null
|
||||
|
||||
if (defaultDescription) {
|
||||
string += defaultDescription
|
||||
} else {
|
||||
switch (typeof value) {
|
||||
case 'string':
|
||||
string += JSON.stringify(value)
|
||||
break
|
||||
case 'object':
|
||||
string += JSON.stringify(value)
|
||||
break
|
||||
default:
|
||||
string += value
|
||||
}
|
||||
}
|
||||
|
||||
return string + ']'
|
||||
}
|
||||
|
||||
// guess the width of the console window, max-width 80.
|
||||
function windowWidth () {
|
||||
return wsize.width ? Math.min(80, wsize.width) : null
|
||||
}
|
||||
|
||||
// logic for displaying application version.
|
||||
var version = null
|
||||
self.version = function (ver, opt, msg) {
|
||||
version = ver
|
||||
}
|
||||
|
||||
self.showVersion = function () {
|
||||
if (typeof version === 'function') console.log(version())
|
||||
else console.log(version)
|
||||
}
|
||||
|
||||
return self
|
||||
}
|
249
node_modules/doiuse/node_modules/yargs/lib/validation.js
generated
vendored
Normal file
249
node_modules/doiuse/node_modules/yargs/lib/validation.js
generated
vendored
Normal file
@@ -0,0 +1,249 @@
|
||||
// validation-type-stuff, missing params,
|
||||
// bad implications, custom checks.
|
||||
module.exports = function (yargs, usage, y18n) {
|
||||
var __ = y18n.__
|
||||
var __n = y18n.__n
|
||||
var self = {}
|
||||
|
||||
// validate appropriate # of non-option
|
||||
// arguments were provided, i.e., '_'.
|
||||
self.nonOptionCount = function (argv) {
|
||||
var demanded = yargs.getDemanded()
|
||||
var _s = argv._.length
|
||||
|
||||
if (demanded._ && (_s < demanded._.count || _s > demanded._.max)) {
|
||||
if (demanded._.msg !== undefined) {
|
||||
usage.fail(demanded._.msg)
|
||||
} else if (_s < demanded._.count) {
|
||||
usage.fail(
|
||||
__('Not enough non-option arguments: got %s, need at least %s', argv._.length, demanded._.count)
|
||||
)
|
||||
} else {
|
||||
usage.fail(
|
||||
__('Too many non-option arguments: got %s, maximum of %s', argv._.length, demanded._.max)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// make sure that any args that require an
|
||||
// value (--foo=bar), have a value.
|
||||
self.missingArgumentValue = function (argv) {
|
||||
var defaultValues = [true, false, '']
|
||||
var options = yargs.getOptions()
|
||||
|
||||
if (options.requiresArg.length > 0) {
|
||||
var missingRequiredArgs = []
|
||||
|
||||
options.requiresArg.forEach(function (key) {
|
||||
var value = argv[key]
|
||||
|
||||
// if a value is explicitly requested,
|
||||
// flag argument as missing if it does not
|
||||
// look like foo=bar was entered.
|
||||
if (~defaultValues.indexOf(value) ||
|
||||
(Array.isArray(value) && !value.length)) {
|
||||
missingRequiredArgs.push(key)
|
||||
}
|
||||
})
|
||||
|
||||
if (missingRequiredArgs.length > 0) {
|
||||
usage.fail(__n(
|
||||
'Missing argument value: %s',
|
||||
'Missing argument values: %s',
|
||||
missingRequiredArgs.length,
|
||||
missingRequiredArgs.join(', ')
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// make sure all the required arguments are present.
|
||||
self.requiredArguments = function (argv) {
|
||||
var demanded = yargs.getDemanded()
|
||||
var missing = null
|
||||
|
||||
Object.keys(demanded).forEach(function (key) {
|
||||
if (!argv.hasOwnProperty(key)) {
|
||||
missing = missing || {}
|
||||
missing[key] = demanded[key]
|
||||
}
|
||||
})
|
||||
|
||||
if (missing) {
|
||||
var customMsgs = []
|
||||
Object.keys(missing).forEach(function (key) {
|
||||
var msg = missing[key].msg
|
||||
if (msg && customMsgs.indexOf(msg) < 0) {
|
||||
customMsgs.push(msg)
|
||||
}
|
||||
})
|
||||
|
||||
var customMsg = customMsgs.length ? '\n' + customMsgs.join('\n') : ''
|
||||
|
||||
usage.fail(__n(
|
||||
'Missing required argument: %s',
|
||||
'Missing required arguments: %s',
|
||||
Object.keys(missing).length,
|
||||
Object.keys(missing).join(', ') + customMsg
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
// check for unknown arguments (strict-mode).
|
||||
self.unknownArguments = function (argv, aliases) {
|
||||
var aliasLookup = {}
|
||||
var descriptions = usage.getDescriptions()
|
||||
var demanded = yargs.getDemanded()
|
||||
var unknown = []
|
||||
|
||||
Object.keys(aliases).forEach(function (key) {
|
||||
aliases[key].forEach(function (alias) {
|
||||
aliasLookup[alias] = key
|
||||
})
|
||||
})
|
||||
|
||||
Object.keys(argv).forEach(function (key) {
|
||||
if (key !== '$0' && key !== '_' &&
|
||||
!descriptions.hasOwnProperty(key) &&
|
||||
!demanded.hasOwnProperty(key) &&
|
||||
!aliasLookup.hasOwnProperty(key)) {
|
||||
unknown.push(key)
|
||||
}
|
||||
})
|
||||
|
||||
if (unknown.length > 0) {
|
||||
usage.fail(__n(
|
||||
'Unknown argument: %s',
|
||||
'Unknown arguments: %s',
|
||||
unknown.length,
|
||||
unknown.join(', ')
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
// validate arguments limited to enumerated choices
|
||||
self.limitedChoices = function (argv) {
|
||||
var options = yargs.getOptions()
|
||||
var invalid = {}
|
||||
|
||||
if (!Object.keys(options.choices).length) return
|
||||
|
||||
Object.keys(argv).forEach(function (key) {
|
||||
if (key !== '$0' && key !== '_' &&
|
||||
options.choices.hasOwnProperty(key)) {
|
||||
[].concat(argv[key]).forEach(function (value) {
|
||||
// TODO case-insensitive configurability
|
||||
if (options.choices[key].indexOf(value) === -1) {
|
||||
invalid[key] = (invalid[key] || []).concat(value)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
var invalidKeys = Object.keys(invalid)
|
||||
|
||||
if (!invalidKeys.length) return
|
||||
|
||||
var msg = __('Invalid values:')
|
||||
invalidKeys.forEach(function (key) {
|
||||
msg += '\n ' + __(
|
||||
'Argument: %s, Given: %s, Choices: %s',
|
||||
key,
|
||||
usage.stringifiedValues(invalid[key]),
|
||||
usage.stringifiedValues(options.choices[key])
|
||||
)
|
||||
})
|
||||
usage.fail(msg)
|
||||
}
|
||||
|
||||
// custom checks, added using the `check` option on yargs.
|
||||
var checks = []
|
||||
self.check = function (f) {
|
||||
checks.push(f)
|
||||
}
|
||||
|
||||
self.customChecks = function (argv, aliases) {
|
||||
checks.forEach(function (f) {
|
||||
try {
|
||||
var result = f(argv, aliases)
|
||||
if (!result) {
|
||||
usage.fail(__('Argument check failed: %s', f.toString()))
|
||||
} else if (typeof result === 'string') {
|
||||
usage.fail(result)
|
||||
}
|
||||
} catch (err) {
|
||||
usage.fail(err.message ? err.message : err)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// check implications, argument foo implies => argument bar.
|
||||
var implied = {}
|
||||
self.implies = function (key, value) {
|
||||
if (typeof key === 'object') {
|
||||
Object.keys(key).forEach(function (k) {
|
||||
self.implies(k, key[k])
|
||||
})
|
||||
} else {
|
||||
implied[key] = value
|
||||
}
|
||||
}
|
||||
self.getImplied = function () {
|
||||
return implied
|
||||
}
|
||||
|
||||
self.implications = function (argv) {
|
||||
var implyFail = []
|
||||
|
||||
Object.keys(implied).forEach(function (key) {
|
||||
var num
|
||||
var origKey = key
|
||||
var value = implied[key]
|
||||
|
||||
// convert string '1' to number 1
|
||||
num = Number(key)
|
||||
key = isNaN(num) ? key : num
|
||||
|
||||
if (typeof key === 'number') {
|
||||
// check length of argv._
|
||||
key = argv._.length >= key
|
||||
} else if (key.match(/^--no-.+/)) {
|
||||
// check if key doesn't exist
|
||||
key = key.match(/^--no-(.+)/)[1]
|
||||
key = !argv[key]
|
||||
} else {
|
||||
// check if key exists
|
||||
key = argv[key]
|
||||
}
|
||||
|
||||
num = Number(value)
|
||||
value = isNaN(num) ? value : num
|
||||
|
||||
if (typeof value === 'number') {
|
||||
value = argv._.length >= value
|
||||
} else if (value.match(/^--no-.+/)) {
|
||||
value = value.match(/^--no-(.+)/)[1]
|
||||
value = !argv[value]
|
||||
} else {
|
||||
value = argv[value]
|
||||
}
|
||||
|
||||
if (key && !value) {
|
||||
implyFail.push(origKey)
|
||||
}
|
||||
})
|
||||
|
||||
if (implyFail.length) {
|
||||
var msg = __('Implications failed:') + '\n'
|
||||
|
||||
implyFail.forEach(function (key) {
|
||||
msg += (' ' + key + ' -> ' + implied[key])
|
||||
})
|
||||
|
||||
usage.fail(msg)
|
||||
}
|
||||
}
|
||||
|
||||
return self
|
||||
}
|
36
node_modules/doiuse/node_modules/yargs/locales/de.json
generated
vendored
Normal file
36
node_modules/doiuse/node_modules/yargs/locales/de.json
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"Commands:": "Kommandos:",
|
||||
"Options:": "Optionen:",
|
||||
"Examples:": "Beispiele:",
|
||||
"boolean": "boolean",
|
||||
"count": "Zähler",
|
||||
"string": "string",
|
||||
"array": "array",
|
||||
"required": "erforderlich",
|
||||
"default:": "Standard:",
|
||||
"choices:": "Möglichkeiten:",
|
||||
"generated-value": "Generierter-Wert",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "Nicht genügend Argumente ohne Optionen: %s vorhanden, mindestens %s benötigt",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "Zu viele Argumente ohne Optionen: %s vorhanden, maximal %s erlaubt",
|
||||
"Missing argument value: %s": {
|
||||
"one": "Fehlender Argumentwert: %s",
|
||||
"other": "Fehlende Argumentwerte: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "Fehlendes Argument: %s",
|
||||
"other": "Fehlende Argumente: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "Unbekanntes Argument: %s",
|
||||
"other": "Unbekannte Argumente: %s"
|
||||
},
|
||||
"Invalid values:": "Unzulässige Werte:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "Argument: %s, Gegeben: %s, Möglichkeiten: %s",
|
||||
"Argument check failed: %s": "Argumente-Check fehlgeschlagen: %s",
|
||||
"Implications failed:": "Implikationen fehlgeschlagen:",
|
||||
"Not enough arguments following: %s": "Nicht genügend Argumente nach: %s",
|
||||
"Invalid JSON config file: %s": "Fehlerhafte JSON-Config Datei: %s",
|
||||
"Path to JSON config file": "Pfad zur JSON-Config Datei",
|
||||
"Show help": "Hilfe anzeigen",
|
||||
"Show version number": "Version anzeigen"
|
||||
}
|
36
node_modules/doiuse/node_modules/yargs/locales/en.json
generated
vendored
Normal file
36
node_modules/doiuse/node_modules/yargs/locales/en.json
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"Commands:": "Commands:",
|
||||
"Options:": "Options:",
|
||||
"Examples:": "Examples:",
|
||||
"boolean": "boolean",
|
||||
"count": "count",
|
||||
"string": "string",
|
||||
"array": "array",
|
||||
"required": "required",
|
||||
"default:": "default:",
|
||||
"choices:": "choices:",
|
||||
"generated-value": "generated-value",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "Not enough non-option arguments: got %s, need at least %s",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "Too many non-option arguments: got %s, maximum of %s",
|
||||
"Missing argument value: %s": {
|
||||
"one": "Missing argument value: %s",
|
||||
"other": "Missing argument values: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "Missing required argument: %s",
|
||||
"other": "Missing required arguments: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "Unknown argument: %s",
|
||||
"other": "Unknown arguments: %s"
|
||||
},
|
||||
"Invalid values:": "Invalid values:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "Argument: %s, Given: %s, Choices: %s",
|
||||
"Argument check failed: %s": "Argument check failed: %s",
|
||||
"Implications failed:": "Implications failed:",
|
||||
"Not enough arguments following: %s": "Not enough arguments following: %s",
|
||||
"Invalid JSON config file: %s": "Invalid JSON config file: %s",
|
||||
"Path to JSON config file": "Path to JSON config file",
|
||||
"Show help": "Show help",
|
||||
"Show version number": "Show version number"
|
||||
}
|
36
node_modules/doiuse/node_modules/yargs/locales/es.json
generated
vendored
Normal file
36
node_modules/doiuse/node_modules/yargs/locales/es.json
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"Commands:": "Comandos:",
|
||||
"Options:": "Opciones:",
|
||||
"Examples:": "Ejemplos:",
|
||||
"boolean": "boolean",
|
||||
"count": "cuenta",
|
||||
"string": "cadena de caracteres",
|
||||
"array": "tabla",
|
||||
"required": "requisito",
|
||||
"default:": "defecto:",
|
||||
"choices:": "selección:",
|
||||
"generated-value": "valor-generado",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "Hacen falta argumentos no-opcionales: Número recibido %s, necesita por lo menos %s",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "Demasiados argumentos no-opcionales: Número recibido %s, máximo es %s",
|
||||
"Missing argument value: %s": {
|
||||
"one": "Falta argumento: %s",
|
||||
"other": "Faltan argumentos: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "Falta argumento requerido: %s",
|
||||
"other": "Faltan argumentos requeridos: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "Argumento desconocido: %s",
|
||||
"other": "Argumentos desconocidos: %s"
|
||||
},
|
||||
"Invalid values:": "Valores inválidos:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "Argumento: %s, Recibido: %s, Selección: %s",
|
||||
"Argument check failed: %s": "Verificación de argumento ha fracasado: %s",
|
||||
"Implications failed:": "Implicaciones fracasadas:",
|
||||
"Not enough arguments following: %s": "No hay suficientes argumentos después de: %s",
|
||||
"Invalid JSON config file: %s": "Archivo de configuración JSON inválido: %s",
|
||||
"Path to JSON config file": "Ruta al archivo de configuración JSON",
|
||||
"Show help": "Muestra ayuda",
|
||||
"Show version number": "Muestra número de versión"
|
||||
}
|
36
node_modules/doiuse/node_modules/yargs/locales/fr.json
generated
vendored
Normal file
36
node_modules/doiuse/node_modules/yargs/locales/fr.json
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"Commands:": "Commandes:",
|
||||
"Options:": "Options:",
|
||||
"Examples:": "Exemples:",
|
||||
"boolean": "booléen",
|
||||
"count": "comptage",
|
||||
"string": "chaine de caractère",
|
||||
"array": "tableau",
|
||||
"required": "requis",
|
||||
"default:": "défaut:",
|
||||
"choices:": "choix:",
|
||||
"generated-value": "valeur générée",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "Pas assez d'arguments non-option: reçu %s, besoin d'au moins %s",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "Trop d'arguments non-option: reçu %s, maximum %s",
|
||||
"Missing argument value: %s": {
|
||||
"one": "Argument manquant: %s",
|
||||
"other": "Arguments manquants: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "Argument requis manquant: %s",
|
||||
"other": "Arguments requis manquants: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "Argument inconnu: %s",
|
||||
"other": "Arguments inconnus: %s"
|
||||
},
|
||||
"Invalid values:": "Valeurs invalides:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "Argument: %s, Donné: %s, Choix: %s",
|
||||
"Argument check failed: %s": "Echec de la vérification de l'argument: %s",
|
||||
"Implications failed:": "Implications échouées:",
|
||||
"Not enough arguments following: %s": "Pas assez d'arguments suivant: %s",
|
||||
"Invalid JSON config file: %s": "Fichier de configuration JSON invalide: %s",
|
||||
"Path to JSON config file": "Chemin du fichier de configuration JSON",
|
||||
"Show help": "Affiche de l'aide",
|
||||
"Show version number": "Affiche le numéro de version"
|
||||
}
|
37
node_modules/doiuse/node_modules/yargs/locales/id.json
generated
vendored
Normal file
37
node_modules/doiuse/node_modules/yargs/locales/id.json
generated
vendored
Normal file
@@ -0,0 +1,37 @@
|
||||
|
||||
{
|
||||
"Commands:": "Perintah:",
|
||||
"Options:": "Pilihan:",
|
||||
"Examples:": "Contoh:",
|
||||
"boolean": "boolean",
|
||||
"count": "jumlah",
|
||||
"string": "string",
|
||||
"array": "larik",
|
||||
"required": "diperlukan",
|
||||
"default:": "bawaan:",
|
||||
"choices:": "pilihan:",
|
||||
"generated-value": "nilai-yang-dihasilkan",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "Argumen wajib kurang: hanya %s, minimal %s",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "Terlalu banyak argumen wajib: ada %s, maksimal %s",
|
||||
"Missing argument value: %s": {
|
||||
"one": "Kurang argumen: %s",
|
||||
"other": "Kurang argumen: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "Kurang argumen wajib: %s",
|
||||
"other": "Kurang argumen wajib: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "Argumen tak diketahui: %s",
|
||||
"other": "Argumen tak diketahui: %s"
|
||||
},
|
||||
"Invalid values:": "Nilai-nilai tidak valid:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "Argumen: %s, Diberikan: %s, Pilihan: %s",
|
||||
"Argument check failed: %s": "Pemeriksaan argument gagal: %s",
|
||||
"Implications failed:": "Implikasi gagal:",
|
||||
"Not enough arguments following: %s": "Kurang argumen untuk: %s",
|
||||
"Invalid JSON config file: %s": "Berkas konfigurasi JSON tidak valid: %s",
|
||||
"Path to JSON config file": "Alamat berkas konfigurasi JSON",
|
||||
"Show help": "Lihat bantuan",
|
||||
"Show version number": "Lihat nomor versi"
|
||||
}
|
36
node_modules/doiuse/node_modules/yargs/locales/ja.json
generated
vendored
Normal file
36
node_modules/doiuse/node_modules/yargs/locales/ja.json
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"Commands:": "コマンド:",
|
||||
"Options:": "オプション:",
|
||||
"Examples:": "例:",
|
||||
"boolean": "真偽",
|
||||
"count": "カウント",
|
||||
"string": "文字列",
|
||||
"array": "配列",
|
||||
"required": "必須",
|
||||
"default:": "デフォルト:",
|
||||
"choices:": "選択してください:",
|
||||
"generated-value": "生成された値",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "オプションではない引数が %s 個では不足しています。少なくとも %s 個の引数が必要です:",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "オプションではない引数が %s 個では多すぎます。最大で %s 個までです:",
|
||||
"Missing argument value: %s": {
|
||||
"one": "引数が見つかりません: %s",
|
||||
"other": "引数が見つかりません: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "必須の引数が見つかりません: %s",
|
||||
"other": "必須の引数が見つかりません: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "未知の引数です: %s",
|
||||
"other": "未知の引数です: %s"
|
||||
},
|
||||
"Invalid values:": "不正な値です:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "引数は %s です。指定できるのは %s つです。選択してください: %s",
|
||||
"Argument check failed: %s": "引数のチェックに失敗しました: %s",
|
||||
"Implications failed:": "オプションの組み合わせで不正が生じました:",
|
||||
"Not enough arguments following: %s": "次の引数が不足しています。: %s",
|
||||
"Invalid JSON config file: %s": "JSONの設定ファイルが不正です: %s",
|
||||
"Path to JSON config file": "JSONの設定ファイルまでのpath",
|
||||
"Show help": "ヘルプを表示",
|
||||
"Show version number": "バージョンを表示"
|
||||
}
|
36
node_modules/doiuse/node_modules/yargs/locales/ko.json
generated
vendored
Normal file
36
node_modules/doiuse/node_modules/yargs/locales/ko.json
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"Commands:": "명령:",
|
||||
"Options:": "옵션:",
|
||||
"Examples:": "예시:",
|
||||
"boolean": "여부",
|
||||
"count": "개수",
|
||||
"string": "문자열",
|
||||
"array": "배열",
|
||||
"required": "필수",
|
||||
"default:": "기본:",
|
||||
"choices:": "선택:",
|
||||
"generated-value": "생성된 값",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "옵션이 아닌 인자가 충분치 않습니다: %s개를 받았지만, 적어도 %s개는 필요합니다",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "옵션이 아닌 인자가 너무 많습니다: %s개를 받았지만, %s개 이하여야 합니다",
|
||||
"Missing argument value: %s": {
|
||||
"one": "인자값을 받지 못했습니다: %s",
|
||||
"other": "인자값들을 받지 못했습니다: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "필수 인자를 받지 못했습니다: %s",
|
||||
"other": "필수 인자들을 받지 못했습니다: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "알 수 없는 인자입니다: %s",
|
||||
"other": "알 수 없는 인자들입니다: %s"
|
||||
},
|
||||
"Invalid values:": "잘못된 값입니다:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "인자: %s, 입력받은 값: %s, 선택지: %s",
|
||||
"Argument check failed: %s": "유효하지 않은 인자입니다: %s",
|
||||
"Implications failed:": "옵션의 조합이 잘못되었습니다:",
|
||||
"Not enough arguments following: %s": "인자가 충분하게 주어지지 않았습니다: %s",
|
||||
"Invalid JSON config file: %s": "유효하지 않은 JSON 설정파일입니다: %s",
|
||||
"Path to JSON config file": "JSON 설정파일 경로",
|
||||
"Show help": "도움말을 보여줍니다",
|
||||
"Show version number": "버전 넘버를 보여줍니다"
|
||||
}
|
36
node_modules/doiuse/node_modules/yargs/locales/nb.json
generated
vendored
Normal file
36
node_modules/doiuse/node_modules/yargs/locales/nb.json
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"Commands:": "Kommandoer:",
|
||||
"Options:": "Alternativer:",
|
||||
"Examples:": "Eksempler:",
|
||||
"boolean": "boolsk",
|
||||
"count": "antall",
|
||||
"string": "streng",
|
||||
"array": "matrise",
|
||||
"required": "obligatorisk",
|
||||
"default:": "standard:",
|
||||
"choices:": "valg:",
|
||||
"generated-value": "generert-verdi",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "Ikke nok ikke-alternativ argumenter: fikk %s, trenger minst %s",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "For mange ikke-alternativ argumenter: fikk %s, maksimum %s",
|
||||
"Missing argument value: %s": {
|
||||
"one": "Mangler argument verdi: %s",
|
||||
"other": "Mangler argument verdier: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "Mangler obligatorisk argument: %s",
|
||||
"other": "Mangler obligatoriske argumenter: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "Ukjent argument: %s",
|
||||
"other": "Ukjente argumenter: %s"
|
||||
},
|
||||
"Invalid values:": "Ugyldige verdier:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "Argument: %s, Gitt: %s, Valg: %s",
|
||||
"Argument check failed: %s": "Argument sjekk mislyktes: %s",
|
||||
"Implications failed:": "Konsekvensene mislyktes:",
|
||||
"Not enough arguments following: %s": "Ikke nok følgende argumenter: %s",
|
||||
"Invalid JSON config file: %s": "Ugyldig JSON konfigurasjonsfil: %s",
|
||||
"Path to JSON config file": "Bane til JSON konfigurasjonsfil",
|
||||
"Show help": "Vis hjelp",
|
||||
"Show version number": "Vis versjonsnummer"
|
||||
}
|
12
node_modules/doiuse/node_modules/yargs/locales/pirate.json
generated
vendored
Normal file
12
node_modules/doiuse/node_modules/yargs/locales/pirate.json
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
{
|
||||
"Commands:": "Choose yer command:",
|
||||
"Options:": "Options for me hearties!",
|
||||
"Examples:": "Ex. marks the spot:",
|
||||
"required": "requi-yar-ed",
|
||||
"Missing required argument: %s": {
|
||||
"one": "Ye be havin' to set the followin' argument land lubber: %s",
|
||||
"other": "Ye be havin' to set the followin' arguments land lubber: %s"
|
||||
},
|
||||
"Show help": "Parlay this here code of conduct",
|
||||
"Show version number": "'Tis the version ye be askin' fer"
|
||||
}
|
36
node_modules/doiuse/node_modules/yargs/locales/pl.json
generated
vendored
Normal file
36
node_modules/doiuse/node_modules/yargs/locales/pl.json
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"Commands:": "Polecenia:",
|
||||
"Options:": "Opcje:",
|
||||
"Examples:": "Przykłady:",
|
||||
"boolean": "boolean",
|
||||
"count": "ilość",
|
||||
"string": "ciąg znaków",
|
||||
"array": "tablica",
|
||||
"required": "wymagany",
|
||||
"default:": "domyślny:",
|
||||
"choices:": "dostępne:",
|
||||
"generated-value": "wygenerowana-wartość",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "Niewystarczająca ilość argumentów: otrzymano %s, wymagane co najmniej %s",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "Zbyt duża ilość argumentów: otrzymano %s, wymagane co najwyżej %s",
|
||||
"Missing argument value: %s": {
|
||||
"one": "Brak wartości dla argumentu: %s",
|
||||
"other": "Brak wartości dla argumentów: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "Brak wymaganego argumentu: %s",
|
||||
"other": "Brak wymaganych argumentów: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "Nieznany argument: %s",
|
||||
"other": "Nieznane argumenty: %s"
|
||||
},
|
||||
"Invalid values:": "Nieprawidłowe wartości:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "Argument: %s, Otrzymano: %s, Dostępne: %s",
|
||||
"Argument check failed: %s": "Weryfikacja argumentów nie powiodła się: %s",
|
||||
"Implications failed:": "Założenia nie zostały spełnione:",
|
||||
"Not enough arguments following: %s": "Niewystarczająca ilość argumentów następujących po: %s",
|
||||
"Invalid JSON config file: %s": "Nieprawidłowy plik konfiguracyjny JSON: %s",
|
||||
"Path to JSON config file": "Ścieżka do pliku konfiguracyjnego JSON",
|
||||
"Show help": "Pokaż pomoc",
|
||||
"Show version number": "Pokaż numer wersji"
|
||||
}
|
36
node_modules/doiuse/node_modules/yargs/locales/pt.json
generated
vendored
Normal file
36
node_modules/doiuse/node_modules/yargs/locales/pt.json
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"Commands:": "Comandos:",
|
||||
"Options:": "Opções:",
|
||||
"Examples:": "Exemplos:",
|
||||
"boolean": "boolean",
|
||||
"count": "contagem",
|
||||
"string": "cadeia de caracteres",
|
||||
"array": "arranjo",
|
||||
"required": "requerido",
|
||||
"default:": "padrão:",
|
||||
"choices:": "escolhas:",
|
||||
"generated-value": "valor-gerado",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "Argumentos insuficientes não opcionais: Argumento %s, necessário pelo menos %s",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "Excesso de argumentos não opcionais: recebido %s, máximo de %s",
|
||||
"Missing argument value: %s": {
|
||||
"one": "Falta valor de argumento: %s",
|
||||
"other": "Falta valores de argumento: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "Falta argumento obrigatório: %s",
|
||||
"other": "Faltando argumentos obrigatórios: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "Argumento desconhecido: %s",
|
||||
"other": "Argumentos desconhecidos: %s"
|
||||
},
|
||||
"Invalid values:": "Valores inválidos:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "Argumento: %s, Dado: %s, Escolhas: %s",
|
||||
"Argument check failed: %s": "Verificação de argumento falhou: %s",
|
||||
"Implications failed:": "Implicações falharam:",
|
||||
"Not enough arguments following: %s": "Insuficientes argumentos a seguir: %s",
|
||||
"Invalid JSON config file: %s": "Arquivo de configuração em JSON esta inválido: %s",
|
||||
"Path to JSON config file": "Caminho para o arquivo de configuração em JSON",
|
||||
"Show help": "Mostra ajuda",
|
||||
"Show version number": "Mostra número de versão"
|
||||
}
|
36
node_modules/doiuse/node_modules/yargs/locales/pt_BR.json
generated
vendored
Normal file
36
node_modules/doiuse/node_modules/yargs/locales/pt_BR.json
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"Commands:": "Comandos:",
|
||||
"Options:": "Opções:",
|
||||
"Examples:": "Exemplos:",
|
||||
"boolean": "boolean",
|
||||
"count": "contagem",
|
||||
"string": "string",
|
||||
"array": "array",
|
||||
"required": "obrigatório",
|
||||
"default:": "padrão:",
|
||||
"choices:": "opções:",
|
||||
"generated-value": "valor-gerado",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "Argumentos insuficientes: Argumento %s, necessário pelo menos %s",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "Excesso de argumentos: recebido %s, máximo de %s",
|
||||
"Missing argument value: %s": {
|
||||
"one": "Falta valor de argumento: %s",
|
||||
"other": "Falta valores de argumento: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "Falta argumento obrigatório: %s",
|
||||
"other": "Faltando argumentos obrigatórios: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "Argumento desconhecido: %s",
|
||||
"other": "Argumentos desconhecidos: %s"
|
||||
},
|
||||
"Invalid values:": "Valores inválidos:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "Argumento: %s, Dado: %s, Opções: %s",
|
||||
"Argument check failed: %s": "Verificação de argumento falhou: %s",
|
||||
"Implications failed:": "Implicações falharam:",
|
||||
"Not enough arguments following: %s": "Argumentos insuficientes a seguir: %s",
|
||||
"Invalid JSON config file: %s": "Arquivo JSON de configuração inválido: %s",
|
||||
"Path to JSON config file": "Caminho para o arquivo JSON de configuração",
|
||||
"Show help": "Exibe ajuda",
|
||||
"Show version number": "Exibe a versão"
|
||||
}
|
36
node_modules/doiuse/node_modules/yargs/locales/tr.json
generated
vendored
Normal file
36
node_modules/doiuse/node_modules/yargs/locales/tr.json
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"Commands:": "Komutlar:",
|
||||
"Options:": "Seçenekler:",
|
||||
"Examples:": "Örnekler:",
|
||||
"boolean": "boolean",
|
||||
"count": "sayı",
|
||||
"string": "string",
|
||||
"array": "array",
|
||||
"required": "zorunlu",
|
||||
"default:": "varsayılan:",
|
||||
"choices:": "seçimler:",
|
||||
"generated-value": "oluşturulan-değer",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "Seçenek dışı argümanlar yetersiz: %s bulundu, %s gerekli",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "Seçenek dışı argümanlar gereğinden fazla: %s bulundu, azami %s",
|
||||
"Missing argument value: %s": {
|
||||
"one": "Eksik argüman değeri: %s",
|
||||
"other": "Eksik argüman değerleri: %s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "Eksik zorunlu argüman: %s",
|
||||
"other": "Eksik zorunlu argümanlar: %s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "Bilinmeyen argüman: %s",
|
||||
"other": "Bilinmeyen argümanlar: %s"
|
||||
},
|
||||
"Invalid values:": "Geçersiz değerler:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "Argüman: %s, Verilen: %s, Seçimler: %s",
|
||||
"Argument check failed: %s": "Argüman kontrolü başarısız oldu: %s",
|
||||
"Implications failed:": "Sonuçlar başarısız oldu:",
|
||||
"Not enough arguments following: %s": "%s için yeterli argüman bulunamadı",
|
||||
"Invalid JSON config file: %s": "Geçersiz JSON yapılandırma dosyası: %s",
|
||||
"Path to JSON config file": "JSON yapılandırma dosya konumu",
|
||||
"Show help": "Yardım detaylarını göster",
|
||||
"Show version number": "Versiyon detaylarını göster"
|
||||
}
|
36
node_modules/doiuse/node_modules/yargs/locales/zh.json
generated
vendored
Normal file
36
node_modules/doiuse/node_modules/yargs/locales/zh.json
generated
vendored
Normal file
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"Commands:": "命令:",
|
||||
"Options:": "选项:",
|
||||
"Examples:": "示例:",
|
||||
"boolean": "boolean",
|
||||
"count": "count",
|
||||
"string": "string",
|
||||
"array": "array",
|
||||
"required": "required",
|
||||
"default:": "默认值:",
|
||||
"choices:": "可选值:",
|
||||
"generated-value": "生成的值",
|
||||
"Not enough non-option arguments: got %s, need at least %s": "缺少 non-option 参数:传入了 %s 个, 至少需要 %s 个",
|
||||
"Too many non-option arguments: got %s, maximum of %s": "non-option 参数过多:传入了 %s 个, 最大允许 %s 个",
|
||||
"Missing argument value: %s": {
|
||||
"one": "没有给此选项指定值:%s",
|
||||
"other": "没有给这些选项指定值:%s"
|
||||
},
|
||||
"Missing required argument: %s": {
|
||||
"one": "缺少必须的选项:%s",
|
||||
"other": "缺少这些必须的选项:%s"
|
||||
},
|
||||
"Unknown argument: %s": {
|
||||
"one": "无法识别的选项:%s",
|
||||
"other": "无法识别这些选项:%s"
|
||||
},
|
||||
"Invalid values:": "无效的选项值:",
|
||||
"Argument: %s, Given: %s, Choices: %s": "选项名称: %s, 传入的值: %s, 可选的值:%s",
|
||||
"Argument check failed: %s": "选项值验证失败:%s",
|
||||
"Implications failed:": "缺少依赖的选项:",
|
||||
"Not enough arguments following: %s": "没有提供足够的值给此选项:%s",
|
||||
"Invalid JSON config file: %s": "无效的 JSON 配置文件:%s",
|
||||
"Path to JSON config file": "JSON 配置文件的路径",
|
||||
"Show help": "显示帮助信息",
|
||||
"Show version number": "显示版本号"
|
||||
}
|
166
node_modules/doiuse/node_modules/yargs/package.json
generated
vendored
Normal file
166
node_modules/doiuse/node_modules/yargs/package.json
generated
vendored
Normal file
@@ -0,0 +1,166 @@
|
||||
{
|
||||
"_args": [
|
||||
[
|
||||
"yargs@^3.5.4",
|
||||
"/Users/pmarsceill/_projects/just-the-docs/node_modules/doiuse"
|
||||
]
|
||||
],
|
||||
"_from": "yargs@>=3.5.4 <4.0.0",
|
||||
"_id": "yargs@3.32.0",
|
||||
"_inCache": true,
|
||||
"_installable": true,
|
||||
"_location": "/doiuse/yargs",
|
||||
"_nodeVersion": "3.2.0",
|
||||
"_npmUser": {
|
||||
"email": "ben@npmjs.com",
|
||||
"name": "bcoe"
|
||||
},
|
||||
"_npmVersion": "3.3.0",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"name": "yargs",
|
||||
"raw": "yargs@^3.5.4",
|
||||
"rawSpec": "^3.5.4",
|
||||
"scope": null,
|
||||
"spec": ">=3.5.4 <4.0.0",
|
||||
"type": "range"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/doiuse"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz",
|
||||
"_shasum": "03088e9ebf9e756b69751611d2a5ef591482c995",
|
||||
"_shrinkwrap": null,
|
||||
"_spec": "yargs@^3.5.4",
|
||||
"_where": "/Users/pmarsceill/_projects/just-the-docs/node_modules/doiuse",
|
||||
"author": {
|
||||
"email": "Alex.Ford@CodeTunnel.com",
|
||||
"name": "Alex Ford",
|
||||
"url": "http://CodeTunnel.com"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/bcoe/yargs/issues"
|
||||
},
|
||||
"contributors": [
|
||||
{
|
||||
"name": "Benjamin Coe",
|
||||
"email": "ben@npmjs.com",
|
||||
"url": "https://github.com/bcoe"
|
||||
},
|
||||
{
|
||||
"name": "Andrew Goode",
|
||||
"url": "https://github.com/nexdrew"
|
||||
},
|
||||
{
|
||||
"name": "Chris Needham",
|
||||
"email": "chris@chrisneedham.com",
|
||||
"url": "http://chrisneedham.com"
|
||||
},
|
||||
{
|
||||
"name": "James Nylen",
|
||||
"email": "jnylen@gmail.com",
|
||||
"url": "https://github.com/nylen"
|
||||
},
|
||||
{
|
||||
"name": "Benjamin Horsleben",
|
||||
"url": "https://github.com/fizker"
|
||||
},
|
||||
{
|
||||
"name": "Lin Clark",
|
||||
"url": "https://github.com/linclark"
|
||||
},
|
||||
{
|
||||
"name": "Tim Schaub",
|
||||
"url": "https://github.com/tschaub"
|
||||
}
|
||||
],
|
||||
"dependencies": {
|
||||
"camelcase": "^2.0.1",
|
||||
"cliui": "^3.0.3",
|
||||
"decamelize": "^1.1.1",
|
||||
"os-locale": "^1.4.0",
|
||||
"string-width": "^1.0.1",
|
||||
"window-size": "^0.1.4",
|
||||
"y18n": "^3.2.0"
|
||||
},
|
||||
"description": "Light-weight option parsing with an argv hash. No optstrings attached.",
|
||||
"devDependencies": {
|
||||
"chai": "^3.4.1",
|
||||
"chalk": "^1.1.1",
|
||||
"coveralls": "^2.11.4",
|
||||
"es6-promise": "^3.0.2",
|
||||
"hashish": "0.0.4",
|
||||
"mocha": "^2.3.4",
|
||||
"nyc": "^5.2.0",
|
||||
"standard": "^5.4.1",
|
||||
"which": "^1.1.2",
|
||||
"win-spawn": "^2.0.0"
|
||||
},
|
||||
"directories": {},
|
||||
"dist": {
|
||||
"shasum": "03088e9ebf9e756b69751611d2a5ef591482c995",
|
||||
"tarball": "https://registry.npmjs.org/yargs/-/yargs-3.32.0.tgz"
|
||||
},
|
||||
"engine": {
|
||||
"node": ">=0.10"
|
||||
},
|
||||
"files": [
|
||||
"LICENSE",
|
||||
"completion.sh.hbs",
|
||||
"index.js",
|
||||
"lib",
|
||||
"locales"
|
||||
],
|
||||
"gitHead": "e6eaddf457c27e71a0bbe156f17d2f82087f0d6f",
|
||||
"homepage": "https://github.com/bcoe/yargs#readme",
|
||||
"keywords": [
|
||||
"args",
|
||||
"argument",
|
||||
"cli",
|
||||
"command",
|
||||
"option",
|
||||
"parser",
|
||||
"parsing"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "./index.js",
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "bcoe",
|
||||
"email": "ben@npmjs.com"
|
||||
},
|
||||
{
|
||||
"name": "chevex",
|
||||
"email": "alex.ford@codetunnel.com"
|
||||
},
|
||||
{
|
||||
"name": "nexdrew",
|
||||
"email": "andrew@npmjs.com"
|
||||
},
|
||||
{
|
||||
"name": "nylen",
|
||||
"email": "jnylen@gmail.com"
|
||||
}
|
||||
],
|
||||
"name": "yargs",
|
||||
"optionalDependencies": {},
|
||||
"readme": "ERROR: No README data found!",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+ssh://git@github.com/bcoe/yargs.git"
|
||||
},
|
||||
"scripts": {
|
||||
"coverage": "nyc report --reporter=text-lcov | coveralls",
|
||||
"pretest": "standard",
|
||||
"test": "nyc --cache mocha --timeout=4000 --check-leaks"
|
||||
},
|
||||
"standard": {
|
||||
"globals": [
|
||||
"it"
|
||||
],
|
||||
"ignore": [
|
||||
"**/example/**"
|
||||
]
|
||||
},
|
||||
"version": "3.32.0"
|
||||
}
|
116
node_modules/doiuse/package.json
generated
vendored
Normal file
116
node_modules/doiuse/package.json
generated
vendored
Normal file
@@ -0,0 +1,116 @@
|
||||
{
|
||||
"_args": [
|
||||
[
|
||||
"doiuse@^2.4.1",
|
||||
"/Users/pmarsceill/_projects/just-the-docs/node_modules/stylelint"
|
||||
]
|
||||
],
|
||||
"_from": "doiuse@>=2.4.1 <3.0.0",
|
||||
"_id": "doiuse@2.5.0",
|
||||
"_inCache": true,
|
||||
"_installable": true,
|
||||
"_location": "/doiuse",
|
||||
"_nodeVersion": "6.2.2",
|
||||
"_npmOperationalInternal": {
|
||||
"host": "packages-12-west.internal.npmjs.com",
|
||||
"tmp": "tmp/doiuse-2.5.0.tgz_1474634923334_0.9426157961133868"
|
||||
},
|
||||
"_npmUser": {
|
||||
"email": "vestibule@anandthakker.net",
|
||||
"name": "anandthakker"
|
||||
},
|
||||
"_npmVersion": "3.9.5",
|
||||
"_phantomChildren": {
|
||||
"amdefine": "1.0.1",
|
||||
"camelcase": "2.1.1",
|
||||
"cliui": "3.2.0",
|
||||
"code-point-at": "1.1.0",
|
||||
"decamelize": "1.2.0",
|
||||
"is-fullwidth-code-point": "1.0.0",
|
||||
"os-locale": "1.4.0",
|
||||
"strip-ansi": "3.0.1",
|
||||
"window-size": "0.1.4",
|
||||
"y18n": "3.2.1"
|
||||
},
|
||||
"_requested": {
|
||||
"name": "doiuse",
|
||||
"raw": "doiuse@^2.4.1",
|
||||
"rawSpec": "^2.4.1",
|
||||
"scope": null,
|
||||
"spec": ">=2.4.1 <3.0.0",
|
||||
"type": "range"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"/stylelint"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/doiuse/-/doiuse-2.5.0.tgz",
|
||||
"_shasum": "c7f156965d054bf4d699a4067af1cadbc7350b7c",
|
||||
"_shrinkwrap": null,
|
||||
"_spec": "doiuse@^2.4.1",
|
||||
"_where": "/Users/pmarsceill/_projects/just-the-docs/node_modules/stylelint",
|
||||
"author": {
|
||||
"name": "Anand Thakker"
|
||||
},
|
||||
"bin": {
|
||||
"doiuse": "./cli.js"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/anandthakker/doiuse/issues"
|
||||
},
|
||||
"dependencies": {
|
||||
"browserslist": "^1.1.1",
|
||||
"caniuse-db": "^1.0.30000187",
|
||||
"css-rule-stream": "^1.1.0",
|
||||
"duplexer2": "0.0.2",
|
||||
"jsonfilter": "^1.1.2",
|
||||
"ldjson-stream": "^1.2.1",
|
||||
"lodash": "^4.0.0",
|
||||
"multimatch": "^2.0.0",
|
||||
"postcss": "^5.0.8",
|
||||
"source-map": "^0.4.2",
|
||||
"through2": "^0.6.3",
|
||||
"yargs": "^3.5.4"
|
||||
},
|
||||
"description": "Lint CSS for browser support against caniuse database.",
|
||||
"devDependencies": {
|
||||
"babel": "^5.2.13",
|
||||
"postcss-import": "^7.1.3",
|
||||
"standard": "^8.1.0",
|
||||
"tape": "^4.0.0"
|
||||
},
|
||||
"directories": {},
|
||||
"dist": {
|
||||
"shasum": "c7f156965d054bf4d699a4067af1cadbc7350b7c",
|
||||
"tarball": "https://registry.npmjs.org/doiuse/-/doiuse-2.5.0.tgz"
|
||||
},
|
||||
"gitHead": "f571fe11c493e7d3060d860cd3051160e67c3b27",
|
||||
"homepage": "https://github.com/anandthakker/doiuse",
|
||||
"keywords": [
|
||||
"browser",
|
||||
"css",
|
||||
"lint",
|
||||
"support"
|
||||
],
|
||||
"license": "MIT",
|
||||
"main": "lib/doiuse.js",
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "anandthakker",
|
||||
"email": "vestibule@anandthakker.net"
|
||||
}
|
||||
],
|
||||
"name": "doiuse",
|
||||
"optionalDependencies": {},
|
||||
"readme": "ERROR: No README data found!",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/anandthakker/doiuse.git"
|
||||
},
|
||||
"scripts": {
|
||||
"babel": "babel -d lib/ src/",
|
||||
"prepublish": "npm run babel",
|
||||
"pretest": "npm run babel",
|
||||
"test": "standard && tape test/*.js"
|
||||
},
|
||||
"version": "2.5.0"
|
||||
}
|
80
node_modules/doiuse/stream.js
generated
vendored
Normal file
80
node_modules/doiuse/stream.js
generated
vendored
Normal file
@@ -0,0 +1,80 @@
|
||||
var through = require('through2')
|
||||
var duplexer = require('duplexer2')
|
||||
var rules = require('css-rule-stream')
|
||||
var sourcemap = require('source-map')
|
||||
|
||||
var postcss = require('postcss')
|
||||
var doiuse = require('./')
|
||||
|
||||
module.exports = stream
|
||||
|
||||
/**
|
||||
* @param {Object} options (browsers, ignore, etc.)
|
||||
* @param {string} [filename] Filename for outputting source code locations.
|
||||
*/
|
||||
function stream (options, filename) {
|
||||
var inp = rules()
|
||||
filename = filename || '<streaming css input>'
|
||||
|
||||
var processor
|
||||
|
||||
var out = through.obj(write)
|
||||
var duplex = duplexer(inp, out)
|
||||
|
||||
try {
|
||||
processor = postcss([doiuse({
|
||||
browsers: options.browsers,
|
||||
ignore: options.ignore,
|
||||
onFeatureUsage: pushUsage
|
||||
})])
|
||||
|
||||
inp.pipe(out)
|
||||
} catch (e) {
|
||||
setImmediate(function () { duplex.emit('error', e) })
|
||||
}
|
||||
|
||||
return duplex
|
||||
|
||||
function write (rule, enc, next) {
|
||||
try {
|
||||
var mapper = new sourcemap.SourceMapGenerator()
|
||||
|
||||
var lines = rule.content.split('\n')
|
||||
var oline = rule.line
|
||||
var ocol = rule.column
|
||||
for (var line = 0; line < lines.length; line++) {
|
||||
mapper.addMapping({
|
||||
generated: { line: line + 1, column: 1 },
|
||||
original: { line: oline, column: ocol },
|
||||
source: filename
|
||||
})
|
||||
mapper.addMapping({
|
||||
generated: { line: line + 1, column: lines[line].length },
|
||||
original: { line: oline, column: ocol + lines[line].length },
|
||||
source: filename
|
||||
})
|
||||
oline++
|
||||
ocol = 1
|
||||
}
|
||||
|
||||
processor.process(rule.content, { map: { prev: mapper.toString() } })
|
||||
.then(function (result) { next() })
|
||||
.catch(handleError)
|
||||
} catch (e) {
|
||||
handleError(e)
|
||||
}
|
||||
|
||||
function handleError (error) {
|
||||
if (options.skipErrors) {
|
||||
duplex.emit('warning', error)
|
||||
next()
|
||||
} else {
|
||||
next(error)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function pushUsage (usage) {
|
||||
out.push(usage)
|
||||
}
|
||||
}
|
25
node_modules/doiuse/test/cases/backgrounds.css
generated
vendored
Normal file
25
node_modules/doiuse/test/cases/backgrounds.css
generated
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
expect:
|
||||
background-img-opts: 3
|
||||
multibackgrounds: 3
|
||||
css-canvas: 1
|
||||
*/
|
||||
|
||||
a {
|
||||
background-size: cover;
|
||||
background-origin: padding-box;
|
||||
background-clip: padding-box;
|
||||
}
|
||||
|
||||
div {
|
||||
background: url(a.gif), url(b.gif);
|
||||
background-image: url(c.gif), url(d.gif);
|
||||
}
|
||||
|
||||
.another {
|
||||
background-repeat: no-repeat, no-repeat;
|
||||
}
|
||||
|
||||
.wc {
|
||||
background: -webkit-canvas(squares);
|
||||
}
|
12
node_modules/doiuse/test/cases/counters.css
generated
vendored
Normal file
12
node_modules/doiuse/test/cases/counters.css
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
expect:
|
||||
css-counters: 2
|
||||
*/
|
||||
|
||||
article {
|
||||
counter-reset: section;
|
||||
}
|
||||
|
||||
h2 {
|
||||
counter-increment: section;
|
||||
}
|
23
node_modules/doiuse/test/cases/cursors.css
generated
vendored
Normal file
23
node_modules/doiuse/test/cases/cursors.css
generated
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
/*
|
||||
expect:
|
||||
css3-cursors: 13
|
||||
css3-cursors-newer: 2
|
||||
*/
|
||||
|
||||
|
||||
.klass { cursor: pointer; }
|
||||
.klass { cursor: none; }
|
||||
.klass { cursor: context-menu; }
|
||||
.klass { cursor: cell; }
|
||||
.klass { cursor: vertical-text; }
|
||||
.klass { cursor: alias; }
|
||||
.klass { cursor: copy; }
|
||||
.klass { cursor: no-drop; }
|
||||
.klass { cursor: not-allowed; }
|
||||
.klass { cursor: nesw-resize; }
|
||||
.klass { cursor: nwse-resize; }
|
||||
.klass { cursor: col-resize; }
|
||||
.klass { cursor: row-resize; }
|
||||
.klass { cursor: all-scroll; }
|
||||
.klass { cursor: zoom-in; }
|
||||
.klass { cursor: zoom-out; }
|
21
node_modules/doiuse/test/cases/gradient.css
generated
vendored
Normal file
21
node_modules/doiuse/test/cases/gradient.css
generated
vendored
Normal file
@@ -0,0 +1,21 @@
|
||||
/*
|
||||
expect:
|
||||
css-gradients: 2
|
||||
css-repeating-gradients: 2
|
||||
*/
|
||||
|
||||
.radial {
|
||||
background: radial-gradient(ellipse farthest-corner, black, white);
|
||||
}
|
||||
|
||||
.simple1 {
|
||||
background: linear-gradient(black, white);
|
||||
}
|
||||
|
||||
.repeating {
|
||||
background: repeating-linear-gradient(180deg,rgb(26,198,204),rgb(26,198,204) 7%, rgb(100,100,100) 10%);
|
||||
}
|
||||
|
||||
.color {
|
||||
background: red repeating-radial-gradient(ellipse farthest-corner, black, white);
|
||||
}
|
25
node_modules/doiuse/test/cases/ignore-comment.css
generated
vendored
Normal file
25
node_modules/doiuse/test/cases/ignore-comment.css
generated
vendored
Normal file
@@ -0,0 +1,25 @@
|
||||
/* doiuse-disable */
|
||||
disable-all {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
/* doiuse-enable flexbox */
|
||||
enable-specific {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
/* doiuse-disable flexbox, css-filters */
|
||||
disable-specific {
|
||||
display: flex;
|
||||
filter: brightness(50%);
|
||||
}
|
||||
|
||||
/* doiuse-enable */
|
||||
enable-all {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
/* doiuse-disable */
|
||||
/* applies to included files */
|
||||
@import "./ignore-include.css";
|
||||
/* but not to other file */
|
3
node_modules/doiuse/test/cases/ignore-file.css
generated
vendored
Normal file
3
node_modules/doiuse/test/cases/ignore-file.css
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
body {
|
||||
display: flex;
|
||||
}
|
2
node_modules/doiuse/test/cases/ignore-import.css
generated
vendored
Normal file
2
node_modules/doiuse/test/cases/ignore-import.css
generated
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
@import "./ignore-file.css";
|
||||
@import "./ignore-include.css";
|
3
node_modules/doiuse/test/cases/ignore-include.css
generated
vendored
Normal file
3
node_modules/doiuse/test/cases/ignore-include.css
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.container {
|
||||
user-select: none;
|
||||
}
|
12
node_modules/doiuse/test/cases/issue17.css
generated
vendored
Normal file
12
node_modules/doiuse/test/cases/issue17.css
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
expect:
|
||||
viewport-units: 0
|
||||
*/
|
||||
.icon {
|
||||
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC0AAAAtCAYAAAA6GuKaAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEwAACxMBAJqcGAAABbNJREFUWIXV2GlslEUcx/Hvc+1uu73Epsp9VFoQAokpCkaIIlAOEwIFSjlsINTaSiBVCSQajJAoKjQKC8gtEEQKCYLgwSWHFqGUy0AEJVIFCXah7e4C3d3n8MW2TbfnU9ke/JN98WzmmXwy+c08MyPQTFXStX83TdOPighdQ9WnjlEkSeKLcqg6rF4lXft3U3XjuITQud5GFgsYBvj9pvr02iylJ1PHbCmKjSkVQwWtrCqwQb1gZcRLxJw9TPSxPYidOjTaZwV4RVFsTG5OTk5o0fWCBSHwA6SnEwlf+BaeaVkIdjuROzc2CK8JBpCaHQyEL1qA1DsBteAcltHDEWKiMFxujGInYpeOWKem4Nu9Hx6UNwoGCEmmG4uE//BxAGzZM/Hu2I1aeJ7IbWsoHTCcyF49ebB+K8adElNggIeOh5kM+4/lg81G2LzZ2NInYzjvIkSEE3P6AOrZi/gPHTcNhoccaTNgeVAS1ikpqGcu4MmeR8SqTwBwJaciPBGLml/QJDA8RKZNrRKDB2J3LEG7dAWt4Bza5auohRcIX7QAvaQE3869tcD5E0Y6XAk9crOysuoEAwjNBQaw5y5Gv/EPD3JXgywTXXAAT2oGUv8+2HMXU/bsCPRbt4PBifHLZsyYUS8Y/kemzYIBtKK/UcaOQoyLRbAoCIoCmoZRUoqaX4B+u7jJYGhips2ApX59CJszCwwoX70JZehgon7+Fjz38G7+Cu3adbRr1/H/+BPoOl6btSx/QrJpMDQhHqbAfRKJWJuLd0selnFjELt3wTVqMmJsO/RiJ/qffwW1rwCvaAoYTE5Es5GwZUxHvXiZcscGfLv3Y00bj6Dr+HbuxSgtCwkYTGTaFLjiM60X3cCaNh4pIT6wGSovr5pooQI3ija1Dj8/gOiCg0Qd2Y16+izqqUKiDu4i+swhtKvX8ObtqQX+5SHA0ECmzUYicvtavFvzsEydgNSrJ57UWQj2cFAU1MILgRGvAb7VpUNudnZ2SQPdNh1taoQHJmF3LEGwWXENS8EoKcO+4VOk3gm4kyehO+8EtQ8VGOqYiKZWifhuhL/3Nt6NXyJ16Yh12kR8+37At2MPxp27qGfOB7X3hRAMNUba7KSL2rcN8akelD2XDLpOxLbPEaOjcL0yBcPlrgU+OXGk41bn9stCAQ5CmwLLMmJMNCgykTvWY7jduNMyAbCMG4N3y46gDDcHuAptdrdmd3yEGBfYmd1fuAT72lwMtwf3uPRaZ73mAgNIZsBChJ3I7WvxzJyLf/8hrOmpiE/GcX/2fIwyN9qvl1sMDCBrmn60oVOz/Ew/0A1QZLQrf6D5fJQ7NmCdkYb+rxNf3te1wKeaEQwgNngvYbFgX/UxYmI8hstDxKblKEMGoYwciv/IiVrNK8E3mxEMdXwRxdjHER6LQYyLJfrENyBJ+PL24JmSCYaBffmHaL/9zv33lwa951VkV0uAAQRnp366CAKCQNg7Odgy00FVuTd/MVKn9thyXufeG/Px7f2+3k68iuw6PXnMipYAQ+V+WhAIe/dNLKOH4R47HcuksYQvmk9p3xcAsH/2AYbfj/+7w60OrkQb1rTxgu21V/HMnIN69iLywKTAHYRuBI5KgNy/by10vh4AhEA9NsoeLEZsdSAnxlK/ZHIhE1jz8B4/V+2JrgQFE0A3j3n086bPRrl4jbMFcvKu/aBTcUpOurqpaPSrh6qlCrJnpyIOS6nyhElzcs3urgCGArtosVI34xUsoLw+p1bg6OCMj425LQquX4OzQ1yeKohL0p82K4fUFb34U2XUyJXmlM7HH0tYEQz1XCEa5N+i5LYEBRBCNhhq0NTA0crBti2CoMRGrV1sFQz2ZDoBHrXQmdmtzYABRrDHSbR0MFV/EygefIrvbOhiqTcQKsKOtgwFERIxHCQwgG3DzZMqoXY8KGAhcH6xbt65dazuaUv8BdpCJlwOuTeIAAAAASUVORK5CYII=');
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
background-size: 45px 45px;
|
||||
height: 45px;
|
||||
width: 45px;
|
||||
}
|
8
node_modules/doiuse/test/cases/object-fit.css
generated
vendored
Normal file
8
node_modules/doiuse/test/cases/object-fit.css
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
/*
|
||||
expect:
|
||||
object-fit: 1
|
||||
*/
|
||||
|
||||
div {
|
||||
object-fit: contain;
|
||||
}
|
8
node_modules/doiuse/test/cases/opacity.css
generated
vendored
Normal file
8
node_modules/doiuse/test/cases/opacity.css
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
/*
|
||||
expect:
|
||||
css-opacity: 1
|
||||
*/
|
||||
|
||||
.panel {
|
||||
opacity: .5;
|
||||
}
|
12
node_modules/doiuse/test/cases/outline.css
generated
vendored
Normal file
12
node_modules/doiuse/test/cases/outline.css
generated
vendored
Normal file
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
expect:
|
||||
outline: 2
|
||||
*/
|
||||
|
||||
button {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
a {
|
||||
outline-color: #000;
|
||||
}
|
8
node_modules/doiuse/test/cases/overflow-wrap.css
generated
vendored
Normal file
8
node_modules/doiuse/test/cases/overflow-wrap.css
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
/*
|
||||
expect:
|
||||
wordwrap: 1
|
||||
*/
|
||||
|
||||
p {
|
||||
overflow-wrap: break-word;
|
||||
}
|
6
node_modules/doiuse/test/cases/pointer-events.css
generated
vendored
Normal file
6
node_modules/doiuse/test/cases/pointer-events.css
generated
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
/*
|
||||
expect:
|
||||
pointer-events: 1
|
||||
*/
|
||||
|
||||
div .label { pointer-events: none; }
|
18
node_modules/doiuse/test/cases/queries.css
generated
vendored
Normal file
18
node_modules/doiuse/test/cases/queries.css
generated
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
/*
|
||||
expect:
|
||||
css-mediaqueries: 2
|
||||
css-featurequeries: 1
|
||||
css-media-resolution: 1
|
||||
*/
|
||||
|
||||
@media only screen {
|
||||
.ui { display: block; }
|
||||
}
|
||||
|
||||
@supports (transform-origin: 5% 5%) {
|
||||
.ui { transform-origin: 5% 5%; }
|
||||
}
|
||||
|
||||
@media (min-resolution: 192dpi) {
|
||||
.ui { width: 50%; }
|
||||
}
|
6
node_modules/doiuse/test/cases/rem.css
generated
vendored
Normal file
6
node_modules/doiuse/test/cases/rem.css
generated
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
/*
|
||||
expect:
|
||||
rem: 1
|
||||
*/
|
||||
|
||||
p { font-size: 1rem; }
|
8
node_modules/doiuse/test/cases/resize.css
generated
vendored
Normal file
8
node_modules/doiuse/test/cases/resize.css
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
/*
|
||||
expect:
|
||||
css-resize: 1
|
||||
*/
|
||||
|
||||
textarea {
|
||||
resize: both;
|
||||
}
|
47
node_modules/doiuse/test/cases/selectors.css
generated
vendored
Normal file
47
node_modules/doiuse/test/cases/selectors.css
generated
vendored
Normal file
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
expect:
|
||||
css-sel2: 16
|
||||
css-sel3: 20
|
||||
*/
|
||||
|
||||
|
||||
/* level 2 */
|
||||
* { color: #000000; }
|
||||
div > div { color: #000000; }
|
||||
div:first-child { color: #000000; }
|
||||
a:link { color: #000000; }
|
||||
a:visited { color: #000000; }
|
||||
a:active { color: #000000; }
|
||||
a:hover { color: #000000; }
|
||||
a:focus { color: #000000; }
|
||||
*:lang(en) { color: #000000; }
|
||||
* + * { color: #000000; }
|
||||
[href] { color: #000000; }
|
||||
[href="http://doiuse.com"] { color: #000000; }
|
||||
[class~="column"] { color: #000000; }
|
||||
[lang|="en"] { color: #000000; }
|
||||
.classname { color: #000000; }
|
||||
#elementid { color: #000000; }
|
||||
|
||||
|
||||
/* level 3 */
|
||||
[href^="http"] { color: #000000; }
|
||||
[href$=".com"] { color: #000000; }
|
||||
[href *= "http"] { color: #000000; }
|
||||
:root { color: #000000; }
|
||||
div:nth-child(2n+1) { color: #000000; }
|
||||
div:nth-last-child(2) { color: #000000; }
|
||||
div:nth-of-type(2) { color: #000000; }
|
||||
div:nth-last-of-type(2) { color: #000000; }
|
||||
div:last-child { color: #000000; }
|
||||
div:first-of-type { color: #000000; }
|
||||
div:last-of-type { color: #000000; }
|
||||
div:only-child { color: #000000; }
|
||||
div:only-of-type { color: #000000; }
|
||||
div:empty { color: #000000; }
|
||||
a:target { color: #000000; }
|
||||
button:enabled { color: #000000; }
|
||||
button:disabled { color: #000000; }
|
||||
option:checked { color: #000000; }
|
||||
div:not(.active) { color: #000000; }
|
||||
h1 ~ p { color: #000000; }
|
7
node_modules/doiuse/test/cases/text-overflow.css
generated
vendored
Normal file
7
node_modules/doiuse/test/cases/text-overflow.css
generated
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
/*
|
||||
expect:
|
||||
text-overflow: 1
|
||||
*/
|
||||
h1 {
|
||||
text-overflow: ellipsis;
|
||||
}
|
14
node_modules/doiuse/test/cases/unimplemented/3d-transform.css
generated
vendored
Normal file
14
node_modules/doiuse/test/cases/unimplemented/3d-transform.css
generated
vendored
Normal file
@@ -0,0 +1,14 @@
|
||||
a {
|
||||
transition: transform 1s;
|
||||
transform: rotateX(45deg)
|
||||
}
|
||||
|
||||
b {
|
||||
transform: translateX(45deg)
|
||||
}
|
||||
|
||||
@keyframes anim {
|
||||
from {
|
||||
transform: rotate(90deg);
|
||||
}
|
||||
}
|
3
node_modules/doiuse/test/cases/unimplemented/border-image.css
generated
vendored
Normal file
3
node_modules/doiuse/test/cases/unimplemented/border-image.css
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
a {
|
||||
border-image: linear-gradient(black, white) 20% fill stretch stretch;
|
||||
}
|
5
node_modules/doiuse/test/cases/unimplemented/border-radius.css
generated
vendored
Normal file
5
node_modules/doiuse/test/cases/unimplemented/border-radius.css
generated
vendored
Normal file
@@ -0,0 +1,5 @@
|
||||
a {
|
||||
border-radius: 5px;
|
||||
border-top-left-radius: 3px;
|
||||
border-bottom-right-radius: 3px;
|
||||
}
|
6
node_modules/doiuse/test/cases/unimplemented/cascade.css
generated
vendored
Normal file
6
node_modules/doiuse/test/cases/unimplemented/cascade.css
generated
vendored
Normal file
@@ -0,0 +1,6 @@
|
||||
a {
|
||||
flex-direction: row;
|
||||
transition: all 1s
|
||||
}
|
||||
|
||||
b { transition: all 1s }
|
4
node_modules/doiuse/test/cases/unimplemented/check-down.css
generated
vendored
Normal file
4
node_modules/doiuse/test/cases/unimplemented/check-down.css
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
* {
|
||||
transition: all 1s;
|
||||
-o-transition: all 1s
|
||||
}
|
8
node_modules/doiuse/test/cases/unimplemented/comments.css
generated
vendored
Normal file
8
node_modules/doiuse/test/cases/unimplemented/comments.css
generated
vendored
Normal file
@@ -0,0 +1,8 @@
|
||||
a {
|
||||
/* transition */
|
||||
transition: all 1s;
|
||||
height: calc(/* comment before */100% - /* comment inside */ 10px/* comment after */);
|
||||
}
|
||||
|
||||
/* placeholder */
|
||||
::placeholder { }
|
3
node_modules/doiuse/test/cases/unimplemented/custom-prefix.css
generated
vendored
Normal file
3
node_modules/doiuse/test/cases/unimplemented/custom-prefix.css
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
a {
|
||||
-evil-up: calc(10px + 1);
|
||||
}
|
29
node_modules/doiuse/test/cases/unimplemented/disabled.css
generated
vendored
Normal file
29
node_modules/doiuse/test/cases/unimplemented/disabled.css
generated
vendored
Normal file
@@ -0,0 +1,29 @@
|
||||
a {
|
||||
-webkit-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
transition: transform 1s;
|
||||
}
|
||||
|
||||
b {
|
||||
/* autoprefixer: off */
|
||||
-webkit-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
transition: transform 1s;
|
||||
}
|
||||
|
||||
@support (transition: 1s) {
|
||||
/* autoprefixer: off */
|
||||
|
||||
:fullscreen {
|
||||
-webkit-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
transition: transform 1s;
|
||||
}
|
||||
|
||||
::placeholder {
|
||||
/*autoprefixer: on*/
|
||||
-webkit-border-radius: 4px;
|
||||
border-radius: 4px;
|
||||
transition: transform 1s;
|
||||
}
|
||||
}
|
4
node_modules/doiuse/test/cases/unimplemented/double.css
generated
vendored
Normal file
4
node_modules/doiuse/test/cases/unimplemented/double.css
generated
vendored
Normal file
@@ -0,0 +1,4 @@
|
||||
a {
|
||||
flex-basis: 8.33333%;
|
||||
flex-basis: calc(100% / 12 * 1)
|
||||
}
|
3
node_modules/doiuse/test/cases/unimplemented/example.css
generated
vendored
Normal file
3
node_modules/doiuse/test/cases/unimplemented/example.css
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
:fullscreen a {
|
||||
transition: transform 1s
|
||||
}
|
16
node_modules/doiuse/test/cases/unimplemented/filter.css
generated
vendored
Normal file
16
node_modules/doiuse/test/cases/unimplemented/filter.css
generated
vendored
Normal file
@@ -0,0 +1,16 @@
|
||||
a {
|
||||
filter: blur(10px);
|
||||
transition: filter 2s;
|
||||
}
|
||||
|
||||
div {
|
||||
filter: progid:DXImageTransform.Microsoft.Alpha(opacity=50);
|
||||
}
|
||||
|
||||
b {
|
||||
filter: alpha(opacity=100);
|
||||
}
|
||||
|
||||
em {
|
||||
filter: Alpha(opacity=100);
|
||||
}
|
3
node_modules/doiuse/test/cases/unimplemented/flex-rewrite.css
generated
vendored
Normal file
3
node_modules/doiuse/test/cases/unimplemented/flex-rewrite.css
generated
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
.a {
|
||||
flex-grow: 0;
|
||||
}
|
54
node_modules/doiuse/test/cases/unimplemented/flexbox.css
generated
vendored
Normal file
54
node_modules/doiuse/test/cases/unimplemented/flexbox.css
generated
vendored
Normal file
@@ -0,0 +1,54 @@
|
||||
a {
|
||||
display: flex;
|
||||
flex-flow: row;
|
||||
order: 0;
|
||||
flex: 0 1 2;
|
||||
transition: flex 200ms;
|
||||
}
|
||||
.inline {
|
||||
display: inline-flex;
|
||||
align-self: auto;
|
||||
align-content: stretch;
|
||||
flex: auto;
|
||||
}
|
||||
|
||||
.a {
|
||||
flex-direction: row;
|
||||
justify-content: flex-start;
|
||||
align-items: flex-start;
|
||||
flex-wrap: nowrap;
|
||||
align-content: flex-start;
|
||||
align-self: flex-start;
|
||||
flex: none;
|
||||
}
|
||||
.b {
|
||||
flex-direction: row-reverse;
|
||||
justify-content: flex-end;
|
||||
align-items: flex-end;
|
||||
flex-wrap: wrap;
|
||||
align-content: flex-end;
|
||||
align-self: flex-end;
|
||||
flex-shrink: 1;
|
||||
}
|
||||
.c {
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
flex-wrap: reverse-wrap;
|
||||
align-content: center;
|
||||
align-self: center;
|
||||
flex-basis: auto;
|
||||
}
|
||||
.e {
|
||||
flex-direction: column-reverse;
|
||||
justify-content: space-between;
|
||||
align-items: baseline;
|
||||
align-content: space-between;
|
||||
align-self: baseline;
|
||||
}
|
||||
.f {
|
||||
justify-content: space-around;
|
||||
align-items: stretch;
|
||||
align-content: space-around;
|
||||
align-self: stretch;
|
||||
}
|
18
node_modules/doiuse/test/cases/unimplemented/fullscreen.css
generated
vendored
Normal file
18
node_modules/doiuse/test/cases/unimplemented/fullscreen.css
generated
vendored
Normal file
@@ -0,0 +1,18 @@
|
||||
|
||||
:fullscreen {
|
||||
background: black
|
||||
}
|
||||
|
||||
[href=:fullscreen] {}
|
||||
|
||||
:fullscreen a {
|
||||
box-sizing: border-box
|
||||
}
|
||||
|
||||
:fullscreen a {
|
||||
color: black
|
||||
}
|
||||
|
||||
:-moz-full-screen a {
|
||||
transform: translate3d(0, 0, 0);
|
||||
}
|
7
node_modules/doiuse/test/cases/unimplemented/intrinsic.css
generated
vendored
Normal file
7
node_modules/doiuse/test/cases/unimplemented/intrinsic.css
generated
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
a {
|
||||
width: fill-available;
|
||||
}
|
||||
|
||||
b {
|
||||
height: max-content;
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user