summaryrefslogtreecommitdiff
path: root/node_modules
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2023-10-14 16:27:06 +0800
committerlittleblack111 <littleblack11111@gmail.com>2023-10-14 16:27:06 +0800
commit2db6defc0b555d93d2363ba6c6dfa19df7dc7c11 (patch)
treea92c596973b150bbd1723b55facf38e0ab6258d8 /node_modules
parent6dce4e2e8ed35a26af389b7ab388113381350444 (diff)
update
Diffstat (limited to 'node_modules')
l---------node_modules/.bin/semver2
-rw-r--r--node_modules/.package-lock.json7278
-rw-r--r--node_modules/.yarn-integrity588
-rw-r--r--node_modules/@babel/cli/node_modules/commander/CHANGELOG.md436
-rw-r--r--node_modules/@babel/cli/node_modules/commander/Readme.md713
-rw-r--r--node_modules/@babel/cli/node_modules/commander/index.js1649
-rw-r--r--node_modules/@babel/cli/node_modules/commander/package.json41
-rw-r--r--node_modules/@babel/cli/node_modules/commander/typings/index.d.ts311
-rw-r--r--node_modules/@babel/cli/node_modules/slash/index.js11
-rw-r--r--node_modules/@babel/cli/node_modules/slash/readme.md44
l---------node_modules/@babel/core/node_modules/.bin/json51
l---------node_modules/@babel/core/node_modules/.bin/parser1
l---------node_modules/@babel/core/node_modules/.bin/semver1
l---------node_modules/@babel/generator/node_modules/.bin/jsesc1
l---------node_modules/@babel/helper-compilation-targets/node_modules/.bin/browserslist1
l---------node_modules/@babel/helper-compilation-targets/node_modules/.bin/semver1
l---------node_modules/@babel/helper-create-class-features-plugin/node_modules/.bin/semver1
l---------node_modules/@babel/helper-create-regexp-features-plugin/node_modules/.bin/semver1
l---------node_modules/@babel/helper-define-polyfill-provider/node_modules/.bin/resolve1
l---------node_modules/@babel/preset-env/node_modules/.bin/semver1
l---------node_modules/@babel/template/node_modules/.bin/parser1
l---------node_modules/@babel/traverse/node_modules/.bin/parser1
-rw-r--r--node_modules/ansi-regex/index.js10
-rw-r--r--node_modules/ansi-regex/license20
-rw-r--r--node_modules/ansi-regex/package.json115
-rw-r--r--node_modules/ansi-regex/readme.md57
-rw-r--r--node_modules/ansi-styles/index.js136
-rw-r--r--node_modules/ansi-styles/package.json22
-rw-r--r--node_modules/ansi-styles/readme.md33
l---------node_modules/autoprefixer/node_modules/.bin/browserslist1
l---------node_modules/babel-plugin-polyfill-corejs2/node_modules/.bin/semver1
-rw-r--r--node_modules/balanced-match/.npmignore (renamed from node_modules/laggard/node_modules/balanced-match/.npmignore)0
-rw-r--r--node_modules/balanced-match/README.md6
-rw-r--r--node_modules/balanced-match/index.js4
-rw-r--r--node_modules/balanced-match/package.json7
-rw-r--r--node_modules/brace-expansion/node_modules/balanced-match/.github/FUNDING.yml (renamed from node_modules/balanced-match/.github/FUNDING.yml)0
-rw-r--r--node_modules/brace-expansion/node_modules/balanced-match/LICENSE.md (renamed from node_modules/laggard/node_modules/balanced-match/LICENSE.md)0
-rw-r--r--node_modules/brace-expansion/node_modules/balanced-match/README.md (renamed from node_modules/laggard/node_modules/balanced-match/README.md)6
-rw-r--r--node_modules/brace-expansion/node_modules/balanced-match/index.js (renamed from node_modules/postcss-quantity-queries/node_modules/balanced-match/index.js)4
-rw-r--r--node_modules/brace-expansion/node_modules/balanced-match/package.json (renamed from node_modules/postcss-fixes/node_modules/balanced-match/package.json)7
l---------node_modules/browserslist/node_modules/.bin/update-browserslist-db1
l---------node_modules/caniuse-api/node_modules/.bin/browserslist1
-rw-r--r--node_modules/chalk/node_modules/ansi-styles/index.js165
-rw-r--r--node_modules/chalk/node_modules/color-convert/index.js78
-rw-r--r--node_modules/color-convert/conversions.js591
-rw-r--r--node_modules/color-convert/index.js51
-rw-r--r--node_modules/color-convert/package.json12
-rw-r--r--node_modules/color-convert/route.js44
-rw-r--r--node_modules/color-name/.eslintrc.json (renamed from node_modules/chalk/node_modules/color-name/.eslintrc.json)0
-rw-r--r--node_modules/color-name/.npmignore (renamed from node_modules/chalk/node_modules/color-name/.npmignore)0
-rw-r--r--node_modules/color-name/package.json53
-rw-r--r--node_modules/color-name/test.js (renamed from node_modules/chalk/node_modules/color-name/test.js)0
-rw-r--r--node_modules/commander/CHANGELOG.md642
-rw-r--r--node_modules/commander/Readme.md814
-rw-r--r--node_modules/commander/index.js3278
-rw-r--r--node_modules/commander/package.json59
-rw-r--r--node_modules/commander/typings/index.d.ts490
l---------node_modules/core-js-compat/node_modules/.bin/browserslist1
-rwxr-xr-xnode_modules/cssnano-preset-default/node_modules/postcss-calc/LICENSE (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/LICENSE)0
-rwxr-xr-xnode_modules/cssnano-preset-default/node_modules/postcss-calc/README.md (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/README.md)90
-rw-r--r--node_modules/cssnano-preset-default/node_modules/postcss-calc/package.json68
-rw-r--r--node_modules/cssnano-preset-default/node_modules/postcss-calc/src/index.js (renamed from node_modules/postcss-calc/src/index.js)0
-rw-r--r--node_modules/cssnano-preset-default/node_modules/postcss-calc/src/lib/convertUnit.js (renamed from node_modules/postcss-calc/src/lib/convertUnit.js)0
-rw-r--r--node_modules/cssnano-preset-default/node_modules/postcss-calc/src/lib/reducer.js (renamed from node_modules/postcss-calc/src/lib/reducer.js)0
-rw-r--r--node_modules/cssnano-preset-default/node_modules/postcss-calc/src/lib/stringifier.js (renamed from node_modules/postcss-calc/src/lib/stringifier.js)0
-rw-r--r--node_modules/cssnano-preset-default/node_modules/postcss-calc/src/lib/transform.js (renamed from node_modules/postcss-calc/src/lib/transform.js)0
-rw-r--r--node_modules/cssnano-preset-default/node_modules/postcss-calc/src/parser.d.ts (renamed from node_modules/postcss-calc/src/parser.d.ts)0
-rw-r--r--node_modules/cssnano-preset-default/node_modules/postcss-calc/src/parser.js (renamed from node_modules/postcss-calc/src/parser.js)0
-rw-r--r--node_modules/cssnano-preset-default/node_modules/postcss-calc/types/index.d.ts (renamed from node_modules/postcss-calc/types/index.d.ts)0
-rw-r--r--node_modules/cssnano-preset-default/node_modules/postcss-calc/types/lib/convertUnit.d.ts (renamed from node_modules/postcss-calc/types/lib/convertUnit.d.ts)0
-rw-r--r--node_modules/cssnano-preset-default/node_modules/postcss-calc/types/lib/reducer.d.ts (renamed from node_modules/postcss-calc/types/lib/reducer.d.ts)0
-rw-r--r--node_modules/cssnano-preset-default/node_modules/postcss-calc/types/lib/stringifier.d.ts (renamed from node_modules/postcss-calc/types/lib/stringifier.d.ts)0
-rw-r--r--node_modules/cssnano-preset-default/node_modules/postcss-calc/types/lib/transform.d.ts (renamed from node_modules/postcss-calc/types/lib/transform.d.ts)0
l---------node_modules/doiuse/node_modules/.bin/browserslist1
-rw-r--r--node_modules/has-ansi/node_modules/ansi-regex/index.js4
-rw-r--r--node_modules/has-ansi/node_modules/ansi-regex/license21
-rw-r--r--node_modules/has-ansi/node_modules/ansi-regex/package.json64
-rw-r--r--node_modules/has-ansi/node_modules/ansi-regex/readme.md39
l---------node_modules/laggard/node_modules/.bin/browserslist1
-rw-r--r--node_modules/laggard/node_modules/balanced-match/index.js58
l---------node_modules/laggard/node_modules/pixrem/node_modules/.bin/browserslist1
-rw-r--r--node_modules/laggard/node_modules/postcss-reporter/README.md143
-rw-r--r--node_modules/laggard/node_modules/postcss-reporter/index.js4
-rw-r--r--node_modules/laggard/node_modules/postcss-reporter/lib/formatter.js80
-rw-r--r--node_modules/laggard/node_modules/postcss-reporter/lib/reporter.js81
-rw-r--r--node_modules/laggard/node_modules/postcss-reporter/lib/util.js20
-rw-r--r--node_modules/laggard/node_modules/postcss-reporter/package.json46
-rwxr-xr-xnode_modules/laggard/node_modules/reduce-css-calc/CHANGELOG.md87
-rw-r--r--node_modules/laggard/node_modules/reduce-css-calc/package.json33
l---------node_modules/pixrem/node_modules/.bin/browserslist1
-rw-r--r--node_modules/pixrem/node_modules/postcss-value-parser/LICENSE (renamed from node_modules/reduce-css-calc/node_modules/postcss-value-parser/LICENSE)0
-rw-r--r--node_modules/pixrem/node_modules/postcss-value-parser/README.md (renamed from node_modules/reduce-css-calc/node_modules/postcss-value-parser/README.md)0
-rw-r--r--node_modules/pixrem/node_modules/postcss-value-parser/lib/index.js (renamed from node_modules/reduce-css-calc/node_modules/postcss-value-parser/lib/index.js)0
-rw-r--r--node_modules/pixrem/node_modules/postcss-value-parser/lib/parse.js (renamed from node_modules/reduce-css-calc/node_modules/postcss-value-parser/lib/parse.js)0
-rw-r--r--node_modules/pixrem/node_modules/postcss-value-parser/lib/stringify.js (renamed from node_modules/reduce-css-calc/node_modules/postcss-value-parser/lib/stringify.js)0
-rw-r--r--node_modules/pixrem/node_modules/postcss-value-parser/lib/unit.js (renamed from node_modules/reduce-css-calc/node_modules/postcss-value-parser/lib/unit.js)0
-rw-r--r--node_modules/pixrem/node_modules/postcss-value-parser/lib/walk.js (renamed from node_modules/reduce-css-calc/node_modules/postcss-value-parser/lib/walk.js)0
-rw-r--r--node_modules/pixrem/node_modules/postcss-value-parser/package.json (renamed from node_modules/reduce-css-calc/node_modules/postcss-value-parser/package.json)0
-rwxr-xr-xnode_modules/pixrem/node_modules/reduce-css-calc/CHANGELOG.md167
-rwxr-xr-xnode_modules/pixrem/node_modules/reduce-css-calc/LICENSE (renamed from node_modules/laggard/node_modules/reduce-css-calc/LICENSE)0
-rwxr-xr-xnode_modules/pixrem/node_modules/reduce-css-calc/README.md (renamed from node_modules/postcss-fixes/node_modules/pixrem/node_modules/reduce-css-calc/README.md)18
-rw-r--r--node_modules/pixrem/node_modules/reduce-css-calc/dist/index.js (renamed from node_modules/reduce-css-calc/dist/index.js)0
-rw-r--r--node_modules/pixrem/node_modules/reduce-css-calc/dist/lib/convert.js (renamed from node_modules/reduce-css-calc/dist/lib/convert.js)0
-rw-r--r--node_modules/pixrem/node_modules/reduce-css-calc/dist/lib/reducer.js (renamed from node_modules/reduce-css-calc/dist/lib/reducer.js)0
-rw-r--r--node_modules/pixrem/node_modules/reduce-css-calc/dist/lib/stringifier.js (renamed from node_modules/reduce-css-calc/dist/lib/stringifier.js)0
-rw-r--r--node_modules/pixrem/node_modules/reduce-css-calc/dist/parser.js (renamed from node_modules/reduce-css-calc/dist/parser.js)0
-rw-r--r--node_modules/pixrem/node_modules/reduce-css-calc/package.json (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/package.json)41
-rwxr-xr-xnode_modules/postcss-calc/CHANGELOG.md (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/CHANGELOG.md)0
-rwxr-xr-xnode_modules/postcss-calc/README.md90
-rw-r--r--node_modules/postcss-calc/dist/index.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/dist/index.js)0
-rw-r--r--node_modules/postcss-calc/dist/lib/transform.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/dist/lib/transform.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/picocolors/LICENSE (renamed from node_modules/postcss-fixes/node_modules/picocolors/LICENSE)0
-rw-r--r--node_modules/postcss-calc/node_modules/picocolors/README.md (renamed from node_modules/postcss-fixes/node_modules/picocolors/README.md)0
-rw-r--r--node_modules/postcss-calc/node_modules/picocolors/package.json (renamed from node_modules/postcss-fixes/node_modules/picocolors/package.json)0
-rw-r--r--node_modules/postcss-calc/node_modules/picocolors/picocolors.browser.js (renamed from node_modules/postcss-fixes/node_modules/picocolors/picocolors.browser.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/picocolors/picocolors.d.ts (renamed from node_modules/postcss-fixes/node_modules/picocolors/picocolors.d.ts)0
-rw-r--r--node_modules/postcss-calc/node_modules/picocolors/picocolors.js (renamed from node_modules/postcss-fixes/node_modules/picocolors/picocolors.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/picocolors/types.ts (renamed from node_modules/postcss-fixes/node_modules/picocolors/types.ts)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/API.md (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/API.md)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/CHANGELOG.md (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/CHANGELOG.md)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/LICENSE-MIT (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/LICENSE-MIT)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/README.md (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/README.md)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/index.js (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/index.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/parser.js (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/parser.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/processor.js (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/processor.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/attribute.js (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/attribute.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/className.js (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/className.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/combinator.js (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/combinator.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/comment.js (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/comment.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/container.js (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/container.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/id.js (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/id.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/namespace.js (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/namespace.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/nesting.js (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/nesting.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/node.js (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/node.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/pseudo.js (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/pseudo.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/root.js (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/root.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/selector.js (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/selector.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/string.js (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/string.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/tag.js (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/tag.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/types.js (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/types.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/universal.js (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/universal.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/sortAscending.js (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/sortAscending.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/tokenize.js (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/tokenize.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-selector-parser/package.json (renamed from node_modules/postcss-fixes/node_modules/postcss-selector-parser/package.json)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-value-parser/LICENSE22
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-value-parser/README.md253
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-value-parser/lib/index.js28
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-value-parser/lib/parse.js251
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-value-parser/lib/stringify.js48
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-value-parser/lib/unit.js49
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-value-parser/lib/walk.js22
-rw-r--r--node_modules/postcss-calc/node_modules/postcss-value-parser/package.json58
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/LICENSE (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/LICENSE)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/README.md (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/README.md)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/at-rule.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/at-rule.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/comment.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/comment.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/container.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/container.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/css-syntax-error.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/css-syntax-error.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/declaration.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/declaration.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/input.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/input.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/lazy-result.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/lazy-result.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/list.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/list.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/map-generator.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/map-generator.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/node.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/node.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/parse.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/parse.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/parser.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/parser.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/postcss.d.ts (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/postcss.d.ts)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/postcss.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/postcss.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/previous-map.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/previous-map.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/processor.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/processor.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/result.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/result.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/root.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/root.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/rule.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/rule.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/stringifier.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/stringifier.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/stringify.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/stringify.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/terminal-highlight.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/terminal-highlight.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/tokenize.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/tokenize.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/vendor.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/vendor.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/warn-once.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/warn-once.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/lib/warning.js (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/warning.js)0
-rw-r--r--node_modules/postcss-calc/node_modules/postcss/package.json (renamed from node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/package.json)0
-rwxr-xr-xnode_modules/postcss-calc/node_modules/reduce-css-calc/CHANGELOG.md167
-rwxr-xr-xnode_modules/postcss-calc/node_modules/reduce-css-calc/LICENSE (renamed from node_modules/postcss-fixes/node_modules/pixrem/node_modules/reduce-css-calc/LICENSE)0
-rwxr-xr-xnode_modules/postcss-calc/node_modules/reduce-css-calc/README.md (renamed from node_modules/laggard/node_modules/reduce-css-calc/README.md)18
-rw-r--r--node_modules/postcss-calc/node_modules/reduce-css-calc/dist/index.js51
-rw-r--r--node_modules/postcss-calc/node_modules/reduce-css-calc/dist/lib/convert.js38
-rw-r--r--node_modules/postcss-calc/node_modules/reduce-css-calc/dist/lib/reducer.js258
-rw-r--r--node_modules/postcss-calc/node_modules/reduce-css-calc/dist/lib/stringifier.js78
-rw-r--r--node_modules/postcss-calc/node_modules/reduce-css-calc/dist/parser.js3858
-rw-r--r--node_modules/postcss-calc/node_modules/reduce-css-calc/package.json49
-rw-r--r--node_modules/postcss-calc/package.json74
-rw-r--r--node_modules/postcss-cli/node_modules/postcss-reporter/LICENSE (renamed from node_modules/laggard/node_modules/postcss-reporter/LICENSE)0
-rw-r--r--node_modules/postcss-cli/node_modules/postcss-reporter/README.md12
-rw-r--r--node_modules/postcss-cli/node_modules/postcss-reporter/index.js4
-rw-r--r--node_modules/postcss-cli/node_modules/postcss-reporter/lib/formatter.js95
-rw-r--r--node_modules/postcss-cli/node_modules/postcss-reporter/lib/reporter.js101
-rw-r--r--node_modules/postcss-cli/node_modules/postcss-reporter/lib/util.js19
-rw-r--r--node_modules/postcss-cli/node_modules/postcss-reporter/package.json31
-rw-r--r--node_modules/postcss-cli/node_modules/slash/index.d.ts (renamed from node_modules/slash/index.d.ts)0
-rw-r--r--node_modules/postcss-cli/node_modules/slash/index.js9
-rw-r--r--node_modules/postcss-cli/node_modules/slash/license9
-rw-r--r--node_modules/postcss-cli/node_modules/slash/package.json (renamed from node_modules/@babel/cli/node_modules/slash/package.json)23
-rw-r--r--node_modules/postcss-cli/node_modules/slash/readme.md36
l---------node_modules/postcss-colormin/node_modules/.bin/browserslist1
l---------node_modules/postcss-convert-values/node_modules/.bin/browserslist1
l---------node_modules/postcss-fixes/node_modules/.bin/browserslist1
-rw-r--r--node_modules/postcss-fixes/node_modules/ansi-regex/index.js4
-rw-r--r--node_modules/postcss-fixes/node_modules/ansi-regex/license21
-rw-r--r--node_modules/postcss-fixes/node_modules/ansi-regex/package.json64
-rw-r--r--node_modules/postcss-fixes/node_modules/ansi-regex/readme.md39
-rw-r--r--node_modules/postcss-fixes/node_modules/balanced-match/.npmignore5
-rw-r--r--node_modules/postcss-fixes/node_modules/balanced-match/README.md91
l---------node_modules/postcss-fixes/node_modules/pixrem/node_modules/.bin/browserslist1
-rwxr-xr-xnode_modules/postcss-fixes/node_modules/pixrem/node_modules/reduce-css-calc/CHANGELOG.md87
-rwxr-xr-xnode_modules/postcss-fixes/node_modules/pixrem/node_modules/reduce-css-calc/index.js164
-rw-r--r--node_modules/postcss-fixes/node_modules/pixrem/node_modules/reduce-css-calc/package.json33
l---------node_modules/postcss-merge-rules/node_modules/.bin/browserslist1
l---------node_modules/postcss-minify-params/node_modules/.bin/browserslist1
l---------node_modules/postcss-normalize-unicode/node_modules/.bin/browserslist1
l---------node_modules/postcss-preset-env/node_modules/.bin/autoprefixer1
l---------node_modules/postcss-preset-env/node_modules/.bin/browserslist1
-rw-r--r--node_modules/postcss-quantity-queries/node_modules/balanced-match/.npmignore5
-rw-r--r--node_modules/postcss-quantity-queries/node_modules/balanced-match/LICENSE.md21
-rw-r--r--node_modules/postcss-quantity-queries/node_modules/balanced-match/package.json47
l---------node_modules/postcss-reduce-initial/node_modules/.bin/browserslist1
-rw-r--r--node_modules/postcss-reporter/CHANGELOG.md (renamed from node_modules/laggard/node_modules/postcss-reporter/CHANGELOG.md)0
-rw-r--r--node_modules/postcss-reporter/README.md141
-rw-r--r--node_modules/postcss-reporter/index.js4
-rw-r--r--node_modules/postcss-reporter/lib/formatter.js75
-rw-r--r--node_modules/postcss-reporter/lib/reporter.js134
-rw-r--r--node_modules/postcss-reporter/lib/util.js11
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/CHANGELOG.md552
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/CONTRIBUTING.md78
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/LICENSE20
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/README-cn.md349
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/README.md376
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/docs/architecture.md156
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/docs/guidelines/plugin.md195
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/docs/guidelines/runner.md143
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/docs/source-maps.md74
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/docs/syntax.md231
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/gulpfile.js97
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/at-rule.js131
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/comment.js61
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/container.js907
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/css-syntax-error.js256
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/declaration.js101
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/input.js204
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/lazy-result.js435
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/list.js95
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/map-generator.js323
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/node.js625
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/parse.js41
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/parser.js552
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/postcss.d.ts1301
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/postcss.js292
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/previous-map.js170
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/processor.js240
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/result.js206
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/root.js129
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/rule.js123
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/stringifier.js344
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/stringify.js17
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/terminal-highlight.js83
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/tokenize.js306
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/vendor.js52
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/warn-once.js14
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/lib/warning.js122
-rw-r--r--node_modules/postcss-reporter/node_modules/postcss/package.json25
-rw-r--r--node_modules/postcss-reporter/package.json39
l---------node_modules/postcss-selector-parser/node_modules/.bin/cssesc1
l---------node_modules/postcss-svgo/node_modules/.bin/svgo1
-rw-r--r--node_modules/postcss-unopacity/node_modules/ansi-regex/index.js4
-rw-r--r--node_modules/postcss-unopacity/node_modules/ansi-regex/license21
-rw-r--r--node_modules/postcss-unopacity/node_modules/ansi-regex/package.json64
-rw-r--r--node_modules/postcss-unopacity/node_modules/ansi-regex/readme.md39
-rw-r--r--node_modules/postcss-unroot/node_modules/ansi-regex/index.js4
-rw-r--r--node_modules/postcss-unroot/node_modules/ansi-regex/license21
-rw-r--r--node_modules/postcss-unroot/node_modules/ansi-regex/package.json64
-rw-r--r--node_modules/postcss-unroot/node_modules/ansi-regex/readme.md39
l---------node_modules/postcss/node_modules/.bin/nanoid1
-rwxr-xr-xnode_modules/reduce-css-calc/CHANGELOG.md122
-rwxr-xr-xnode_modules/reduce-css-calc/README.md18
-rwxr-xr-xnode_modules/reduce-css-calc/index.js (renamed from node_modules/laggard/node_modules/reduce-css-calc/index.js)0
-rw-r--r--node_modules/reduce-css-calc/package.json52
-rw-r--r--node_modules/reduce-function-call/node_modules/balanced-match/.github/FUNDING.yml2
-rw-r--r--node_modules/reduce-function-call/node_modules/balanced-match/LICENSE.md (renamed from node_modules/postcss-fixes/node_modules/balanced-match/LICENSE.md)0
-rw-r--r--node_modules/reduce-function-call/node_modules/balanced-match/README.md (renamed from node_modules/postcss-quantity-queries/node_modules/balanced-match/README.md)6
-rw-r--r--node_modules/reduce-function-call/node_modules/balanced-match/index.js (renamed from node_modules/postcss-fixes/node_modules/balanced-match/index.js)4
-rw-r--r--node_modules/reduce-function-call/node_modules/balanced-match/package.json (renamed from node_modules/laggard/node_modules/balanced-match/package.json)7
l---------node_modules/regexpu-core/node_modules/.bin/regjsparser1
l---------node_modules/rucksack-css/node_modules/.bin/browserslist1
l---------node_modules/rucksack-css/node_modules/.bin/laggard1
l---------node_modules/rucksack-css/node_modules/autoprefixer/node_modules/.bin/browserslist1
-rw-r--r--node_modules/rucksack-css/node_modules/postcss-reporter/CHANGELOG.md65
-rw-r--r--node_modules/rucksack-css/node_modules/postcss-reporter/LICENSE22
-rw-r--r--node_modules/rucksack-css/node_modules/postcss-reporter/README.md143
-rw-r--r--node_modules/rucksack-css/node_modules/postcss-reporter/index.js4
-rw-r--r--node_modules/rucksack-css/node_modules/postcss-reporter/lib/formatter.js80
-rw-r--r--node_modules/rucksack-css/node_modules/postcss-reporter/lib/reporter.js81
-rw-r--r--node_modules/rucksack-css/node_modules/postcss-reporter/lib/util.js20
-rw-r--r--node_modules/rucksack-css/node_modules/postcss-reporter/package.json46
-rw-r--r--node_modules/slash/index.js14
-rw-r--r--node_modules/slash/license2
-rw-r--r--node_modules/slash/package.json23
-rw-r--r--node_modules/slash/readme.md28
-rw-r--r--node_modules/strip-ansi/node_modules/ansi-regex/index.d.ts (renamed from node_modules/ansi-regex/index.d.ts)0
-rw-r--r--node_modules/strip-ansi/node_modules/ansi-regex/index.js10
-rw-r--r--node_modules/strip-ansi/node_modules/ansi-regex/license (renamed from node_modules/@babel/cli/node_modules/slash/license)0
-rw-r--r--node_modules/strip-ansi/node_modules/ansi-regex/package.json55
-rw-r--r--node_modules/strip-ansi/node_modules/ansi-regex/readme.md78
l---------node_modules/stylehacks/node_modules/.bin/browserslist1
-rw-r--r--node_modules/svgo/node_modules/commander/CHANGELOG.md440
-rw-r--r--node_modules/svgo/node_modules/commander/LICENSE (renamed from node_modules/@babel/cli/node_modules/commander/LICENSE)0
-rw-r--r--node_modules/svgo/node_modules/commander/Readme.md917
-rw-r--r--node_modules/svgo/node_modules/commander/esm.mjs (renamed from node_modules/commander/esm.mjs)0
-rw-r--r--node_modules/svgo/node_modules/commander/index.js2217
-rw-r--r--node_modules/svgo/node_modules/commander/package-support.json (renamed from node_modules/commander/package-support.json)0
-rw-r--r--node_modules/svgo/node_modules/commander/package.json68
-rw-r--r--node_modules/svgo/node_modules/commander/typings/index.d.ts627
l---------node_modules/update-browserslist-db/node_modules/.bin/browserslist1
-rw-r--r--node_modules/wrap-ansi/node_modules/ansi-styles/index.d.ts (renamed from node_modules/ansi-styles/index.d.ts)0
-rw-r--r--node_modules/wrap-ansi/node_modules/ansi-styles/index.js163
-rw-r--r--node_modules/wrap-ansi/node_modules/ansi-styles/license (renamed from node_modules/chalk/node_modules/ansi-styles/license)0
-rw-r--r--node_modules/wrap-ansi/node_modules/ansi-styles/package.json (renamed from node_modules/chalk/node_modules/ansi-styles/package.json)22
-rw-r--r--node_modules/wrap-ansi/node_modules/ansi-styles/readme.md (renamed from node_modules/chalk/node_modules/ansi-styles/readme.md)33
-rw-r--r--node_modules/wrap-ansi/node_modules/color-convert/CHANGELOG.md (renamed from node_modules/chalk/node_modules/color-convert/CHANGELOG.md)0
-rw-r--r--node_modules/wrap-ansi/node_modules/color-convert/LICENSE (renamed from node_modules/chalk/node_modules/color-convert/LICENSE)0
-rw-r--r--node_modules/wrap-ansi/node_modules/color-convert/README.md (renamed from node_modules/chalk/node_modules/color-convert/README.md)0
-rw-r--r--node_modules/wrap-ansi/node_modules/color-convert/conversions.js (renamed from node_modules/chalk/node_modules/color-convert/conversions.js)591
-rw-r--r--node_modules/wrap-ansi/node_modules/color-convert/index.js81
-rw-r--r--node_modules/wrap-ansi/node_modules/color-convert/package.json (renamed from node_modules/chalk/node_modules/color-convert/package.json)12
-rw-r--r--node_modules/wrap-ansi/node_modules/color-convert/route.js (renamed from node_modules/chalk/node_modules/color-convert/route.js)44
-rw-r--r--node_modules/wrap-ansi/node_modules/color-name/LICENSE (renamed from node_modules/chalk/node_modules/color-name/LICENSE)0
-rw-r--r--node_modules/wrap-ansi/node_modules/color-name/README.md (renamed from node_modules/chalk/node_modules/color-name/README.md)0
-rw-r--r--node_modules/wrap-ansi/node_modules/color-name/index.js (renamed from node_modules/chalk/node_modules/color-name/index.js)0
-rw-r--r--node_modules/wrap-ansi/node_modules/color-name/package.json (renamed from node_modules/chalk/node_modules/color-name/package.json)53
337 files changed, 24055 insertions, 17394 deletions
diff --git a/node_modules/.bin/semver b/node_modules/.bin/semver
index 5aaadf42..fb28e853 120000
--- a/node_modules/.bin/semver
+++ b/node_modules/.bin/semver
@@ -1 +1 @@
-../semver/bin/semver.js \ No newline at end of file
+../make-dir/node_modules/semver/bin/semver \ No newline at end of file
diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json
deleted file mode 100644
index 6b666fcc..00000000
--- a/node_modules/.package-lock.json
+++ /dev/null
@@ -1,7278 +0,0 @@
-{
- "name": "index.html",
- "version": "1.0.0",
- "lockfileVersion": 3,
- "requires": true,
- "packages": {
- "node_modules/@ampproject/remapping": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
- "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
- "dev": true,
- "dependencies": {
- "@jridgewell/gen-mapping": "^0.3.0",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/cli": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/cli/-/cli-7.23.0.tgz",
- "integrity": "sha512-17E1oSkGk2IwNILM4jtfAvgjt+ohmpfBky8aLerUfYZhiPNg7ca+CRCxZn8QDxwNhV/upsc2VHBCqGFIR+iBfA==",
- "dev": true,
- "dependencies": {
- "@jridgewell/trace-mapping": "^0.3.17",
- "commander": "^4.0.1",
- "convert-source-map": "^2.0.0",
- "fs-readdir-recursive": "^1.1.0",
- "glob": "^7.2.0",
- "make-dir": "^2.1.0",
- "slash": "^2.0.0"
- },
- "bin": {
- "babel": "bin/babel.js",
- "babel-external-helpers": "bin/babel-external-helpers.js"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "optionalDependencies": {
- "@nicolo-ribaudo/chokidar-2": "2.1.8-no-fsevents.3",
- "chokidar": "^3.4.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/cli/node_modules/commander": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
- "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/@babel/cli/node_modules/slash": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
- "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/@babel/code-frame": {
- "version": "7.22.13",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz",
- "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==",
- "dev": true,
- "dependencies": {
- "@babel/highlight": "^7.22.13",
- "chalk": "^2.4.2"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/compat-data": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.2.tgz",
- "integrity": "sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/core": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.2.tgz",
- "integrity": "sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==",
- "dev": true,
- "dependencies": {
- "@ampproject/remapping": "^2.2.0",
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.23.0",
- "@babel/helper-compilation-targets": "^7.22.15",
- "@babel/helper-module-transforms": "^7.23.0",
- "@babel/helpers": "^7.23.2",
- "@babel/parser": "^7.23.0",
- "@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.2",
- "@babel/types": "^7.23.0",
- "convert-source-map": "^2.0.0",
- "debug": "^4.1.0",
- "gensync": "^1.0.0-beta.2",
- "json5": "^2.2.3",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/babel"
- }
- },
- "node_modules/@babel/generator": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz",
- "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.23.0",
- "@jridgewell/gen-mapping": "^0.3.2",
- "@jridgewell/trace-mapping": "^0.3.17",
- "jsesc": "^2.5.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-annotate-as-pure": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz",
- "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz",
- "integrity": "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.22.15"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-compilation-targets": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz",
- "integrity": "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==",
- "dev": true,
- "dependencies": {
- "@babel/compat-data": "^7.22.9",
- "@babel/helper-validator-option": "^7.22.15",
- "browserslist": "^4.21.9",
- "lru-cache": "^5.1.1",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-create-class-features-plugin": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz",
- "integrity": "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-environment-visitor": "^7.22.5",
- "@babel/helper-function-name": "^7.22.5",
- "@babel/helper-member-expression-to-functions": "^7.22.15",
- "@babel/helper-optimise-call-expression": "^7.22.5",
- "@babel/helper-replace-supers": "^7.22.9",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-create-regexp-features-plugin": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz",
- "integrity": "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==",
- "dev": true,
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "regexpu-core": "^5.3.1",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-define-polyfill-provider": {
- "version": "0.4.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz",
- "integrity": "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==",
- "dev": true,
- "dependencies": {
- "@babel/helper-compilation-targets": "^7.22.6",
- "@babel/helper-plugin-utils": "^7.22.5",
- "debug": "^4.1.1",
- "lodash.debounce": "^4.0.8",
- "resolve": "^1.14.2"
- },
- "peerDependencies": {
- "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
- }
- },
- "node_modules/@babel/helper-environment-visitor": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz",
- "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-function-name": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz",
- "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==",
- "dev": true,
- "dependencies": {
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.23.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-hoist-variables": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz",
- "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-member-expression-to-functions": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz",
- "integrity": "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.23.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-imports": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz",
- "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.22.15"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-module-transforms": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz",
- "integrity": "sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-module-imports": "^7.22.15",
- "@babel/helper-simple-access": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/helper-validator-identifier": "^7.22.20"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-optimise-call-expression": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz",
- "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-plugin-utils": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz",
- "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-remap-async-to-generator": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz",
- "integrity": "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-wrap-function": "^7.22.20"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-replace-supers": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz",
- "integrity": "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-member-expression-to-functions": "^7.22.15",
- "@babel/helper-optimise-call-expression": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/helper-simple-access": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz",
- "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-skip-transparent-expression-wrappers": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz",
- "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-split-export-declaration": {
- "version": "7.22.6",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz",
- "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==",
- "dev": true,
- "dependencies": {
- "@babel/types": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-string-parser": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz",
- "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-identifier": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
- "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-validator-option": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz",
- "integrity": "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helper-wrap-function": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz",
- "integrity": "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-function-name": "^7.22.5",
- "@babel/template": "^7.22.15",
- "@babel/types": "^7.22.19"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/helpers": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.2.tgz",
- "integrity": "sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==",
- "dev": true,
- "dependencies": {
- "@babel/template": "^7.22.15",
- "@babel/traverse": "^7.23.2",
- "@babel/types": "^7.23.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/highlight": {
- "version": "7.22.20",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz",
- "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-validator-identifier": "^7.22.20",
- "chalk": "^2.4.2",
- "js-tokens": "^4.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/parser": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz",
- "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==",
- "dev": true,
- "bin": {
- "parser": "bin/babel-parser.js"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz",
- "integrity": "sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz",
- "integrity": "sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
- "@babel/plugin-transform-optional-chaining": "^7.22.15"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.13.0"
- }
- },
- "node_modules/@babel/plugin-proposal-private-property-in-object": {
- "version": "7.21.0-placeholder-for-preset-env.2",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz",
- "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-async-generators": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz",
- "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-class-properties": {
- "version": "7.12.13",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz",
- "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.12.13"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-class-static-block": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz",
- "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-dynamic-import": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
- "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-export-namespace-from": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz",
- "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.3"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-import-assertions": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz",
- "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-import-attributes": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz",
- "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-import-meta": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz",
- "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-json-strings": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz",
- "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-logical-assignment-operators": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz",
- "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-numeric-separator": {
- "version": "7.10.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
- "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.10.4"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-optional-catch-binding": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-optional-chaining": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.8.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-private-property-in-object": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz",
- "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-top-level-await": {
- "version": "7.14.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz",
- "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-syntax-unicode-sets-regex": {
- "version": "7.18.6",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz",
- "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.18.6",
- "@babel/helper-plugin-utils": "^7.18.6"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/plugin-transform-arrow-functions": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz",
- "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-async-generator-functions": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz",
- "integrity": "sha512-BBYVGxbDVHfoeXbOwcagAkOQAm9NxoTdMGfTqghu1GrvadSaw6iW3Je6IcL5PNOw8VwjxqBECXy50/iCQSY/lQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-remap-async-to-generator": "^7.22.20",
- "@babel/plugin-syntax-async-generators": "^7.8.4"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-async-to-generator": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz",
- "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-module-imports": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-remap-async-to-generator": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-block-scoped-functions": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz",
- "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-block-scoping": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz",
- "integrity": "sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-class-properties": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz",
- "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-class-static-block": {
- "version": "7.22.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz",
- "integrity": "sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==",
- "dev": true,
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.22.11",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/plugin-syntax-class-static-block": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.12.0"
- }
- },
- "node_modules/@babel/plugin-transform-classes": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz",
- "integrity": "sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-compilation-targets": "^7.22.15",
- "@babel/helper-environment-visitor": "^7.22.5",
- "@babel/helper-function-name": "^7.22.5",
- "@babel/helper-optimise-call-expression": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-replace-supers": "^7.22.9",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "globals": "^11.1.0"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-computed-properties": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz",
- "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/template": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-destructuring": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz",
- "integrity": "sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-dotall-regex": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz",
- "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-duplicate-keys": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz",
- "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-dynamic-import": {
- "version": "7.22.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz",
- "integrity": "sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-exponentiation-operator": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz",
- "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==",
- "dev": true,
- "dependencies": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-export-namespace-from": {
- "version": "7.22.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz",
- "integrity": "sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/plugin-syntax-export-namespace-from": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-for-of": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz",
- "integrity": "sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-function-name": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz",
- "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-compilation-targets": "^7.22.5",
- "@babel/helper-function-name": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-json-strings": {
- "version": "7.22.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz",
- "integrity": "sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/plugin-syntax-json-strings": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-literals": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz",
- "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-logical-assignment-operators": {
- "version": "7.22.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz",
- "integrity": "sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-member-expression-literals": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz",
- "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-modules-amd": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz",
- "integrity": "sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-module-transforms": "^7.23.0",
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-modules-commonjs": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz",
- "integrity": "sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-module-transforms": "^7.23.0",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-simple-access": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-modules-systemjs": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz",
- "integrity": "sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-module-transforms": "^7.23.0",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-validator-identifier": "^7.22.20"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-modules-umd": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz",
- "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-module-transforms": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz",
- "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/plugin-transform-new-target": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz",
- "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-nullish-coalescing-operator": {
- "version": "7.22.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz",
- "integrity": "sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-numeric-separator": {
- "version": "7.22.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz",
- "integrity": "sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-object-rest-spread": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz",
- "integrity": "sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==",
- "dev": true,
- "dependencies": {
- "@babel/compat-data": "^7.22.9",
- "@babel/helper-compilation-targets": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.22.15"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-object-super": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz",
- "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-replace-supers": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-optional-catch-binding": {
- "version": "7.22.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz",
- "integrity": "sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-optional-chaining": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz",
- "integrity": "sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-parameters": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz",
- "integrity": "sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-private-methods": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz",
- "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-create-class-features-plugin": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-private-property-in-object": {
- "version": "7.22.11",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz",
- "integrity": "sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-annotate-as-pure": "^7.22.5",
- "@babel/helper-create-class-features-plugin": "^7.22.11",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-property-literals": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz",
- "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-regenerator": {
- "version": "7.22.10",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz",
- "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "regenerator-transform": "^0.15.2"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-reserved-words": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz",
- "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-shorthand-properties": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz",
- "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-spread": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz",
- "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-sticky-regex": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz",
- "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-template-literals": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz",
- "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-typeof-symbol": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz",
- "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-unicode-escapes": {
- "version": "7.22.10",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz",
- "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-unicode-property-regex": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz",
- "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==",
- "dev": true,
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-unicode-regex": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz",
- "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/plugin-transform-unicode-sets-regex": {
- "version": "7.22.5",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz",
- "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-create-regexp-features-plugin": "^7.22.5",
- "@babel/helper-plugin-utils": "^7.22.5"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0"
- }
- },
- "node_modules/@babel/preset-env": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.2.tgz",
- "integrity": "sha512-BW3gsuDD+rvHL2VO2SjAUNTBe5YrjsTiDyqamPDWY723na3/yPQ65X5oQkFVJZ0o50/2d+svm1rkPoJeR1KxVQ==",
- "dev": true,
- "dependencies": {
- "@babel/compat-data": "^7.23.2",
- "@babel/helper-compilation-targets": "^7.22.15",
- "@babel/helper-plugin-utils": "^7.22.5",
- "@babel/helper-validator-option": "^7.22.15",
- "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.15",
- "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.15",
- "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2",
- "@babel/plugin-syntax-async-generators": "^7.8.4",
- "@babel/plugin-syntax-class-properties": "^7.12.13",
- "@babel/plugin-syntax-class-static-block": "^7.14.5",
- "@babel/plugin-syntax-dynamic-import": "^7.8.3",
- "@babel/plugin-syntax-export-namespace-from": "^7.8.3",
- "@babel/plugin-syntax-import-assertions": "^7.22.5",
- "@babel/plugin-syntax-import-attributes": "^7.22.5",
- "@babel/plugin-syntax-import-meta": "^7.10.4",
- "@babel/plugin-syntax-json-strings": "^7.8.3",
- "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4",
- "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-syntax-numeric-separator": "^7.10.4",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.3",
- "@babel/plugin-syntax-optional-catch-binding": "^7.8.3",
- "@babel/plugin-syntax-optional-chaining": "^7.8.3",
- "@babel/plugin-syntax-private-property-in-object": "^7.14.5",
- "@babel/plugin-syntax-top-level-await": "^7.14.5",
- "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6",
- "@babel/plugin-transform-arrow-functions": "^7.22.5",
- "@babel/plugin-transform-async-generator-functions": "^7.23.2",
- "@babel/plugin-transform-async-to-generator": "^7.22.5",
- "@babel/plugin-transform-block-scoped-functions": "^7.22.5",
- "@babel/plugin-transform-block-scoping": "^7.23.0",
- "@babel/plugin-transform-class-properties": "^7.22.5",
- "@babel/plugin-transform-class-static-block": "^7.22.11",
- "@babel/plugin-transform-classes": "^7.22.15",
- "@babel/plugin-transform-computed-properties": "^7.22.5",
- "@babel/plugin-transform-destructuring": "^7.23.0",
- "@babel/plugin-transform-dotall-regex": "^7.22.5",
- "@babel/plugin-transform-duplicate-keys": "^7.22.5",
- "@babel/plugin-transform-dynamic-import": "^7.22.11",
- "@babel/plugin-transform-exponentiation-operator": "^7.22.5",
- "@babel/plugin-transform-export-namespace-from": "^7.22.11",
- "@babel/plugin-transform-for-of": "^7.22.15",
- "@babel/plugin-transform-function-name": "^7.22.5",
- "@babel/plugin-transform-json-strings": "^7.22.11",
- "@babel/plugin-transform-literals": "^7.22.5",
- "@babel/plugin-transform-logical-assignment-operators": "^7.22.11",
- "@babel/plugin-transform-member-expression-literals": "^7.22.5",
- "@babel/plugin-transform-modules-amd": "^7.23.0",
- "@babel/plugin-transform-modules-commonjs": "^7.23.0",
- "@babel/plugin-transform-modules-systemjs": "^7.23.0",
- "@babel/plugin-transform-modules-umd": "^7.22.5",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5",
- "@babel/plugin-transform-new-target": "^7.22.5",
- "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.11",
- "@babel/plugin-transform-numeric-separator": "^7.22.11",
- "@babel/plugin-transform-object-rest-spread": "^7.22.15",
- "@babel/plugin-transform-object-super": "^7.22.5",
- "@babel/plugin-transform-optional-catch-binding": "^7.22.11",
- "@babel/plugin-transform-optional-chaining": "^7.23.0",
- "@babel/plugin-transform-parameters": "^7.22.15",
- "@babel/plugin-transform-private-methods": "^7.22.5",
- "@babel/plugin-transform-private-property-in-object": "^7.22.11",
- "@babel/plugin-transform-property-literals": "^7.22.5",
- "@babel/plugin-transform-regenerator": "^7.22.10",
- "@babel/plugin-transform-reserved-words": "^7.22.5",
- "@babel/plugin-transform-shorthand-properties": "^7.22.5",
- "@babel/plugin-transform-spread": "^7.22.5",
- "@babel/plugin-transform-sticky-regex": "^7.22.5",
- "@babel/plugin-transform-template-literals": "^7.22.5",
- "@babel/plugin-transform-typeof-symbol": "^7.22.5",
- "@babel/plugin-transform-unicode-escapes": "^7.22.10",
- "@babel/plugin-transform-unicode-property-regex": "^7.22.5",
- "@babel/plugin-transform-unicode-regex": "^7.22.5",
- "@babel/plugin-transform-unicode-sets-regex": "^7.22.5",
- "@babel/preset-modules": "0.1.6-no-external-plugins",
- "@babel/types": "^7.23.0",
- "babel-plugin-polyfill-corejs2": "^0.4.6",
- "babel-plugin-polyfill-corejs3": "^0.8.5",
- "babel-plugin-polyfill-regenerator": "^0.5.3",
- "core-js-compat": "^3.31.0",
- "semver": "^6.3.1"
- },
- "engines": {
- "node": ">=6.9.0"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0"
- }
- },
- "node_modules/@babel/preset-modules": {
- "version": "0.1.6-no-external-plugins",
- "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz",
- "integrity": "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-plugin-utils": "^7.0.0",
- "@babel/types": "^7.4.4",
- "esutils": "^2.0.2"
- },
- "peerDependencies": {
- "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0"
- }
- },
- "node_modules/@babel/regjsgen": {
- "version": "0.8.0",
- "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz",
- "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==",
- "dev": true
- },
- "node_modules/@babel/runtime": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.2.tgz",
- "integrity": "sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==",
- "dev": true,
- "dependencies": {
- "regenerator-runtime": "^0.14.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/template": {
- "version": "7.22.15",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
- "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/parser": "^7.22.15",
- "@babel/types": "^7.22.15"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/traverse": {
- "version": "7.23.2",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz",
- "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==",
- "dev": true,
- "dependencies": {
- "@babel/code-frame": "^7.22.13",
- "@babel/generator": "^7.23.0",
- "@babel/helper-environment-visitor": "^7.22.20",
- "@babel/helper-function-name": "^7.23.0",
- "@babel/helper-hoist-variables": "^7.22.5",
- "@babel/helper-split-export-declaration": "^7.22.6",
- "@babel/parser": "^7.23.0",
- "@babel/types": "^7.23.0",
- "debug": "^4.1.0",
- "globals": "^11.1.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@babel/types": {
- "version": "7.23.0",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz",
- "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==",
- "dev": true,
- "dependencies": {
- "@babel/helper-string-parser": "^7.22.5",
- "@babel/helper-validator-identifier": "^7.22.20",
- "to-fast-properties": "^2.0.0"
- },
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/@csstools/cascade-layer-name-parser": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.5.tgz",
- "integrity": "sha512-v/5ODKNBMfBl0us/WQjlfsvSlYxfZLhNMVIsuCPib2ulTwGKYbKJbwqw671+qH9Y4wvWVnu7LBChvml/wBKjFg==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1"
- }
- },
- "node_modules/@csstools/color-helpers": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-3.0.2.tgz",
- "integrity": "sha512-NMVs/l7Y9eIKL5XjbCHEgGcG8LOUT2qVcRjX6EzkCdlvftHVKr2tHIPzHavfrULRZ5Q2gxrJ9f44dAlj6fX97Q==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "engines": {
- "node": "^14 || ^16 || >=18"
- }
- },
- "node_modules/@csstools/css-calc": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-1.1.4.tgz",
- "integrity": "sha512-ZV1TSmToiNcQL1P3hfzlzZzA02mmVkVmXGaUDUqpYUG84PmLhVSZpKX+KfxAuOcK7de04UXSQPBrAvaya6iiGg==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1"
- }
- },
- "node_modules/@csstools/css-color-parser": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-1.4.0.tgz",
- "integrity": "sha512-SlGd8E6ron24JYQPQAIzu5tvmWi1H4sDKTdA7UDnwF45oJv7AVESbOlOO1YjfBhrQFuvLWUgKiOY9DwGoAxwTA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/color-helpers": "^3.0.2",
- "@csstools/css-calc": "^1.1.4"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1"
- }
- },
- "node_modules/@csstools/css-parser-algorithms": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.2.tgz",
- "integrity": "sha512-sLYGdAdEY2x7TSw9FtmdaTrh2wFtRJO5VMbBrA8tEqEod7GEggFmxTSK9XqExib3yMuYNcvcTdCZIP6ukdjAIA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "@csstools/css-tokenizer": "^2.2.1"
- }
- },
- "node_modules/@csstools/css-tokenizer": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.1.tgz",
- "integrity": "sha512-Zmsf2f/CaEPWEVgw29odOj+WEVoiJy9s9NOv5GgNY9mZ1CZ7394By6wONrONrTsnNDv6F9hR02nvFihrGVGHBg==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "engines": {
- "node": "^14 || ^16 || >=18"
- }
- },
- "node_modules/@csstools/media-query-list-parser": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz",
- "integrity": "sha512-IxVBdYzR8pYe89JiyXQuYk4aVVoCPhMJkz6ElRwlVysjwURTsTk/bmY/z4FfeRE+CRBMlykPwXEVUg8lThv7AQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1"
- }
- },
- "node_modules/@csstools/postcss-cascade-layers": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.0.tgz",
- "integrity": "sha512-dVPVVqQG0FixjM9CG/+8eHTsCAxRKqmNh6H69IpruolPlnEF1611f2AoLK8TijTSAsqBSclKd4WHs1KUb/LdJw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/selector-specificity": "^3.0.0",
- "postcss-selector-parser": "^6.0.13"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-color-function": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-color-function/-/postcss-color-function-3.0.7.tgz",
- "integrity": "sha512-/PIB20G1TPCXmQlaJLWIYzTZRZpj6csT4ijgnshIj/kcmniIRroAfDa0xSWnfuO1eNo0NptIaPU7jzUukWn55Q==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/css-color-parser": "^1.4.0",
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1",
- "@csstools/postcss-progressive-custom-properties": "^3.0.2"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-color-mix-function": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.7.tgz",
- "integrity": "sha512-57/g8aGo5eKFjEeJMiRKh8Qq43K2rCyk5ZZTvJ34TNl4zUtYU5DvLkIkOnhCtL8/a4z9oMA42aOnFPddRrScUQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/css-color-parser": "^1.4.0",
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1",
- "@csstools/postcss-progressive-custom-properties": "^3.0.2"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-exponential-functions": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.1.tgz",
- "integrity": "sha512-ZLK2iSK4DUxeypGce2PnQSdYugUqDTwxnhNiq1o6OyKMNYgYs4eKbvEhFG8JKr1sJWbeqBi5jRr0017l2EWVvg==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/css-calc": "^1.1.4",
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-font-format-keywords": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-3.0.0.tgz",
- "integrity": "sha512-ntkGj+1uDa/u6lpjPxnkPcjJn7ChO/Kcy08YxctOZI7vwtrdYvFhmE476dq8bj1yna306+jQ9gzXIG/SWfOaRg==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-gamut-mapping": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.0.tgz",
- "integrity": "sha512-6UQyK8l9YaG5Ao5rBDcCnKHrLsHiQ1E0zeFQuqDJqEtinVzAPb/MwSw3TenZXL1Rnd7th3tb+4CBFHBXdW5tbQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/css-color-parser": "^1.4.0",
- "@csstools/css-parser-algorithms": "2.3.2",
- "@csstools/css-tokenizer": "^2.2.1"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-gradients-interpolation-method": {
- "version": "4.0.7",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.7.tgz",
- "integrity": "sha512-GT1CzE/Tyr/ei4j5BwKESkHAgg+Gzys/0mAY7W+UiR+XrcYk5hDbOrE/YJIx1rflfO/7La1bDoZtA0YnLl4qNA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/css-color-parser": "^1.4.0",
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1",
- "@csstools/postcss-progressive-custom-properties": "^3.0.2"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-hwb-function": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.6.tgz",
- "integrity": "sha512-uQgWt2Ho2yy2S6qthWY7mD5v57NKxi6dD1NB8nAybU5bJSsm+hLXRGm3/zbOH4xNrqO3Cl60DFSNlSrUME3Xjg==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/css-color-parser": "^1.4.0",
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-ic-unit": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.2.tgz",
- "integrity": "sha512-n28Er7W9qc48zNjJnvTKuVHY26/+6YlA9WzJRksIHiAWOMxSH5IksXkw7FpkIOd+jLi59BMrX/BWrZMgjkLBHg==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/postcss-progressive-custom-properties": "^3.0.2",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-initial": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-initial/-/postcss-initial-1.0.0.tgz",
- "integrity": "sha512-1l7iHHjIl5qmVeGItugr4ZOlCREDP71mNKqoEyxlosIoiu3Os1nPWMHpuCvDLCLiWI/ONTOg3nzJh7gwHOrqUA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-is-pseudo-class": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.3.tgz",
- "integrity": "sha512-/dt5M9Ty/x3Yiq0Nm/5PJJzwkVFchJgdjKVnryBPtoMCb9ohb/nDIJOwr/Wr3hK3FDs1EA1GE6PyRYsUmQPS8Q==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/selector-specificity": "^3.0.0",
- "postcss-selector-parser": "^6.0.13"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-logical-float-and-clear": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-2.0.0.tgz",
- "integrity": "sha512-Wki4vxsF6icRvRz8eF9bPpAvwaAt0RHwhVOyzfoFg52XiIMjb6jcbHkGxwpJXP4DVrnFEwpwmrz5aTRqOW82kg==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-logical-resize": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-resize/-/postcss-logical-resize-2.0.0.tgz",
- "integrity": "sha512-lCQ1aX8c5+WI4t5EoYf3alTzJNNocMqTb+u1J9CINdDhFh1fjovqK+0aHalUHsNstZmzFPNzIkU4Mb3eM9U8SA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-logical-viewport-units": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.3.tgz",
- "integrity": "sha512-xeVxqND5rlQyqLGdH7rX34sIm/JbbQKxpKQP8oD1YQqUHHCLQR9NUS57WqJKajxKN6AcNAMWJhb5LUH5RfPcyA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/css-tokenizer": "^2.2.1"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-media-minmax": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.0.tgz",
- "integrity": "sha512-t5Li/DPC5QmW/6VFLfUvsw/4dNYYseWR0tOXDeJg/9EKUodBgNawz5tuk5vYKtNvoj+Q08odMuXcpS5YJj0AFA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/css-calc": "^1.1.4",
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1",
- "@csstools/media-query-list-parser": "^2.1.5"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-media-queries-aspect-ratio-number-values": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.3.tgz",
- "integrity": "sha512-IPL8AvnwMYW+cWtp+j8cW3MFN0RyXNT4hLOvs6Rf2N+NcbvXhSyKxZuE3W9Cv4KjaNoNoGx1d0UhT6tktq6tUw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1",
- "@csstools/media-query-list-parser": "^2.1.5"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-nested-calc": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-nested-calc/-/postcss-nested-calc-3.0.0.tgz",
- "integrity": "sha512-HsB66aDWAouOwD/GcfDTS0a7wCuVWaTpXcjl5VKP0XvFxDiU+r0T8FG7xgb6ovZNZ+qzvGIwRM+CLHhDgXrYgQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-normalize-display-values": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-3.0.1.tgz",
- "integrity": "sha512-nUvRxI+ALJwkxZdPU4EDyuM380vP91sAGvI3jAOHs/sr3jfcCOzLkY6xKI1Mr526kZ3RivmMoYM/xq+XFyE/bw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-oklab-function": {
- "version": "3.0.7",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.7.tgz",
- "integrity": "sha512-vBFTQD3CARB3u/XIGO44wWbcO7xG/4GsYqJlcPuUGRSK8mtxes6n4vvNFlIByyAZy2k4d4RY63nyvTbMpeNTaQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/css-color-parser": "^1.4.0",
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1",
- "@csstools/postcss-progressive-custom-properties": "^3.0.2"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-progressive-custom-properties": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.2.tgz",
- "integrity": "sha512-YEvTozk1SxnV/PGL5DllBVDuLQ+jiQhyCSQiZJ6CwBMU5JQ9hFde3i1qqzZHuclZfptjrU0JjlX4ePsOhxNzHw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-relative-color-syntax": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.7.tgz",
- "integrity": "sha512-2AiFbJSVF4EyymLxme4JzSrbXykHolx8DdZECHjYKMhoulhKLltx5ccYgtrK3BmXGd3v3nJrWFCc8JM8bjuiOg==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/css-color-parser": "^1.4.0",
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1",
- "@csstools/postcss-progressive-custom-properties": "^3.0.2"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-scope-pseudo-class": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-3.0.0.tgz",
- "integrity": "sha512-GFNVsD97OuEcfHmcT0/DAZWAvTM/FFBDQndIOLawNc1Wq8YqpZwBdHa063Lq+Irk7azygTT+Iinyg3Lt76p7rg==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "postcss-selector-parser": "^6.0.13"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-stepped-value-functions": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.2.tgz",
- "integrity": "sha512-I3wX44MZVv+tDuWfrd3BTvRB/YRIM2F5v1MBtTI89sxpFn47mNpTwpPYUOGPVCgKlRDfZSlxIUYhUQmqRQZZFQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/css-calc": "^1.1.4",
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-text-decoration-shorthand": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.3.tgz",
- "integrity": "sha512-d5J9m49HhqXRcw1S6vTZuviHi/iknUKGjBpChiNK1ARg9sSa3b8m5lsWz5Izs8ISORZdv2bZRwbw5Z2R6gQ9kQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/color-helpers": "^3.0.2",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-trigonometric-functions": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.2.tgz",
- "integrity": "sha512-AwzNhF4QOKaLOKvMljwwFkeYXwufhRO15G+kKohHkyoNOL75xWkN+W2Y9ik9tSeAyDv+cYNlYaF+o/a79WjVjg==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/css-calc": "^1.1.4",
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/postcss-unset-value": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/postcss-unset-value/-/postcss-unset-value-3.0.0.tgz",
- "integrity": "sha512-P0JD1WHh3avVyKKRKjd0dZIjCEeaBer8t1BbwGMUDtSZaLhXlLNBqZ8KkqHzYWXOJgHleXAny2/sx8LYl6qhEA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/@csstools/selector-specificity": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz",
- "integrity": "sha512-hBI9tfBtuPIi885ZsZ32IMEU/5nlZH/KOVYJCOh7gyMxaVLGmLedYqFN6Ui1LXkI8JlC8IsuC0rF0btcRZKd5g==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss-selector-parser": "^6.0.13"
- }
- },
- "node_modules/@jridgewell/gen-mapping": {
- "version": "0.3.3",
- "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
- "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
- "dev": true,
- "dependencies": {
- "@jridgewell/set-array": "^1.0.1",
- "@jridgewell/sourcemap-codec": "^1.4.10",
- "@jridgewell/trace-mapping": "^0.3.9"
- },
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/resolve-uri": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
- "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
- "dev": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/set-array": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
- "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
- "dev": true,
- "engines": {
- "node": ">=6.0.0"
- }
- },
- "node_modules/@jridgewell/sourcemap-codec": {
- "version": "1.4.15",
- "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
- "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
- "dev": true
- },
- "node_modules/@jridgewell/trace-mapping": {
- "version": "0.3.19",
- "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz",
- "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==",
- "dev": true,
- "dependencies": {
- "@jridgewell/resolve-uri": "^3.1.0",
- "@jridgewell/sourcemap-codec": "^1.4.14"
- }
- },
- "node_modules/@nicolo-ribaudo/chokidar-2": {
- "version": "2.1.8-no-fsevents.3",
- "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz",
- "integrity": "sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==",
- "dev": true,
- "optional": true
- },
- "node_modules/@nodelib/fs.scandir": {
- "version": "2.1.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
- "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.stat": "2.0.5",
- "run-parallel": "^1.1.9"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.stat": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@nodelib/fs.walk": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
- "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.scandir": "2.1.5",
- "fastq": "^1.6.0"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/@trysound/sax": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz",
- "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==",
- "dev": true,
- "engines": {
- "node": ">=10.13.0"
- }
- },
- "node_modules/@types/minimatch": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
- "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
- "dev": true
- },
- "node_modules/ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "dependencies": {
- "color-convert": "^2.0.1"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/chalk/ansi-styles?sponsor=1"
- }
- },
- "node_modules/anymatch": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
- "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
- "dev": true,
- "dependencies": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- },
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/array-differ": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
- "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/array-union": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
- "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/arrify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
- "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/autoprefixer": {
- "version": "10.4.16",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.16.tgz",
- "integrity": "sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/autoprefixer"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "browserslist": "^4.21.10",
- "caniuse-lite": "^1.0.30001538",
- "fraction.js": "^4.3.6",
- "normalize-range": "^0.1.2",
- "picocolors": "^1.0.0",
- "postcss-value-parser": "^4.2.0"
- },
- "bin": {
- "autoprefixer": "bin/autoprefixer"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- },
- "peerDependencies": {
- "postcss": "^8.1.0"
- }
- },
- "node_modules/babel-plugin-polyfill-corejs2": {
- "version": "0.4.6",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz",
- "integrity": "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==",
- "dev": true,
- "dependencies": {
- "@babel/compat-data": "^7.22.6",
- "@babel/helper-define-polyfill-provider": "^0.4.3",
- "semver": "^6.3.1"
- },
- "peerDependencies": {
- "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
- }
- },
- "node_modules/babel-plugin-polyfill-corejs3": {
- "version": "0.8.5",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.5.tgz",
- "integrity": "sha512-Q6CdATeAvbScWPNLB8lzSO7fgUVBkQt6zLgNlfyeCr/EQaEQR+bWiBYYPYAFyE528BMjRhL+1QBMOI4jc/c5TA==",
- "dev": true,
- "dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.4.3",
- "core-js-compat": "^3.32.2"
- },
- "peerDependencies": {
- "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
- }
- },
- "node_modules/babel-plugin-polyfill-regenerator": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz",
- "integrity": "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==",
- "dev": true,
- "dependencies": {
- "@babel/helper-define-polyfill-provider": "^0.4.3"
- },
- "peerDependencies": {
- "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0"
- }
- },
- "node_modules/balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "node_modules/binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/boolbase": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
- "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
- "dev": true
- },
- "node_modules/brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "node_modules/braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "dependencies": {
- "fill-range": "^7.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/browserslist": {
- "version": "4.22.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz",
- "integrity": "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "caniuse-lite": "^1.0.30001541",
- "electron-to-chromium": "^1.4.535",
- "node-releases": "^2.0.13",
- "update-browserslist-db": "^1.0.13"
- },
- "bin": {
- "browserslist": "cli.js"
- },
- "engines": {
- "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
- }
- },
- "node_modules/caniuse-api": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz",
- "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.0.0",
- "caniuse-lite": "^1.0.0",
- "lodash.memoize": "^4.1.2",
- "lodash.uniq": "^4.5.0"
- }
- },
- "node_modules/caniuse-db": {
- "version": "1.0.30001549",
- "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001549.tgz",
- "integrity": "sha512-S1/27z6uZsY5IPBh36JHzuUE0qr8RqHe9vrMr0xKu8VBxNGkns1HRIHZvbiI62T01uZ08DBjB+zYSW58s5gVIQ==",
- "dev": true
- },
- "node_modules/caniuse-lite": {
- "version": "1.0.30001549",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001549.tgz",
- "integrity": "sha512-qRp48dPYSCYaP+KurZLhDYdVE+yEyht/3NlmcJgVQ2VMGt6JL36ndQ/7rgspdZsJuxDPFIo/OzBT2+GmIJ53BA==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/caniuse-lite"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ]
- },
- "node_modules/chalk": {
- "version": "2.4.2",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
- "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^3.2.1",
- "escape-string-regexp": "^1.0.5",
- "supports-color": "^5.3.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/chalk/node_modules/ansi-styles": {
- "version": "3.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
- "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
- "dev": true,
- "dependencies": {
- "color-convert": "^1.9.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/chalk/node_modules/color-convert": {
- "version": "1.9.3",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
- "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
- "dev": true,
- "dependencies": {
- "color-name": "1.1.3"
- }
- },
- "node_modules/chalk/node_modules/color-name": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
- "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==",
- "dev": true
- },
- "node_modules/chokidar": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
- "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
- "dev": true,
- "funding": [
- {
- "type": "individual",
- "url": "https://paulmillr.com/funding/"
- }
- ],
- "dependencies": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- },
- "engines": {
- "node": ">= 8.10.0"
- },
- "optionalDependencies": {
- "fsevents": "~2.3.2"
- }
- },
- "node_modules/cliui": {
- "version": "8.0.1",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
- "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
- "dev": true,
- "dependencies": {
- "string-width": "^4.2.0",
- "strip-ansi": "^6.0.1",
- "wrap-ansi": "^7.0.0"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "dependencies": {
- "color-name": "~1.1.4"
- },
- "engines": {
- "node": ">=7.0.0"
- }
- },
- "node_modules/color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true
- },
- "node_modules/colord": {
- "version": "2.9.3",
- "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz",
- "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
- "dev": true
- },
- "node_modules/commander": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
- "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
- "dev": true,
- "engines": {
- "node": ">= 10"
- }
- },
- "node_modules/concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
- "dev": true
- },
- "node_modules/convert-source-map": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
- "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
- "dev": true
- },
- "node_modules/core-js-compat": {
- "version": "3.33.0",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.0.tgz",
- "integrity": "sha512-0w4LcLXsVEuNkIqwjjf9rjCoPhK8uqA4tMRh4Ge26vfLtUutshn+aRJU21I9LCJlh2QQHfisNToLjw1XEJLTWw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.22.1"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/core-js"
- }
- },
- "node_modules/core-util-is": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
- "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
- "dev": true
- },
- "node_modules/css-blank-pseudo": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/css-blank-pseudo/-/css-blank-pseudo-6.0.0.tgz",
- "integrity": "sha512-VbfLlOWO7sBHBTn6pwDQzc07Z0SDydgDBfNfCE0nvrehdBNv9RKsuupIRa/qal0+fBZhAALyQDPMKz5lnvcchw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "postcss-selector-parser": "^6.0.13"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/css-declaration-sorter": {
- "version": "6.4.1",
- "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz",
- "integrity": "sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==",
- "dev": true,
- "engines": {
- "node": "^10 || ^12 || >=14"
- },
- "peerDependencies": {
- "postcss": "^8.0.9"
- }
- },
- "node_modules/css-has-pseudo": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/css-has-pseudo/-/css-has-pseudo-6.0.0.tgz",
- "integrity": "sha512-X+r+JBuoO37FBOWVNhVJhxtSBUFHgHbrcc0CjFT28JEdOw1qaDwABv/uunyodUuSy2hMPe9j/HjssxSlvUmKjg==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/selector-specificity": "^3.0.0",
- "postcss-selector-parser": "^6.0.13",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/css-prefers-color-scheme": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/css-prefers-color-scheme/-/css-prefers-color-scheme-9.0.0.tgz",
- "integrity": "sha512-03QGAk/FXIRseDdLb7XAiu6gidQ0Nd8945xuM7VFVPpc6goJsG9uIO8xQjTxwbPdPIIV4o4AJoOJyt8gwDl67g==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/css-select": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz",
- "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==",
- "dev": true,
- "dependencies": {
- "boolbase": "^1.0.0",
- "css-what": "^6.1.0",
- "domhandler": "^5.0.2",
- "domutils": "^3.0.1",
- "nth-check": "^2.0.1"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/css-tokenize": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/css-tokenize/-/css-tokenize-1.0.1.tgz",
- "integrity": "sha512-gLmmbJdwH9HLY4bcA17lnZ8GgPwEXRbvxBJGHnkiB6gLhRpTzjkjtMIvz7YORGW/Ptv2oMk8b5g+u7mRD6Dd7A==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.1",
- "readable-stream": "^1.0.33"
- }
- },
- "node_modules/css-tree": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz",
- "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==",
- "dev": true,
- "dependencies": {
- "mdn-data": "2.0.30",
- "source-map-js": "^1.0.1"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
- }
- },
- "node_modules/css-unit-converter": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/css-unit-converter/-/css-unit-converter-1.1.2.tgz",
- "integrity": "sha512-IiJwMC8rdZE0+xiEZHeru6YoONC4rfPMqGm2W85jMIbkFvv5nFTwJVFHam2eFrN6txmoUYFAFXiv8ICVeTO0MA==",
- "dev": true
- },
- "node_modules/css-what": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz",
- "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==",
- "dev": true,
- "engines": {
- "node": ">= 6"
- },
- "funding": {
- "url": "https://github.com/sponsors/fb55"
- }
- },
- "node_modules/cssdb": {
- "version": "7.8.0",
- "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-7.8.0.tgz",
- "integrity": "sha512-SkeezZOQr5AHt9MgJgSFNyiuJwg1p8AwoVln6JwaQJsyxduRW9QJ+HP/gAQzbsz8SIqINtYvpJKjxTRI67zxLg==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- }
- ]
- },
- "node_modules/cssesc": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
- "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
- "dev": true,
- "bin": {
- "cssesc": "bin/cssesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/cssnano": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-6.0.1.tgz",
- "integrity": "sha512-fVO1JdJ0LSdIGJq68eIxOqFpIJrZqXUsBt8fkrBcztCQqAjQD51OhZp7tc0ImcbwXD4k7ny84QTV90nZhmqbkg==",
- "dev": true,
- "dependencies": {
- "cssnano-preset-default": "^6.0.1",
- "lilconfig": "^2.1.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/cssnano"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/cssnano-preset-default": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz",
- "integrity": "sha512-7VzyFZ5zEB1+l1nToKyrRkuaJIx0zi/1npjvZfbBwbtNTzhLtlvYraK/7/uqmX2Wb2aQtd983uuGw79jAjLSuQ==",
- "dev": true,
- "dependencies": {
- "css-declaration-sorter": "^6.3.1",
- "cssnano-utils": "^4.0.0",
- "postcss-calc": "^9.0.0",
- "postcss-colormin": "^6.0.0",
- "postcss-convert-values": "^6.0.0",
- "postcss-discard-comments": "^6.0.0",
- "postcss-discard-duplicates": "^6.0.0",
- "postcss-discard-empty": "^6.0.0",
- "postcss-discard-overridden": "^6.0.0",
- "postcss-merge-longhand": "^6.0.0",
- "postcss-merge-rules": "^6.0.1",
- "postcss-minify-font-values": "^6.0.0",
- "postcss-minify-gradients": "^6.0.0",
- "postcss-minify-params": "^6.0.0",
- "postcss-minify-selectors": "^6.0.0",
- "postcss-normalize-charset": "^6.0.0",
- "postcss-normalize-display-values": "^6.0.0",
- "postcss-normalize-positions": "^6.0.0",
- "postcss-normalize-repeat-style": "^6.0.0",
- "postcss-normalize-string": "^6.0.0",
- "postcss-normalize-timing-functions": "^6.0.0",
- "postcss-normalize-unicode": "^6.0.0",
- "postcss-normalize-url": "^6.0.0",
- "postcss-normalize-whitespace": "^6.0.0",
- "postcss-ordered-values": "^6.0.0",
- "postcss-reduce-initial": "^6.0.0",
- "postcss-reduce-transforms": "^6.0.0",
- "postcss-svgo": "^6.0.0",
- "postcss-unique-selectors": "^6.0.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/cssnano-utils": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.0.tgz",
- "integrity": "sha512-Z39TLP+1E0KUcd7LGyF4qMfu8ZufI0rDzhdyAMsa/8UyNUU8wpS0fhdBxbQbv32r64ea00h4878gommRVg2BHw==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/csso": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz",
- "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
- "dev": true,
- "dependencies": {
- "css-tree": "~2.2.0"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
- "npm": ">=7.0.0"
- }
- },
- "node_modules/csso/node_modules/css-tree": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz",
- "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
- "dev": true,
- "dependencies": {
- "mdn-data": "2.0.28",
- "source-map-js": "^1.0.1"
- },
- "engines": {
- "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
- "npm": ">=7.0.0"
- }
- },
- "node_modules/csso/node_modules/mdn-data": {
- "version": "2.0.28",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz",
- "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==",
- "dev": true
- },
- "node_modules/debug": {
- "version": "4.3.4",
- "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
- "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
- "dev": true,
- "dependencies": {
- "ms": "2.1.2"
- },
- "engines": {
- "node": ">=6.0"
- },
- "peerDependenciesMeta": {
- "supports-color": {
- "optional": true
- }
- }
- },
- "node_modules/dependency-graph": {
- "version": "0.11.0",
- "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz",
- "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==",
- "dev": true,
- "engines": {
- "node": ">= 0.6.0"
- }
- },
- "node_modules/dir-glob": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
- "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
- "dev": true,
- "dependencies": {
- "path-type": "^4.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/doiuse": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/doiuse/-/doiuse-6.0.2.tgz",
- "integrity": "sha512-eBTs23NOX+EAYPr4RbCR6J4DRW/TML3uMo37y0X1whlkersDYFCk9HmCl09KX98cis22VKsV1QaxfVNauJ3NBw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.5",
- "caniuse-lite": "^1.0.30001487",
- "css-tokenize": "^1.0.1",
- "duplexify": "^4.1.2",
- "ldjson-stream": "^1.2.1",
- "multimatch": "^5.0.0",
- "postcss": "^8.4.21",
- "source-map": "^0.7.4",
- "yargs": "^17.7.1"
- },
- "bin": {
- "doiuse": "bin/cli.js"
- },
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/doiuse/node_modules/source-map": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz",
- "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/dom-serializer": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz",
- "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==",
- "dev": true,
- "dependencies": {
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.2",
- "entities": "^4.2.0"
- },
- "funding": {
- "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
- }
- },
- "node_modules/domelementtype": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz",
- "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/fb55"
- }
- ]
- },
- "node_modules/domhandler": {
- "version": "5.0.3",
- "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz",
- "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==",
- "dev": true,
- "dependencies": {
- "domelementtype": "^2.3.0"
- },
- "engines": {
- "node": ">= 4"
- },
- "funding": {
- "url": "https://github.com/fb55/domhandler?sponsor=1"
- }
- },
- "node_modules/domutils": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz",
- "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==",
- "dev": true,
- "dependencies": {
- "dom-serializer": "^2.0.0",
- "domelementtype": "^2.3.0",
- "domhandler": "^5.0.3"
- },
- "funding": {
- "url": "https://github.com/fb55/domutils?sponsor=1"
- }
- },
- "node_modules/duplexify": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz",
- "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==",
- "dev": true,
- "dependencies": {
- "end-of-stream": "^1.4.1",
- "inherits": "^2.0.3",
- "readable-stream": "^3.1.1",
- "stream-shift": "^1.0.0"
- }
- },
- "node_modules/duplexify/node_modules/readable-stream": {
- "version": "3.6.2",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
- "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
- "dev": true,
- "dependencies": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/duplexify/node_modules/string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "dependencies": {
- "safe-buffer": "~5.2.0"
- }
- },
- "node_modules/electron-to-chromium": {
- "version": "1.4.554",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.554.tgz",
- "integrity": "sha512-Q0umzPJjfBrrj8unkONTgbKQXzXRrH7sVV7D9ea2yBV3Oaogz991yhbpfvo2LMNkJItmruXTEzVpP9cp7vaIiQ==",
- "dev": true
- },
- "node_modules/emoji-regex": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
- },
- "node_modules/end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
- "dependencies": {
- "once": "^1.4.0"
- }
- },
- "node_modules/entities": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
- "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
- "dev": true,
- "engines": {
- "node": ">=0.12"
- },
- "funding": {
- "url": "https://github.com/fb55/entities?sponsor=1"
- }
- },
- "node_modules/escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/escape-string-regexp": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
- "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/esutils": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
- "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/fast-glob": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz",
- "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==",
- "dev": true,
- "dependencies": {
- "@nodelib/fs.stat": "^2.0.2",
- "@nodelib/fs.walk": "^1.2.3",
- "glob-parent": "^5.1.2",
- "merge2": "^1.3.0",
- "micromatch": "^4.0.4"
- },
- "engines": {
- "node": ">=8.6.0"
- }
- },
- "node_modules/fastq": {
- "version": "1.15.0",
- "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
- "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
- "dev": true,
- "dependencies": {
- "reusify": "^1.0.4"
- }
- },
- "node_modules/fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "dependencies": {
- "to-regex-range": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/flatten": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/flatten/-/flatten-1.0.3.tgz",
- "integrity": "sha512-dVsPA/UwQ8+2uoFe5GHtiBMu48dWLTdsuEd7CKGlZlD78r1TTWBvDuFaFGKCo/ZfEr95Uk56vZoX86OsHkUeIg==",
- "deprecated": "flatten is deprecated in favor of utility frameworks such as lodash.",
- "dev": true
- },
- "node_modules/fraction.js": {
- "version": "4.3.7",
- "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz",
- "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==",
- "dev": true,
- "engines": {
- "node": "*"
- },
- "funding": {
- "type": "patreon",
- "url": "https://github.com/sponsors/rawify"
- }
- },
- "node_modules/fs-extra": {
- "version": "11.1.1",
- "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz",
- "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==",
- "dev": true,
- "dependencies": {
- "graceful-fs": "^4.2.0",
- "jsonfile": "^6.0.1",
- "universalify": "^2.0.0"
- },
- "engines": {
- "node": ">=14.14"
- }
- },
- "node_modules/fs-readdir-recursive": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz",
- "integrity": "sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==",
- "dev": true
- },
- "node_modules/fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
- "dev": true
- },
- "node_modules/fsevents": {
- "version": "2.3.3",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
- "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
- "dev": true,
- "hasInstallScript": true,
- "optional": true,
- "os": [
- "darwin"
- ],
- "engines": {
- "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
- }
- },
- "node_modules/g": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/g/-/g-2.0.1.tgz",
- "integrity": "sha512-Fi6Ng5fZ/ANLQ15H11hCe+09sgUoNvDEBevVgx3KoYOhsH5iLNPn54hx0jPZ+3oSWr+xajnp2Qau9VmPsc7hTA==",
- "dev": true
- },
- "node_modules/gather-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/gather-stream/-/gather-stream-1.0.0.tgz",
- "integrity": "sha512-NspYMi3rN3EKmMdejUXbtluDYrcRlTEBBFhWzVRZVsOx94OPxlXp0AzyPKyLiT7iaurcoTE/KcHsHP/PowNEaA==",
- "dev": true
- },
- "node_modules/gensync": {
- "version": "1.0.0-beta.2",
- "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz",
- "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==",
- "dev": true,
- "engines": {
- "node": ">=6.9.0"
- }
- },
- "node_modules/get-caller-file": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
- "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
- "dev": true,
- "engines": {
- "node": "6.* || 8.* || >= 10.*"
- }
- },
- "node_modules/get-stdin": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz",
- "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/glob": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
- "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
- "dev": true,
- "dependencies": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.1.1",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- },
- "engines": {
- "node": "*"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "dependencies": {
- "is-glob": "^4.0.1"
- },
- "engines": {
- "node": ">= 6"
- }
- },
- "node_modules/globals": {
- "version": "11.12.0",
- "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
- "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/globby": {
- "version": "13.2.2",
- "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz",
- "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==",
- "dev": true,
- "dependencies": {
- "dir-glob": "^3.0.1",
- "fast-glob": "^3.3.0",
- "ignore": "^5.2.4",
- "merge2": "^1.4.1",
- "slash": "^4.0.0"
- },
- "engines": {
- "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/globby/node_modules/slash": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz",
- "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==",
- "dev": true,
- "engines": {
- "node": ">=12"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/graceful-fs": {
- "version": "4.2.11",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
- "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
- "dev": true
- },
- "node_modules/has": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.4.tgz",
- "integrity": "sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==",
- "dev": true,
- "engines": {
- "node": ">= 0.4.0"
- }
- },
- "node_modules/has-ansi": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
- "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-ansi/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/has-flag": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
- "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ignore": {
- "version": "5.2.4",
- "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
- "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
- "dev": true,
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/indexes-of": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
- "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==",
- "dev": true
- },
- "node_modules/inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
- "dev": true,
- "dependencies": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "node_modules/inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "node_modules/is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "dependencies": {
- "binary-extensions": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-core-module": {
- "version": "2.13.0",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.0.tgz",
- "integrity": "sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==",
- "dev": true,
- "dependencies": {
- "has": "^1.0.3"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-fullwidth-code-point": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
- "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "dependencies": {
- "is-extglob": "^2.1.1"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true,
- "engines": {
- "node": ">=0.12.0"
- }
- },
- "node_modules/isarray": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
- "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
- "dev": true
- },
- "node_modules/js-base64": {
- "version": "2.6.4",
- "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz",
- "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==",
- "dev": true
- },
- "node_modules/js-tokens": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
- "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
- "dev": true
- },
- "node_modules/jsesc": {
- "version": "2.5.2",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
- "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
- "dev": true,
- "bin": {
- "jsesc": "bin/jsesc"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/json5": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
- "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
- "dev": true,
- "bin": {
- "json5": "lib/cli.js"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/jsonfile": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
- "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
- "dev": true,
- "dependencies": {
- "universalify": "^2.0.0"
- },
- "optionalDependencies": {
- "graceful-fs": "^4.1.6"
- }
- },
- "node_modules/laggard": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/laggard/-/laggard-2.0.1.tgz",
- "integrity": "sha512-XCUGeE3r3VWxM8CV9aw+GjG3v3vTInyCf3p9YUo1SCTkM4N93/JaRH/4Lpz0hDZnaEQsArtAbp+rYic3PdTpbg==",
- "dev": true,
- "dependencies": {
- "minimist": "^1.2.0",
- "pixrem": "^4.0.1",
- "postcss": "^6.0.8",
- "postcss-color-rgba-fallback": "^3.0.0",
- "postcss-opacity": "^5.0.0",
- "postcss-pseudoelements": "^5.0.0",
- "postcss-reporter": "^5.0.0",
- "postcss-vmin": "^3.0.0",
- "postcss-will-change": "^2.0.0",
- "read-file-stdin": "^0.2.0",
- "write-file-stdout": "0.0.2"
- },
- "bin": {
- "laggard": "bin/cmd.js"
- },
- "engines": {
- "node": ">= 4"
- }
- },
- "node_modules/laggard/node_modules/balanced-match": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
- "integrity": "sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg==",
- "dev": true
- },
- "node_modules/laggard/node_modules/browserslist": {
- "version": "2.11.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz",
- "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==",
- "deprecated": "Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.",
- "dev": true,
- "dependencies": {
- "caniuse-lite": "^1.0.30000792",
- "electron-to-chromium": "^1.3.30"
- },
- "bin": {
- "browserslist": "cli.js"
- }
- },
- "node_modules/laggard/node_modules/pixrem": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pixrem/-/pixrem-4.0.1.tgz",
- "integrity": "sha512-sFMGjkE42jNwAMBvBdWSx9f6MGZfufkfChzLxow7JmKY6XHWpNqLIwTQABcJOek0LCdtNf22cdL5fYzKLELmCA==",
- "dev": true,
- "dependencies": {
- "browserslist": "^2.0.0",
- "postcss": "^6.0.0",
- "reduce-css-calc": "^1.2.7"
- },
- "engines": {
- "node": ">=0.10.0",
- "npm": ">=1.2.10"
- }
- },
- "node_modules/laggard/node_modules/postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/laggard/node_modules/postcss-color-rgba-fallback": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/postcss-color-rgba-fallback/-/postcss-color-rgba-fallback-3.0.0.tgz",
- "integrity": "sha512-RBCHHCQ0sVJH+y31jiVSLBM/b3vvfiU8g9tyAglpF7NOuYzcw41Tu+iGEm8B2zVEAYYgEhWCASNY/j4Wh3vi4w==",
- "dev": true,
- "dependencies": {
- "postcss": "^6.0.6",
- "postcss-value-parser": "^3.3.0",
- "rgb-hex": "^2.1.0"
- }
- },
- "node_modules/laggard/node_modules/postcss-reporter": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-5.0.0.tgz",
- "integrity": "sha512-rBkDbaHAu5uywbCR2XE8a25tats3xSOsGNx6mppK6Q9kSFGKc/FyAzfci+fWM2l+K402p1D0pNcfDGxeje5IKg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.0.1",
- "lodash": "^4.17.4",
- "log-symbols": "^2.0.0",
- "postcss": "^6.0.8"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/laggard/node_modules/postcss-value-parser": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
- "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
- "dev": true
- },
- "node_modules/laggard/node_modules/postcss-will-change": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/postcss-will-change/-/postcss-will-change-2.0.0.tgz",
- "integrity": "sha512-HrqpQTvjGhoURZyFdjojKwCIOH99MAXrHfyR/GrrPqhOh576VPj+Dac47K9lIn0K1cTU6ayETbOdVwNhNlRBPA==",
- "dev": true,
- "dependencies": {
- "postcss": "^6.0.1"
- }
- },
- "node_modules/laggard/node_modules/reduce-css-calc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
- "integrity": "sha512-0dVfwYVOlf/LBA2ec4OwQ6p3X9mYxn/wOl2xTcLwjnPYrkgEfPx3VI4eGCH3rQLlPISG5v9I9bkZosKsNRTRKA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^0.4.2",
- "math-expression-evaluator": "^1.2.14",
- "reduce-function-call": "^1.0.1"
- }
- },
- "node_modules/laggard/node_modules/rgb-hex": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/rgb-hex/-/rgb-hex-2.1.0.tgz",
- "integrity": "sha512-1hDa60MqECZiEGsa9TtcOE9VbV6fhZSMQARy7U+a2HkhIJyoEBhcG4v/qYAJYzV3Bbj+j52sBoAIKKF5EPuQZw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/ldjson-stream": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/ldjson-stream/-/ldjson-stream-1.2.1.tgz",
- "integrity": "sha512-xw/nNEXafuPSLu8NjjG3+atVVw+8U1APZAQylmwQn19Hgw6rC7QjHvP6MupnHWCrzSm9m0xs5QWkCLuRvBPjgQ==",
- "dev": true,
- "dependencies": {
- "split2": "^0.2.1",
- "through2": "^0.6.1"
- }
- },
- "node_modules/lilconfig": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
- "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/lodash": {
- "version": "4.17.21",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
- "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==",
- "dev": true
- },
- "node_modules/lodash.debounce": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz",
- "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==",
- "dev": true
- },
- "node_modules/lodash.memoize": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
- "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==",
- "dev": true
- },
- "node_modules/lodash.uniq": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz",
- "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==",
- "dev": true
- },
- "node_modules/log-symbols": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
- "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.0.1"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/lru-cache": {
- "version": "5.1.1",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
- "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
- "dev": true,
- "dependencies": {
- "yallist": "^3.0.2"
- }
- },
- "node_modules/make-dir": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
- "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==",
- "dev": true,
- "dependencies": {
- "pify": "^4.0.1",
- "semver": "^5.6.0"
- },
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/make-dir/node_modules/pify": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
- "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==",
- "dev": true,
- "engines": {
- "node": ">=6"
- }
- },
- "node_modules/make-dir/node_modules/semver": {
- "version": "5.7.2",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
- "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
- "dev": true,
- "bin": {
- "semver": "bin/semver"
- }
- },
- "node_modules/math-expression-evaluator": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/math-expression-evaluator/-/math-expression-evaluator-1.4.0.tgz",
- "integrity": "sha512-4vRUvPyxdO8cWULGTh9dZWL2tZK6LDBvj+OGHBER7poH9Qdt7kXEoj20wiz4lQUbUXQZFjPbe5mVDo9nutizCw==",
- "dev": true
- },
- "node_modules/mdn-data": {
- "version": "2.0.30",
- "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz",
- "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==",
- "dev": true
- },
- "node_modules/merge2": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
- "dev": true,
- "engines": {
- "node": ">= 8"
- }
- },
- "node_modules/micromatch": {
- "version": "4.0.5",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
- "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
- "dev": true,
- "dependencies": {
- "braces": "^3.0.2",
- "picomatch": "^2.3.1"
- },
- "engines": {
- "node": ">=8.6"
- }
- },
- "node_modules/minimatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
- "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
- "dev": true,
- "dependencies": {
- "brace-expansion": "^1.1.7"
- },
- "engines": {
- "node": "*"
- }
- },
- "node_modules/minimist": {
- "version": "1.2.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
- "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
- "dev": true,
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/ms": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
- "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
- "dev": true
- },
- "node_modules/multimatch": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz",
- "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==",
- "dev": true,
- "dependencies": {
- "@types/minimatch": "^3.0.3",
- "array-differ": "^3.0.0",
- "array-union": "^2.1.0",
- "arrify": "^2.0.1",
- "minimatch": "^3.0.4"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/nanoid": {
- "version": "3.3.6",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
- "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "bin": {
- "nanoid": "bin/nanoid.cjs"
- },
- "engines": {
- "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
- }
- },
- "node_modules/node-releases": {
- "version": "2.0.13",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz",
- "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==",
- "dev": true
- },
- "node_modules/normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/normalize-range": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
- "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/nth-check": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
- "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
- "dev": true,
- "dependencies": {
- "boolbase": "^1.0.0"
- },
- "funding": {
- "url": "https://github.com/fb55/nth-check?sponsor=1"
- }
- },
- "node_modules/num2fraction": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
- "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==",
- "dev": true
- },
- "node_modules/once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
- "dev": true,
- "dependencies": {
- "wrappy": "1"
- }
- },
- "node_modules/path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true
- },
- "node_modules/path-type": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
- "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
- },
- "node_modules/picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true,
- "engines": {
- "node": ">=8.6"
- },
- "funding": {
- "url": "https://github.com/sponsors/jonschlinkert"
- }
- },
- "node_modules/pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/pixrem": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/pixrem/-/pixrem-5.0.0.tgz",
- "integrity": "sha512-ugJ4Imy92u55zeznaN/5d7iqOBIZjZ7q10/T+dcd0IuFtbLlsGDvAUabFu1cafER+G9f0T1WtTqvzm4KAdcDgQ==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.3.6",
- "postcss": "^7.0.7",
- "reduce-css-calc": "^2.1.5"
- },
- "engines": {
- "node": ">=4.0.0",
- "npm": ">=1.2.10"
- }
- },
- "node_modules/pixrem/node_modules/picocolors": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
- "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
- "dev": true
- },
- "node_modules/pixrem/node_modules/postcss": {
- "version": "7.0.39",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
- "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
- "dev": true,
- "dependencies": {
- "picocolors": "^0.2.1",
- "source-map": "^0.6.1"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss": {
- "version": "8.4.31",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz",
- "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/postcss"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "nanoid": "^3.3.6",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.2"
- },
- "engines": {
- "node": "^10 || ^12 || >=14"
- }
- },
- "node_modules/postcss-alias": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/postcss-alias/-/postcss-alias-2.0.0.tgz",
- "integrity": "sha512-SzsjZdGaqVRql33315QLrhnNpNvvH2skp0hXpjzz+nYmaSwXSUjk4JADJRi7zUkwYyCXj41fy1go5MR3S9TDyg==",
- "dev": true,
- "dependencies": {
- "postcss": "^6.0.6"
- }
- },
- "node_modules/postcss-alias/node_modules/postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/postcss-attribute-case-insensitive": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.2.tgz",
- "integrity": "sha512-IRuCwwAAQbgaLhxQdQcIIK0dCVXg3XDUnzgKD8iwdiYdwU4rMWRWyl/W9/0nA4ihVpq5pyALiHB2veBJ0292pw==",
- "dev": true,
- "dependencies": {
- "postcss-selector-parser": "^6.0.10"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/postcss-calc": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-9.0.1.tgz",
- "integrity": "sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==",
- "dev": true,
- "dependencies": {
- "postcss-selector-parser": "^6.0.11",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.2"
- }
- },
- "node_modules/postcss-clamp": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/postcss-clamp/-/postcss-clamp-4.1.0.tgz",
- "integrity": "sha512-ry4b1Llo/9zz+PKC+030KUnPITTJAHeOwjfAyyB60eT0AorGLdzp52s31OsPRHRf8NchkgFoG2y6fCfn1IV1Ow==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": ">=7.6.0"
- },
- "peerDependencies": {
- "postcss": "^8.4.6"
- }
- },
- "node_modules/postcss-clearfix": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/postcss-clearfix/-/postcss-clearfix-2.0.1.tgz",
- "integrity": "sha512-Bnh6pg3vlYtm4fCzyip1H8DA0eWxWA2ir2EkbgXrZifgDJunCe5Q+6imwa22ow+EvOgBBiDlnPbwswMbgrD3og==",
- "dev": true,
- "dependencies": {
- "postcss": "^6.0.6"
- }
- },
- "node_modules/postcss-clearfix/node_modules/postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/postcss-cli": {
- "version": "10.1.0",
- "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-10.1.0.tgz",
- "integrity": "sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==",
- "dev": true,
- "dependencies": {
- "chokidar": "^3.3.0",
- "dependency-graph": "^0.11.0",
- "fs-extra": "^11.0.0",
- "get-stdin": "^9.0.0",
- "globby": "^13.0.0",
- "picocolors": "^1.0.0",
- "postcss-load-config": "^4.0.0",
- "postcss-reporter": "^7.0.0",
- "pretty-hrtime": "^1.0.3",
- "read-cache": "^1.0.0",
- "slash": "^5.0.0",
- "yargs": "^17.0.0"
- },
- "bin": {
- "postcss": "index.js"
- },
- "engines": {
- "node": ">=14"
- },
- "peerDependencies": {
- "postcss": "^8.0.0"
- }
- },
- "node_modules/postcss-color-functional-notation": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.2.tgz",
- "integrity": "sha512-FsjSmlSufuiFBsIqQ++VxFmvX7zKndZpBkHmfXr4wqhvzM92FTEkAh703iqWTl1U3faTgqioIqCbfqdWiFVwtw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/postcss-progressive-custom-properties": "^3.0.2",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/postcss-color-hex-alpha": {
- "version": "9.0.2",
- "resolved": "https://registry.npmjs.org/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.2.tgz",
- "integrity": "sha512-SfPjgr//VQ/DOCf80STIAsdAs7sbIbxATvVmd+Ec7JvR8onz9pjawhq3BJM3Pie40EE3TyB0P6hft16D33Nlyg==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/postcss-color-rebeccapurple": {
- "version": "9.0.1",
- "resolved": "https://registry.npmjs.org/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-9.0.1.tgz",
- "integrity": "sha512-ds4cq5BjRieizVb2PnvbJ0omg9VCo2/KzluvoFZbxuGpsGJ5BQSD93CHBooinEtangCM5YqUOerGDl4xGmOb6Q==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/postcss-color-rgba-fallback": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/postcss-color-rgba-fallback/-/postcss-color-rgba-fallback-4.0.0.tgz",
- "integrity": "sha512-XxjOy2dA/IYY/O9p492lklb0sw2lyshjXCoJQz7Y0YLxT1ymnep5d8LmQPkB+kCTVCzmniJNotiZhWM1RSfANA==",
- "dev": true,
- "dependencies": {
- "postcss": "^7.0.17",
- "postcss-value-parser": "^4.0.2",
- "rgb-hex": "^3.0.0"
- }
- },
- "node_modules/postcss-color-rgba-fallback/node_modules/picocolors": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
- "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
- "dev": true
- },
- "node_modules/postcss-color-rgba-fallback/node_modules/postcss": {
- "version": "7.0.39",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
- "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
- "dev": true,
- "dependencies": {
- "picocolors": "^0.2.1",
- "source-map": "^0.6.1"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-colormin": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.0.tgz",
- "integrity": "sha512-EuO+bAUmutWoZYgHn2T1dG1pPqHU6L4TjzPlu4t1wZGXQ/fxV16xg2EJmYi0z+6r+MGV1yvpx1BHkUaRrPa2bw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0",
- "colord": "^2.9.1",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-convert-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz",
- "integrity": "sha512-U5D8QhVwqT++ecmy8rnTb+RL9n/B806UVaS3m60lqle4YDFcpbS3ae5bTQIh3wOGUSDHSEtMYLs/38dNG7EYFw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-custom-media": {
- "version": "10.0.2",
- "resolved": "https://registry.npmjs.org/postcss-custom-media/-/postcss-custom-media-10.0.2.tgz",
- "integrity": "sha512-zcEFNRmDm2fZvTPdI1pIW3W//UruMcLosmMiCdpQnrCsTRzWlKQPYMa1ud9auL0BmrryKK1+JjIGn19K0UjO/w==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/cascade-layer-name-parser": "^1.0.5",
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1",
- "@csstools/media-query-list-parser": "^2.1.5"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/postcss-custom-properties": {
- "version": "13.3.2",
- "resolved": "https://registry.npmjs.org/postcss-custom-properties/-/postcss-custom-properties-13.3.2.tgz",
- "integrity": "sha512-2Coszybpo8lpLY24vy2CYv9AasiZ39/bs8Imv0pWMq55Gl8NWzfc24OAo3zIX7rc6uUJAqESnVOMZ6V6lpMjJA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/cascade-layer-name-parser": "^1.0.5",
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/postcss-custom-selectors": {
- "version": "7.1.6",
- "resolved": "https://registry.npmjs.org/postcss-custom-selectors/-/postcss-custom-selectors-7.1.6.tgz",
- "integrity": "sha512-svsjWRaxqL3vAzv71dV0/65P24/FB8TbPX+lWyyf9SZ7aZm4S4NhCn7N3Bg+Z5sZunG3FS8xQ80LrCU9hb37cw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/cascade-layer-name-parser": "^1.0.5",
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1",
- "postcss-selector-parser": "^6.0.13"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/postcss-dir-pseudo-class": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-8.0.0.tgz",
- "integrity": "sha512-Oy5BBi0dWPwij/IA+yDYj+/OBMQ9EPqAzTHeSNUYrUWdll/PRJmcbiUj0MNcsBi681I1gcSTLvMERPaXzdbvJg==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "postcss-selector-parser": "^6.0.13"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/postcss-discard-comments": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz",
- "integrity": "sha512-p2skSGqzPMZkEQvJsgnkBhCn8gI7NzRH2683EEjrIkoMiwRELx68yoUJ3q3DGSGuQ8Ug9Gsn+OuDr46yfO+eFw==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-discard-duplicates": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz",
- "integrity": "sha512-bU1SXIizMLtDW4oSsi5C/xHKbhLlhek/0/yCnoMQany9k3nPBq+Ctsv/9oMmyqbR96HYHxZcHyK2HR5P/mqoGA==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-discard-empty": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz",
- "integrity": "sha512-b+h1S1VT6dNhpcg+LpyiUrdnEZfICF0my7HAKgJixJLW7BnNmpRH34+uw/etf5AhOlIhIAuXApSzzDzMI9K/gQ==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-discard-overridden": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz",
- "integrity": "sha512-4VELwssYXDFigPYAZ8vL4yX4mUepF/oCBeeIT4OXsJPYOtvJumyz9WflmJWTfDwCUcpDR+z0zvCWBXgTx35SVw==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-double-position-gradients": {
- "version": "5.0.2",
- "resolved": "https://registry.npmjs.org/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.2.tgz",
- "integrity": "sha512-KTbvdOOy8z8zb0BTkEg4/1vqlRlApdvjw8/pFoehgQl0WVO+fezDGlvo0B8xRA+XccA7ohkQCULKNsiNOx70Cw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/postcss-progressive-custom-properties": "^3.0.2",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/postcss-easings": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/postcss-easings/-/postcss-easings-1.0.1.tgz",
- "integrity": "sha512-zHRCKHinXtqpyrPPi3oojaf47v3eGcQHmG5zujWs1+9OWukIKi/rVEAm2KSh5y4swn66SNCZceGXcNi9GXo1cQ==",
- "dev": true,
- "dependencies": {
- "postcss": "^6.0.14",
- "postcss-value-parser": "^3.3.0"
- }
- },
- "node_modules/postcss-easings/node_modules/postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/postcss-easings/node_modules/postcss-value-parser": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
- "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
- "dev": true
- },
- "node_modules/postcss-fixes": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/postcss-fixes/-/postcss-fixes-3.0.0.tgz",
- "integrity": "sha512-cGZYDVUV3YjE8Ueo5KPbczQC7ngWFXUKHCHvM+aLSddGtrccEo0u2ITvnror1nJ3cxWvv80G2Mf+/I55gOlLsw==",
- "dev": true,
- "dependencies": {
- "lodash": "^4.17.21",
- "pixrem": "^3.0.2",
- "postcss": "^6.0.23",
- "postcss-calc": "^6.0.2",
- "postcss-flexbugs-fixes": "^3.3.1",
- "postcss-nth-child-fix": "^2.0.0",
- "postcss-pseudoelements": "^3.0.0",
- "postcss-unopacity": "^1.0.1",
- "postcss-unroot": "^1.0.2",
- "postcss-vmin": "^3.0.0"
- }
- },
- "node_modules/postcss-fixes/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-fixes/node_modules/ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-fixes/node_modules/balanced-match": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
- "integrity": "sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg==",
- "dev": true
- },
- "node_modules/postcss-fixes/node_modules/browserslist": {
- "version": "1.7.7",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-1.7.7.tgz",
- "integrity": "sha512-qHJblDE2bXVRYzuDetv/wAeHOJyO97+9wxC1cdCtyzgNuSozOyRCiiLaCR1f71AN66lQdVVBipWm63V+a7bPOw==",
- "deprecated": "Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.",
- "dev": true,
- "dependencies": {
- "caniuse-db": "^1.0.30000639",
- "electron-to-chromium": "^1.2.7"
- },
- "bin": {
- "browserslist": "cli.js"
- }
- },
- "node_modules/postcss-fixes/node_modules/has-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
- "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-fixes/node_modules/picocolors": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz",
- "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==",
- "dev": true
- },
- "node_modules/postcss-fixes/node_modules/pixrem": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/pixrem/-/pixrem-3.0.2.tgz",
- "integrity": "sha512-sOvRS25lBgH91Isn2ewxpc3GRvkRlXW1hgb/hcjXz1URERtLVsT3fblTpKyBXP8Cw/EOjUqwtIs7x4uG7sppVg==",
- "dev": true,
- "dependencies": {
- "browserslist": "^1.0.0",
- "postcss": "^5.0.0",
- "reduce-css-calc": "^1.2.7"
- },
- "engines": {
- "node": ">=0.10.0",
- "npm": ">=1.2.10"
- }
- },
- "node_modules/postcss-fixes/node_modules/pixrem/node_modules/chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-fixes/node_modules/pixrem/node_modules/chalk/node_modules/supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/postcss-fixes/node_modules/pixrem/node_modules/postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "dependencies": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- },
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/postcss-fixes/node_modules/pixrem/node_modules/reduce-css-calc": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz",
- "integrity": "sha512-0dVfwYVOlf/LBA2ec4OwQ6p3X9mYxn/wOl2xTcLwjnPYrkgEfPx3VI4eGCH3rQLlPISG5v9I9bkZosKsNRTRKA==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^0.4.2",
- "math-expression-evaluator": "^1.2.14",
- "reduce-function-call": "^1.0.1"
- }
- },
- "node_modules/postcss-fixes/node_modules/pixrem/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-fixes/node_modules/pixrem/node_modules/supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
- "dev": true,
- "dependencies": {
- "has-flag": "^1.0.0"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/postcss-fixes/node_modules/postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/postcss-fixes/node_modules/postcss-calc": {
- "version": "6.0.2",
- "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-6.0.2.tgz",
- "integrity": "sha512-fiznXjEN5T42Qm7qqMCVJXS3roaj9r4xsSi+meaBVe7CJBl8t/QLOXu02Z2E6oWAMWIvCuF6JrvzFekmVEbOKA==",
- "dev": true,
- "dependencies": {
- "css-unit-converter": "^1.1.1",
- "postcss": "^7.0.2",
- "postcss-selector-parser": "^2.2.2",
- "reduce-css-calc": "^2.0.0"
- }
- },
- "node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss": {
- "version": "7.0.39",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz",
- "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==",
- "dev": true,
- "dependencies": {
- "picocolors": "^0.2.1",
- "source-map": "^0.6.1"
- },
- "engines": {
- "node": ">=6.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- }
- },
- "node_modules/postcss-fixes/node_modules/postcss-pseudoelements": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/postcss-pseudoelements/-/postcss-pseudoelements-3.0.0.tgz",
- "integrity": "sha512-v8MXqK2UZ/UHeHlpnQYyNL3bSO3eLqo+hEQY/hGFTePfF5l6dZrmVkf7nEvtrsyhSMF7h4lvrhukKZPicr7MFQ==",
- "dev": true,
- "dependencies": {
- "postcss": "^5.0.4"
- }
- },
- "node_modules/postcss-fixes/node_modules/postcss-pseudoelements/node_modules/chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-fixes/node_modules/postcss-pseudoelements/node_modules/chalk/node_modules/supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/postcss-fixes/node_modules/postcss-pseudoelements/node_modules/postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "dependencies": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- },
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/postcss-fixes/node_modules/postcss-pseudoelements/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-fixes/node_modules/postcss-pseudoelements/node_modules/supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
- "dev": true,
- "dependencies": {
- "has-flag": "^1.0.0"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/postcss-fixes/node_modules/postcss-selector-parser": {
- "version": "2.2.3",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz",
- "integrity": "sha512-3pqyakeGhrO0BQ5+/tGTfvi5IAUAhHRayGK8WFSu06aEv2BmHoXw/Mhb+w7VY5HERIuC+QoUI7wgrCcq2hqCVA==",
- "dev": true,
- "dependencies": {
- "flatten": "^1.0.2",
- "indexes-of": "^1.0.1",
- "uniq": "^1.0.1"
- }
- },
- "node_modules/postcss-fixes/node_modules/strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-flexbugs-fixes": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-3.3.1.tgz",
- "integrity": "sha512-9y9kDDf2F9EjKX6x9ueNa5GARvsUbXw4ezH8vXItXHwKzljbu8awP7t5dCaabKYm18Vs1lo5bKQcnc0HkISt+w==",
- "dev": true,
- "dependencies": {
- "postcss": "^6.0.1"
- }
- },
- "node_modules/postcss-flexbugs-fixes/node_modules/postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/postcss-focus-visible": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/postcss-focus-visible/-/postcss-focus-visible-9.0.0.tgz",
- "integrity": "sha512-zA4TbVaIaT8npZBEROhZmlc+GBKE8AELPHXE7i4TmIUEQhw/P/mSJfY9t6tBzpQ1rABeGtEOHYrW4SboQeONMQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "postcss-selector-parser": "^6.0.13"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/postcss-focus-within": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/postcss-focus-within/-/postcss-focus-within-8.0.0.tgz",
- "integrity": "sha512-E7+J9nuQzZaA37D/MUZMX1K817RZGDab8qw6pFwzAkDd/QtlWJ9/WTKmzewNiuxzeq6WWY7ATiRePVoDKp+DnA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "postcss-selector-parser": "^6.0.13"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/postcss-font-variant": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz",
- "integrity": "sha512-1fmkBaCALD72CK2a9i468mA/+tr9/1cBxRRMXOUaZqO43oWPR5imcyPjXwuv7PXbCid4ndlP5zWhidQVVa3hmA==",
- "dev": true,
- "peerDependencies": {
- "postcss": "^8.1.0"
- }
- },
- "node_modules/postcss-fontpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/postcss-fontpath/-/postcss-fontpath-1.0.0.tgz",
- "integrity": "sha512-g+zYrrHNrrPXWpzRBK4pRFRSk1U0p+yWxL8wpe2dKKyldFfvYZeWEsnfk3DtDooWUtWAuR9bcYJmyvbS6A4KqA==",
- "dev": true,
- "dependencies": {
- "postcss": "^6.0.0"
- }
- },
- "node_modules/postcss-fontpath/node_modules/postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/postcss-gap-properties": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/postcss-gap-properties/-/postcss-gap-properties-5.0.0.tgz",
- "integrity": "sha512-YjsEEL6890P7MCv6fch6Am1yq0EhQCJMXyT4LBohiu87+4/WqR7y5W3RIv53WdA901hhytgRvjlrAhibhW4qsA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/postcss-hexrgba": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/postcss-hexrgba/-/postcss-hexrgba-1.0.2.tgz",
- "integrity": "sha512-1+W/ChIJQNSqZU3glt1tZyQbzCB5x9H5NKRBbaX+ccyI5I8itY4/3H4kWh2R+teWdFTfGp0OveUTpblEWA6iAA==",
- "dev": true,
- "dependencies": {
- "postcss": "^6.0.7"
- }
- },
- "node_modules/postcss-hexrgba/node_modules/postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/postcss-image-set-function": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/postcss-image-set-function/-/postcss-image-set-function-6.0.1.tgz",
- "integrity": "sha512-VlZncC9hhZ5tg0JllY4g6Z28BeoPO8DIkelioEEkXL0AA0IORlqYpTi2L8TUnl4YQrlwvBgxVy+mdZJw5R/cIQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/postcss-input-style": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/postcss-input-style/-/postcss-input-style-1.0.0.tgz",
- "integrity": "sha512-1+7tUeH7DFY42DBg7xv+K8QxnCUtrb4KWwJztaBVUQ5Rky0qBVrBijGRri4KYdHhwgM5h5AfFU3DbF94f/QtAA==",
- "dev": true,
- "dependencies": {
- "postcss": "^6.0.7"
- }
- },
- "node_modules/postcss-input-style/node_modules/postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/postcss-lab-function": {
- "version": "6.0.7",
- "resolved": "https://registry.npmjs.org/postcss-lab-function/-/postcss-lab-function-6.0.7.tgz",
- "integrity": "sha512-4d1lhDVPukHFqkMv4G5vVcK+tgY52vwb5uR1SWKOaO5389r2q8fMxBWuXSW+YtbCOEGP0/X9KERi9E9le2pJuw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/css-color-parser": "^1.4.0",
- "@csstools/css-parser-algorithms": "^2.3.2",
- "@csstools/css-tokenizer": "^2.2.1",
- "@csstools/postcss-progressive-custom-properties": "^3.0.2"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/postcss-load-config": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
- "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
- "dev": true,
- "dependencies": {
- "lilconfig": "^2.0.5",
- "yaml": "^2.1.1"
- },
- "engines": {
- "node": ">= 14"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- "peerDependencies": {
- "postcss": ">=8.0.9",
- "ts-node": ">=9.0.0"
- },
- "peerDependenciesMeta": {
- "postcss": {
- "optional": true
- },
- "ts-node": {
- "optional": true
- }
- }
- },
- "node_modules/postcss-logical": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/postcss-logical/-/postcss-logical-7.0.0.tgz",
- "integrity": "sha512-zYf3vHkoW82f5UZTEXChTJvH49Yl9X37axTZsJGxrCG2kOUwtaAoz9E7tqYg0lsIoJLybaL8fk/2mOi81zVIUw==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/postcss-merge-longhand": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz",
- "integrity": "sha512-4VSfd1lvGkLTLYcxFuISDtWUfFS4zXe0FpF149AyziftPFQIWxjvFSKhA4MIxMe4XM3yTDgQMbSNgzIVxChbIg==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0",
- "stylehacks": "^6.0.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-merge-rules": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz",
- "integrity": "sha512-a4tlmJIQo9SCjcfiCcCMg/ZCEe0XTkl/xK0XHBs955GWg9xDX3NwP9pwZ78QUOWB8/0XCjZeJn98Dae0zg6AAw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0",
- "cssnano-utils": "^4.0.0",
- "postcss-selector-parser": "^6.0.5"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-minify-font-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz",
- "integrity": "sha512-zNRAVtyh5E8ndZEYXA4WS8ZYsAp798HiIQ1V2UF/C/munLp2r1UGHwf1+6JFu7hdEhJFN+W1WJQKBrtjhFgEnA==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-minify-gradients": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz",
- "integrity": "sha512-wO0F6YfVAR+K1xVxF53ueZJza3L+R3E6cp0VwuXJQejnNUH0DjcAFe3JEBeTY1dLwGa0NlDWueCA1VlEfiKgAA==",
- "dev": true,
- "dependencies": {
- "colord": "^2.9.1",
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-minify-params": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz",
- "integrity": "sha512-Fz/wMQDveiS0n5JPcvsMeyNXOIMrwF88n7196puSuQSWSa+/Ofc1gDOSY2xi8+A4PqB5dlYCKk/WfqKqsI+ReQ==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-minify-selectors": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz",
- "integrity": "sha512-ec/q9JNCOC2CRDNnypipGfOhbYPuUkewGwLnbv6omue/PSASbHSU7s6uSQ0tcFRVv731oMIx8k0SP4ZX6be/0g==",
- "dev": true,
- "dependencies": {
- "postcss-selector-parser": "^6.0.5"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-nesting": {
- "version": "12.0.1",
- "resolved": "https://registry.npmjs.org/postcss-nesting/-/postcss-nesting-12.0.1.tgz",
- "integrity": "sha512-6LCqCWP9pqwXw/njMvNK0hGY44Fxc4B2EsGbn6xDcxbNRzP8GYoxT7yabVVMLrX3quqOJ9hg2jYMsnkedOf8pA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/selector-specificity": "^3.0.0",
- "postcss-selector-parser": "^6.0.13"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/postcss-normalize-charset": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz",
- "integrity": "sha512-cqundwChbu8yO/gSWkuFDmKrCZ2vJzDAocheT2JTd0sFNA4HMGoKMfbk2B+J0OmO0t5GUkiAkSM5yF2rSLUjgQ==",
- "dev": true,
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-display-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz",
- "integrity": "sha512-Qyt5kMrvy7dJRO3OjF7zkotGfuYALETZE+4lk66sziWSPzlBEt7FrUshV6VLECkI4EN8Z863O6Nci4NXQGNzYw==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-positions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz",
- "integrity": "sha512-mPCzhSV8+30FZyWhxi6UoVRYd3ZBJgTRly4hOkaSifo0H+pjDYcii/aVT4YE6QpOil15a5uiv6ftnY3rm0igPg==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-repeat-style": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz",
- "integrity": "sha512-50W5JWEBiOOAez2AKBh4kRFm2uhrT3O1Uwdxz7k24aKtbD83vqmcVG7zoIwo6xI2FZ/HDlbrCopXhLeTpQib1A==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-string": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz",
- "integrity": "sha512-KWkIB7TrPOiqb8ZZz6homet2KWKJwIlysF5ICPZrXAylGe2hzX/HSf4NTX2rRPJMAtlRsj/yfkrWGavFuB+c0w==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-timing-functions": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz",
- "integrity": "sha512-tpIXWciXBp5CiFs8sem90IWlw76FV4oi6QEWfQwyeREVwUy39VSeSqjAT7X0Qw650yAimYW5gkl2Gd871N5SQg==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-unicode": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz",
- "integrity": "sha512-ui5crYkb5ubEUDugDc786L/Me+DXp2dLg3fVJbqyAl0VPkAeALyAijF2zOsnZyaS1HyfPuMH0DwyY18VMFVNkg==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-url": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz",
- "integrity": "sha512-98mvh2QzIPbb02YDIrYvAg4OUzGH7s1ZgHlD3fIdTHLgPLRpv1ZTKJDnSAKr4Rt21ZQFzwhGMXxpXlfrUBKFHw==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-normalize-whitespace": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz",
- "integrity": "sha512-7cfE1AyLiK0+ZBG6FmLziJzqQCpTQY+8XjMhMAz8WSBSCsCNNUKujgIgjCAmDT3cJ+3zjTXFkoD15ZPsckArVw==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-nth-child-fix": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/postcss-nth-child-fix/-/postcss-nth-child-fix-2.0.0.tgz",
- "integrity": "sha512-HCp90GlJBIYyeNvyHHvTAmACwINitT4LUJH/BgGaCowKqKFb7hEIpbtksBhxiOsxmFy9gNy2iMvPLrO4JY0rYg==",
- "dev": true,
- "dependencies": {
- "postcss": "^6.0.1"
- }
- },
- "node_modules/postcss-nth-child-fix/node_modules/postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/postcss-opacity": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/postcss-opacity/-/postcss-opacity-5.0.0.tgz",
- "integrity": "sha512-n6LgHk5HWIsyEHgPqM2jwXrkh4SuH+cZOIWh4tUp4ug3P7FkzxiJuqrpEaBvNwH/dKs5PHjHL2vPeR+nLbs+Mw==",
- "dev": true,
- "dependencies": {
- "postcss": "^6.0.7"
- }
- },
- "node_modules/postcss-opacity-percentage": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/postcss-opacity-percentage/-/postcss-opacity-percentage-2.0.0.tgz",
- "integrity": "sha512-lyDrCOtntq5Y1JZpBFzIWm2wG9kbEdujpNt4NLannF+J9c8CgFIzPa80YQfdza+Y+yFfzbYj/rfoOsYsooUWTQ==",
- "dev": true,
- "funding": [
- {
- "type": "kofi",
- "url": "https://ko-fi.com/mrcgrtz"
- },
- {
- "type": "liberapay",
- "url": "https://liberapay.com/mrcgrtz"
- }
- ],
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.2"
- }
- },
- "node_modules/postcss-opacity/node_modules/postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/postcss-ordered-values": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz",
- "integrity": "sha512-K36XzUDpvfG/nWkjs6d1hRBydeIxGpKS2+n+ywlKPzx1nMYDYpoGbcjhj5AwVYJK1qV2/SDoDEnHzlPD6s3nMg==",
- "dev": true,
- "dependencies": {
- "cssnano-utils": "^4.0.0",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-overflow-shorthand": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/postcss-overflow-shorthand/-/postcss-overflow-shorthand-5.0.0.tgz",
- "integrity": "sha512-2rlxDyeSics/hC2FuMdPnWiP9WUPZ5x7FTuArXLFVpaSQ2woPSfZS4RD59HuEokbZhs/wPUQJ1E3MT6zVv94MQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/postcss-page-break": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/postcss-page-break/-/postcss-page-break-3.0.4.tgz",
- "integrity": "sha512-1JGu8oCjVXLa9q9rFTo4MbeeA5FMe00/9C7lN4va606Rdb+HkxXtXsmEDrIraQ11fGz/WvKWa8gMuCKkrXpTsQ==",
- "dev": true,
- "peerDependencies": {
- "postcss": "^8"
- }
- },
- "node_modules/postcss-place": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/postcss-place/-/postcss-place-9.0.0.tgz",
- "integrity": "sha512-qLEPD9VPH5opDVemwmRaujODF9nExn24VOC3ghgVLEvfYN7VZLwJHes0q/C9YR5hI2UC3VgBE8Wkdp1TxCXhtg==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/postcss-position": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/postcss-position/-/postcss-position-1.1.0.tgz",
- "integrity": "sha512-fRXp36r3ipELjlQBig4PwFSIZ3HbS1NOu/sNm73YQhAiXrlBSSZzUC4lXLAHoRYWUV27073sAihmPEJhmiwbVA==",
- "dev": true,
- "dependencies": {
- "postcss": "^6.0.7"
- }
- },
- "node_modules/postcss-position/node_modules/postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/postcss-preset-env": {
- "version": "9.2.0",
- "resolved": "https://registry.npmjs.org/postcss-preset-env/-/postcss-preset-env-9.2.0.tgz",
- "integrity": "sha512-Lnr4C5gb7t5Cc8akQMJzNdJkqw7s7s7BHUaQSgsuf+CTY9Lsz5lqQTft5yNZr59JyCLz0aFNSAqSLm/xRtcTpg==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "@csstools/postcss-cascade-layers": "^4.0.0",
- "@csstools/postcss-color-function": "^3.0.7",
- "@csstools/postcss-color-mix-function": "^2.0.7",
- "@csstools/postcss-exponential-functions": "^1.0.1",
- "@csstools/postcss-font-format-keywords": "^3.0.0",
- "@csstools/postcss-gamut-mapping": "^1.0.0",
- "@csstools/postcss-gradients-interpolation-method": "^4.0.7",
- "@csstools/postcss-hwb-function": "^3.0.6",
- "@csstools/postcss-ic-unit": "^3.0.2",
- "@csstools/postcss-initial": "^1.0.0",
- "@csstools/postcss-is-pseudo-class": "^4.0.3",
- "@csstools/postcss-logical-float-and-clear": "^2.0.0",
- "@csstools/postcss-logical-resize": "^2.0.0",
- "@csstools/postcss-logical-viewport-units": "^2.0.3",
- "@csstools/postcss-media-minmax": "^1.1.0",
- "@csstools/postcss-media-queries-aspect-ratio-number-values": "^2.0.3",
- "@csstools/postcss-nested-calc": "^3.0.0",
- "@csstools/postcss-normalize-display-values": "^3.0.1",
- "@csstools/postcss-oklab-function": "^3.0.7",
- "@csstools/postcss-progressive-custom-properties": "^3.0.2",
- "@csstools/postcss-relative-color-syntax": "^2.0.7",
- "@csstools/postcss-scope-pseudo-class": "^3.0.0",
- "@csstools/postcss-stepped-value-functions": "^3.0.2",
- "@csstools/postcss-text-decoration-shorthand": "^3.0.3",
- "@csstools/postcss-trigonometric-functions": "^3.0.2",
- "@csstools/postcss-unset-value": "^3.0.0",
- "autoprefixer": "^10.4.16",
- "browserslist": "^4.22.1",
- "css-blank-pseudo": "^6.0.0",
- "css-has-pseudo": "^6.0.0",
- "css-prefers-color-scheme": "^9.0.0",
- "cssdb": "^7.8.0",
- "postcss-attribute-case-insensitive": "^6.0.2",
- "postcss-clamp": "^4.1.0",
- "postcss-color-functional-notation": "^6.0.2",
- "postcss-color-hex-alpha": "^9.0.2",
- "postcss-color-rebeccapurple": "^9.0.1",
- "postcss-custom-media": "^10.0.2",
- "postcss-custom-properties": "^13.3.2",
- "postcss-custom-selectors": "^7.1.6",
- "postcss-dir-pseudo-class": "^8.0.0",
- "postcss-double-position-gradients": "^5.0.2",
- "postcss-focus-visible": "^9.0.0",
- "postcss-focus-within": "^8.0.0",
- "postcss-font-variant": "^5.0.0",
- "postcss-gap-properties": "^5.0.0",
- "postcss-image-set-function": "^6.0.1",
- "postcss-lab-function": "^6.0.7",
- "postcss-logical": "^7.0.0",
- "postcss-nesting": "^12.0.1",
- "postcss-opacity-percentage": "^2.0.0",
- "postcss-overflow-shorthand": "^5.0.0",
- "postcss-page-break": "^3.0.4",
- "postcss-place": "^9.0.0",
- "postcss-pseudo-class-any-link": "^9.0.0",
- "postcss-replace-overflow-wrap": "^4.0.0",
- "postcss-selector-not": "^7.0.1",
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/postcss-pseudo-class-any-link": {
- "version": "9.0.0",
- "resolved": "https://registry.npmjs.org/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.0.tgz",
- "integrity": "sha512-QNCYIL98VKFKY6HGDEJpF6+K/sg9bxcUYnOmNHJxZS5wsFDFaVoPeG68WAuhsqwbIBSo/b9fjEnTwY2mTSD+uA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/csstools"
- },
- {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- }
- ],
- "dependencies": {
- "postcss-selector-parser": "^6.0.13"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/postcss-pseudoelements": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/postcss-pseudoelements/-/postcss-pseudoelements-5.0.0.tgz",
- "integrity": "sha512-XHKyn37k6nm8R9C1g+PXisjp5Y8ISOpeuQe9IVCAe5I2+t2WVBtF3YhS1TsRz3asMkW1zg+tIe6g7eX/sT/QOg==",
- "dev": true,
- "dependencies": {
- "postcss": "^6.0.0"
- }
- },
- "node_modules/postcss-pseudoelements/node_modules/postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/postcss-quantity-queries": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/postcss-quantity-queries/-/postcss-quantity-queries-0.5.0.tgz",
- "integrity": "sha512-UycZBVg7WLqRxtM8CyMCJLAgjxEmFgK477cPeMA6hCGGmGufIHbpeZWg0rbFFiTspg4v+ojy+aXOgD6+R2u+1g==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^0.4.2",
- "postcss": "^6.0.0"
- }
- },
- "node_modules/postcss-quantity-queries/node_modules/balanced-match": {
- "version": "0.4.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
- "integrity": "sha512-STw03mQKnGUYtoNjmowo4F2cRmIIxYEGiMsjjwla/u5P1lxadj/05WkNaFjNiKTgJkj8KiXbgAiRTmcQRwQNtg==",
- "dev": true
- },
- "node_modules/postcss-quantity-queries/node_modules/postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/postcss-reduce-initial": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz",
- "integrity": "sha512-s2UOnidpVuXu6JiiI5U+fV2jamAw5YNA9Fdi/GRK0zLDLCfXmSGqQtzpUPtfN66RtCbb9fFHoyZdQaxOB3WxVA==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "caniuse-api": "^3.0.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-reduce-transforms": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz",
- "integrity": "sha512-FQ9f6xM1homnuy1wLe9lP1wujzxnwt1EwiigtWwuyf8FsqqXUDUp2Ulxf9A5yjlUOTdCJO6lonYjg1mgqIIi2w==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-replace-overflow-wrap": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz",
- "integrity": "sha512-KmF7SBPphT4gPPcKZc7aDkweHiKEEO8cla/GjcBK+ckKxiZslIu3C4GCRW3DNfL0o7yW7kMQu9xlZ1kXRXLXtw==",
- "dev": true,
- "peerDependencies": {
- "postcss": "^8.0.3"
- }
- },
- "node_modules/postcss-reporter": {
- "version": "7.0.5",
- "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.5.tgz",
- "integrity": "sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA==",
- "dev": true,
- "dependencies": {
- "picocolors": "^1.0.0",
- "thenby": "^1.3.4"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- "peerDependencies": {
- "postcss": "^8.1.0"
- }
- },
- "node_modules/postcss-responsive-type": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/postcss-responsive-type/-/postcss-responsive-type-1.0.0.tgz",
- "integrity": "sha512-O4kAKbc4RLnSkzcguJ6ojW67uOfeILaj+8xjsO0quLU94d8BKCqYwwFEUVRNbj0YcXA6d3uF/byhbaEATMRVig==",
- "dev": true,
- "dependencies": {
- "postcss": "^6.0.6"
- }
- },
- "node_modules/postcss-responsive-type/node_modules/postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/postcss-selector-not": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/postcss-selector-not/-/postcss-selector-not-7.0.1.tgz",
- "integrity": "sha512-1zT5C27b/zeJhchN7fP0kBr16Cc61mu7Si9uWWLoA3Px/D9tIJPKchJCkUH3tPO5D0pCFmGeApAv8XpXBQJ8SQ==",
- "dev": true,
- "dependencies": {
- "postcss-selector-parser": "^6.0.10"
- },
- "engines": {
- "node": "^14 || ^16 || >=18"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/csstools"
- },
- "peerDependencies": {
- "postcss": "^8.4"
- }
- },
- "node_modules/postcss-selector-parser": {
- "version": "6.0.13",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz",
- "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==",
- "dev": true,
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/postcss-svgo": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-6.0.0.tgz",
- "integrity": "sha512-r9zvj/wGAoAIodn84dR/kFqwhINp5YsJkLoujybWG59grR/IHx+uQ2Zo+IcOwM0jskfYX3R0mo+1Kip1VSNcvw==",
- "dev": true,
- "dependencies": {
- "postcss-value-parser": "^4.2.0",
- "svgo": "^3.0.2"
- },
- "engines": {
- "node": "^14 || ^16 || >= 18"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-unique-selectors": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz",
- "integrity": "sha512-EPQzpZNxOxP7777t73RQpZE5e9TrnCrkvp7AH7a0l89JmZiPnS82y216JowHXwpBCQitfyxrof9TK3rYbi7/Yw==",
- "dev": true,
- "dependencies": {
- "postcss-selector-parser": "^6.0.5"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/postcss-unopacity": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/postcss-unopacity/-/postcss-unopacity-1.0.1.tgz",
- "integrity": "sha512-gTxY/07heqh9hBMoUK6PaVvZlElJLpsPtawUagDM4TtSYqW1rOP8thnqLugatV4P1FUSokx+BoZMxUZDgYD2lw==",
- "dev": true,
- "dependencies": {
- "postcss": "^5.0.10"
- },
- "engines": {
- "iojs": ">=2.0.0",
- "node": ">=0.12.0"
- }
- },
- "node_modules/postcss-unopacity/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-unopacity/node_modules/ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-unopacity/node_modules/chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-unopacity/node_modules/chalk/node_modules/supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/postcss-unopacity/node_modules/has-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
- "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-unopacity/node_modules/postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "dependencies": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- },
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/postcss-unopacity/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-unopacity/node_modules/strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-unopacity/node_modules/supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
- "dev": true,
- "dependencies": {
- "has-flag": "^1.0.0"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/postcss-unroot": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/postcss-unroot/-/postcss-unroot-1.0.2.tgz",
- "integrity": "sha512-XaxPQVCHSQiME/5pUXBxA5TWoEmqcZ5rdEpORX6/rj9Cu42tpbW/VQ434BTr9rbh7CeBy1sTKZV1wmJKnGbr7Q==",
- "dev": true,
- "dependencies": {
- "postcss": "^5.0.10",
- "postcss-selector-parser": "^1.3.0"
- },
- "engines": {
- "iojs": ">=2.0.0",
- "node": ">=0.12.0"
- }
- },
- "node_modules/postcss-unroot/node_modules/ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-unroot/node_modules/ansi-styles": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
- "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-unroot/node_modules/chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^2.2.1",
- "escape-string-regexp": "^1.0.2",
- "has-ansi": "^2.0.0",
- "strip-ansi": "^3.0.0",
- "supports-color": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-unroot/node_modules/chalk/node_modules/supports-color": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
- "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==",
- "dev": true,
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/postcss-unroot/node_modules/has-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz",
- "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-unroot/node_modules/postcss": {
- "version": "5.2.18",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-5.2.18.tgz",
- "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==",
- "dev": true,
- "dependencies": {
- "chalk": "^1.1.3",
- "js-base64": "^2.1.9",
- "source-map": "^0.5.6",
- "supports-color": "^3.2.3"
- },
- "engines": {
- "node": ">=0.12"
- }
- },
- "node_modules/postcss-unroot/node_modules/postcss-selector-parser": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-1.3.3.tgz",
- "integrity": "sha512-YVWTPQprpsXhiQyZe3PW1U5stw+/OI7mMG7REN5sx9z6eaIpuzTUm5vy9RI4NTLR7hC9SqNYmxhyxTkorC2KFg==",
- "dev": true,
- "dependencies": {
- "flatten": "^1.0.2",
- "indexes-of": "^1.0.1",
- "uniq": "^1.0.1"
- }
- },
- "node_modules/postcss-unroot/node_modules/source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-unroot/node_modules/strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^2.0.0"
- },
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/postcss-unroot/node_modules/supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==",
- "dev": true,
- "dependencies": {
- "has-flag": "^1.0.0"
- },
- "engines": {
- "node": ">=0.8.0"
- }
- },
- "node_modules/postcss-value-parser": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
- "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
- "dev": true
- },
- "node_modules/postcss-vmin": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/postcss-vmin/-/postcss-vmin-3.0.0.tgz",
- "integrity": "sha512-HClmFL5Ped57dCk9KMgB2xwqWSVL1YB5vOtoQqIYXo8LhKZXmkdEZHT4iVy1+WAHuq3Xk8M733peHHM7Umstow==",
- "dev": true,
- "dependencies": {
- "postcss": "^6.0.0"
- }
- },
- "node_modules/postcss-vmin/node_modules/postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/postcss-will-change": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/postcss-will-change/-/postcss-will-change-4.0.1.tgz",
- "integrity": "sha512-nJIHJ+mwWviIPVs/vuUfa/w8XAOXUjfYSIfNgdnZdo9uHC96x4nrY2ByEkdwYLvnxKto09JYDSWH8sWYLoUhUA==",
- "dev": true,
- "engines": {
- "node": ">=10.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
- },
- "peerDependencies": {
- "postcss": "^8.1.0"
- }
- },
- "node_modules/pretty-hrtime": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
- "integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==",
- "dev": true,
- "engines": {
- "node": ">= 0.8"
- }
- },
- "node_modules/queue-microtask": {
- "version": "1.2.3",
- "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/read-cache": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
- "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
- "dev": true,
- "dependencies": {
- "pify": "^2.3.0"
- }
- },
- "node_modules/read-file-stdin": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/read-file-stdin/-/read-file-stdin-0.2.1.tgz",
- "integrity": "sha512-dAqysQ4kfj9m5aejZOPr+aRGXZJXdLkMOLZ3BXMwMBQHiO+aylGBFJPh88AYPQrOf+D43F4Uc2oUIW9kBlItLA==",
- "dev": true,
- "dependencies": {
- "gather-stream": "^1.0.0"
- }
- },
- "node_modules/readable-stream": {
- "version": "1.1.14",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
- "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
- "dev": true,
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "node_modules/readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "dependencies": {
- "picomatch": "^2.2.1"
- },
- "engines": {
- "node": ">=8.10.0"
- }
- },
- "node_modules/reduce-css-calc": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz",
- "integrity": "sha512-8liAVezDmUcH+tdzoEGrhfbGcP7nOV4NkGE3a74+qqvE7nt9i4sKLGBuZNOnpI4WiGksiNPklZxva80061QiPg==",
- "dev": true,
- "dependencies": {
- "css-unit-converter": "^1.1.1",
- "postcss-value-parser": "^3.3.0"
- }
- },
- "node_modules/reduce-css-calc/node_modules/postcss-value-parser": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
- "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
- "dev": true
- },
- "node_modules/reduce-function-call": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/reduce-function-call/-/reduce-function-call-1.0.3.tgz",
- "integrity": "sha512-Hl/tuV2VDgWgCSEeWMLwxLZqX7OK59eU1guxXsRKTAyeYimivsKdtcV4fu3r710tpG5GmDKDhQ0HSZLExnNmyQ==",
- "dev": true,
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/regenerate": {
- "version": "1.4.2",
- "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz",
- "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==",
- "dev": true
- },
- "node_modules/regenerate-unicode-properties": {
- "version": "10.1.1",
- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz",
- "integrity": "sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==",
- "dev": true,
- "dependencies": {
- "regenerate": "^1.4.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/regenerator-runtime": {
- "version": "0.14.0",
- "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz",
- "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==",
- "dev": true
- },
- "node_modules/regenerator-transform": {
- "version": "0.15.2",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz",
- "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==",
- "dev": true,
- "dependencies": {
- "@babel/runtime": "^7.8.4"
- }
- },
- "node_modules/regexpu-core": {
- "version": "5.3.2",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz",
- "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==",
- "dev": true,
- "dependencies": {
- "@babel/regjsgen": "^0.8.0",
- "regenerate": "^1.4.2",
- "regenerate-unicode-properties": "^10.1.0",
- "regjsparser": "^0.9.1",
- "unicode-match-property-ecmascript": "^2.0.0",
- "unicode-match-property-value-ecmascript": "^2.1.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/regjsparser": {
- "version": "0.9.1",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz",
- "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==",
- "dev": true,
- "dependencies": {
- "jsesc": "~0.5.0"
- },
- "bin": {
- "regjsparser": "bin/parser"
- }
- },
- "node_modules/regjsparser/node_modules/jsesc": {
- "version": "0.5.0",
- "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
- "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==",
- "dev": true,
- "bin": {
- "jsesc": "bin/jsesc"
- }
- },
- "node_modules/require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/resolve": {
- "version": "1.22.8",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz",
- "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==",
- "dev": true,
- "dependencies": {
- "is-core-module": "^2.13.0",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- },
- "bin": {
- "resolve": "bin/resolve"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/reusify": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
- "dev": true,
- "engines": {
- "iojs": ">=1.0.0",
- "node": ">=0.10.0"
- }
- },
- "node_modules/rgb-hex": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/rgb-hex/-/rgb-hex-3.0.0.tgz",
- "integrity": "sha512-8h7ZcwxCBDKvchSWbWngJuSCqJGQ6nDuLLg+QcRyQDbX9jMWt+PpPeXAhSla0GOooEomk3lCprUpGkMdsLjKyg==",
- "dev": true,
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/rucksack-css": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/rucksack-css/-/rucksack-css-1.0.2.tgz",
- "integrity": "sha512-+ir3KHUb+IfCjqTsUruYZDKf95GZKhqucVridhNSuU9AsC7efqBhKtzJeMNZqc+EOND0LWBenG5ZCodKUPbL6g==",
- "dev": true,
- "dependencies": {
- "autoprefixer": "^7.1.2",
- "laggard": "^2.0.0",
- "minimist": "^1.1.2",
- "postcss": "^6.0.8",
- "postcss-alias": "^2.0.0",
- "postcss-clearfix": "^2.0.1",
- "postcss-color-rgba-fallback": "^3.0.0",
- "postcss-easings": "^1.0.0",
- "postcss-fontpath": "^1.0.0",
- "postcss-hexrgba": "^1.0.0",
- "postcss-input-style": "^1.0.0",
- "postcss-opacity": "^5.0.0",
- "postcss-position": "^1.0.0",
- "postcss-pseudoelements": "^5.0.0",
- "postcss-quantity-queries": "^0.5.0",
- "postcss-reporter": "^5.0.0",
- "postcss-responsive-type": "^1.0.0",
- "postcss-vmin": "^3.0.0",
- "read-file-stdin": "^0.2.0",
- "write-file-stdout": "^0.0.2"
- },
- "bin": {
- "rucksack": "bin/cmd.js"
- },
- "engines": {
- "node": ">= 0.12.0"
- }
- },
- "node_modules/rucksack-css/node_modules/autoprefixer": {
- "version": "7.2.6",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.6.tgz",
- "integrity": "sha512-Iq8TRIB+/9eQ8rbGhcP7ct5cYb/3qjNYAR2SnzLCEcwF6rvVOax8+9+fccgXk4bEhQGjOZd5TLhsksmAdsbGqQ==",
- "dev": true,
- "dependencies": {
- "browserslist": "^2.11.3",
- "caniuse-lite": "^1.0.30000805",
- "normalize-range": "^0.1.2",
- "num2fraction": "^1.2.2",
- "postcss": "^6.0.17",
- "postcss-value-parser": "^3.2.3"
- },
- "bin": {
- "autoprefixer-info": "bin/autoprefixer-info"
- }
- },
- "node_modules/rucksack-css/node_modules/browserslist": {
- "version": "2.11.3",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.11.3.tgz",
- "integrity": "sha512-yWu5cXT7Av6mVwzWc8lMsJMHWn4xyjSuGYi4IozbVTLUOEYPSagUB8kiMDUHA1fS3zjr8nkxkn9jdvug4BBRmA==",
- "deprecated": "Browserslist 2 could fail on reading Browserslist >3.0 config used in other tools.",
- "dev": true,
- "dependencies": {
- "caniuse-lite": "^1.0.30000792",
- "electron-to-chromium": "^1.3.30"
- },
- "bin": {
- "browserslist": "cli.js"
- }
- },
- "node_modules/rucksack-css/node_modules/postcss": {
- "version": "6.0.23",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.23.tgz",
- "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.4.1",
- "source-map": "^0.6.1",
- "supports-color": "^5.4.0"
- },
- "engines": {
- "node": ">=4.0.0"
- }
- },
- "node_modules/rucksack-css/node_modules/postcss-color-rgba-fallback": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/postcss-color-rgba-fallback/-/postcss-color-rgba-fallback-3.0.0.tgz",
- "integrity": "sha512-RBCHHCQ0sVJH+y31jiVSLBM/b3vvfiU8g9tyAglpF7NOuYzcw41Tu+iGEm8B2zVEAYYgEhWCASNY/j4Wh3vi4w==",
- "dev": true,
- "dependencies": {
- "postcss": "^6.0.6",
- "postcss-value-parser": "^3.3.0",
- "rgb-hex": "^2.1.0"
- }
- },
- "node_modules/rucksack-css/node_modules/postcss-reporter": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-5.0.0.tgz",
- "integrity": "sha512-rBkDbaHAu5uywbCR2XE8a25tats3xSOsGNx6mppK6Q9kSFGKc/FyAzfci+fWM2l+K402p1D0pNcfDGxeje5IKg==",
- "dev": true,
- "dependencies": {
- "chalk": "^2.0.1",
- "lodash": "^4.17.4",
- "log-symbols": "^2.0.0",
- "postcss": "^6.0.8"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/rucksack-css/node_modules/postcss-value-parser": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
- "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
- "dev": true
- },
- "node_modules/rucksack-css/node_modules/rgb-hex": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/rgb-hex/-/rgb-hex-2.1.0.tgz",
- "integrity": "sha512-1hDa60MqECZiEGsa9TtcOE9VbV6fhZSMQARy7U+a2HkhIJyoEBhcG4v/qYAJYzV3Bbj+j52sBoAIKKF5EPuQZw==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/run-parallel": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
- "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ],
- "dependencies": {
- "queue-microtask": "^1.2.2"
- }
- },
- "node_modules/safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true,
- "funding": [
- {
- "type": "github",
- "url": "https://github.com/sponsors/feross"
- },
- {
- "type": "patreon",
- "url": "https://www.patreon.com/feross"
- },
- {
- "type": "consulting",
- "url": "https://feross.org/support"
- }
- ]
- },
- "node_modules/semver": {
- "version": "6.3.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz",
- "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==",
- "dev": true,
- "bin": {
- "semver": "bin/semver.js"
- }
- },
- "node_modules/slash": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
- "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
- "dev": true,
- "engines": {
- "node": ">=14.16"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
- "node_modules/source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
- "dev": true,
- "engines": {
- "node": ">=0.10.0"
- }
- },
- "node_modules/split2": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/split2/-/split2-0.2.1.tgz",
- "integrity": "sha512-D/oTExYAkC9nWleOCTOyNmAuzfAT/6rHGBA9LIK7FVnGo13CSvrKCUzKenwH6U1s2znY9MqH6v0UQTEDa3vJmg==",
- "dev": true,
- "dependencies": {
- "through2": "~0.6.1"
- }
- },
- "node_modules/stream-shift": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
- "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
- "dev": true
- },
- "node_modules/string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
- "dev": true
- },
- "node_modules/string-width": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
- "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
- "dependencies": {
- "emoji-regex": "^8.0.0",
- "is-fullwidth-code-point": "^3.0.0",
- "strip-ansi": "^6.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "dependencies": {
- "ansi-regex": "^5.0.1"
- },
- "engines": {
- "node": ">=8"
- }
- },
- "node_modules/stylehacks": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.0.tgz",
- "integrity": "sha512-+UT589qhHPwz6mTlCLSt/vMNTJx8dopeJlZAlBMJPWA3ORqu6wmQY7FBXf+qD+FsqoBJODyqNxOUP3jdntFRdw==",
- "dev": true,
- "dependencies": {
- "browserslist": "^4.21.4",
- "postcss-selector-parser": "^6.0.4"
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
- },
- "peerDependencies": {
- "postcss": "^8.2.15"
- }
- },
- "node_modules/supports-color": {
- "version": "5.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
- "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
- "dev": true,
- "dependencies": {
- "has-flag": "^3.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true,
- "engines": {
- "node": ">= 0.4"
- },
- "funding": {
- "url": "https://github.com/sponsors/ljharb"
- }
- },
- "node_modules/svgo": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz",
- "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==",
- "dev": true,
- "dependencies": {
- "@trysound/sax": "0.2.0",
- "commander": "^7.2.0",
- "css-select": "^5.1.0",
- "css-tree": "^2.2.1",
- "csso": "^5.0.5",
- "picocolors": "^1.0.0"
- },
- "bin": {
- "svgo": "bin/svgo"
- },
- "engines": {
- "node": ">=14.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/svgo"
- }
- },
- "node_modules/thenby": {
- "version": "1.3.4",
- "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz",
- "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==",
- "dev": true
- },
- "node_modules/through2": {
- "version": "0.6.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
- "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==",
- "dev": true,
- "dependencies": {
- "readable-stream": ">=1.0.33-1 <1.1.0-0",
- "xtend": ">=4.0.0 <4.1.0-0"
- }
- },
- "node_modules/through2/node_modules/readable-stream": {
- "version": "1.0.34",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
- "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==",
- "dev": true,
- "dependencies": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.1",
- "isarray": "0.0.1",
- "string_decoder": "~0.10.x"
- }
- },
- "node_modules/to-fast-properties": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
- "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "dependencies": {
- "is-number": "^7.0.0"
- },
- "engines": {
- "node": ">=8.0"
- }
- },
- "node_modules/unicode-canonical-property-names-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz",
- "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/unicode-match-property-ecmascript": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz",
- "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==",
- "dev": true,
- "dependencies": {
- "unicode-canonical-property-names-ecmascript": "^2.0.0",
- "unicode-property-aliases-ecmascript": "^2.0.0"
- },
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/unicode-match-property-value-ecmascript": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz",
- "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/unicode-property-aliases-ecmascript": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz",
- "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==",
- "dev": true,
- "engines": {
- "node": ">=4"
- }
- },
- "node_modules/uniq": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz",
- "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==",
- "dev": true
- },
- "node_modules/universalify": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
- "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
- "dev": true,
- "engines": {
- "node": ">= 10.0.0"
- }
- },
- "node_modules/update-browserslist-db": {
- "version": "1.0.13",
- "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz",
- "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==",
- "dev": true,
- "funding": [
- {
- "type": "opencollective",
- "url": "https://opencollective.com/browserslist"
- },
- {
- "type": "tidelift",
- "url": "https://tidelift.com/funding/github/npm/browserslist"
- },
- {
- "type": "github",
- "url": "https://github.com/sponsors/ai"
- }
- ],
- "dependencies": {
- "escalade": "^3.1.1",
- "picocolors": "^1.0.0"
- },
- "bin": {
- "update-browserslist-db": "cli.js"
- },
- "peerDependencies": {
- "browserslist": ">= 4.21.0"
- }
- },
- "node_modules/util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
- "dev": true
- },
- "node_modules/wrap-ansi": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
- "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
- "dependencies": {
- "ansi-styles": "^4.0.0",
- "string-width": "^4.1.0",
- "strip-ansi": "^6.0.0"
- },
- "engines": {
- "node": ">=10"
- },
- "funding": {
- "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
- }
- },
- "node_modules/wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
- "dev": true
- },
- "node_modules/write-file-stdout": {
- "version": "0.0.2",
- "resolved": "https://registry.npmjs.org/write-file-stdout/-/write-file-stdout-0.0.2.tgz",
- "integrity": "sha512-KofbSPeePSre3soWCMaqcWHVZy9t/rbJaEMa2h19cupODsvc4eh7390Se1TjzZEL77rS+D6dznu0TLXyCbR+sw==",
- "dev": true
- },
- "node_modules/xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "dev": true,
- "engines": {
- "node": ">=0.4"
- }
- },
- "node_modules/y18n": {
- "version": "5.0.8",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
- "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
- "dev": true,
- "engines": {
- "node": ">=10"
- }
- },
- "node_modules/yallist": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
- "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
- "dev": true
- },
- "node_modules/yaml": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.2.tgz",
- "integrity": "sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==",
- "dev": true,
- "engines": {
- "node": ">= 14"
- }
- },
- "node_modules/yargs": {
- "version": "17.7.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz",
- "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==",
- "dev": true,
- "dependencies": {
- "cliui": "^8.0.1",
- "escalade": "^3.1.1",
- "get-caller-file": "^2.0.5",
- "require-directory": "^2.1.1",
- "string-width": "^4.2.3",
- "y18n": "^5.0.5",
- "yargs-parser": "^21.1.1"
- },
- "engines": {
- "node": ">=12"
- }
- },
- "node_modules/yargs-parser": {
- "version": "21.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
- "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
- "dev": true,
- "engines": {
- "node": ">=12"
- }
- }
- }
-}
diff --git a/node_modules/.yarn-integrity b/node_modules/.yarn-integrity
new file mode 100644
index 00000000..f60db7a8
--- /dev/null
+++ b/node_modules/.yarn-integrity
@@ -0,0 +1,588 @@
+{
+ "systemParams": "darwin-arm64-115",
+ "modulesFolders": [
+ "node_modules"
+ ],
+ "flags": [],
+ "linkedModules": [],
+ "topLevelPatterns": [
+ "@babel/cli@^7.23.0",
+ "@babel/core@^7.23.2",
+ "@babel/preset-env@^7.23.2",
+ "autoprefixer@^10.4.16",
+ "cssnano@^6.0.1",
+ "doiuse@^6.0.2",
+ "g@^2.0.1",
+ "pixrem@^5.0.0",
+ "postcss-cli@^10.1.0",
+ "postcss-color-rgba-fallback@^4.0.0",
+ "postcss-fixes@^3.0.0",
+ "postcss-opacity@^5.0.0",
+ "postcss-preset-env@^9.2.0",
+ "postcss-pseudoelements@^5.0.0",
+ "postcss-vmin@^3.0.0",
+ "postcss-will-change@^4.0.1",
+ "postcss@^8.4.31",
+ "rucksack-css@^1.0.2"
+ ],
+ "lockfileEntries": {
+ "@ampproject/remapping@^2.2.0": "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.2.1.tgz#99e8e11851128b8702cd57c33684f1d0f260b630",
+ "@babel/cli@^7.23.0": "https://registry.yarnpkg.com/@babel/cli/-/cli-7.23.0.tgz#1d7f37c44d4117c67df46749e0c86e11a58cc64b",
+ "@babel/code-frame@^7.22.13": "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e",
+ "@babel/compat-data@^7.22.6": "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.2.tgz#6a12ced93455827037bfb5ed8492820d60fc32cc",
+ "@babel/compat-data@^7.22.9": "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.2.tgz#6a12ced93455827037bfb5ed8492820d60fc32cc",
+ "@babel/compat-data@^7.23.2": "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.23.2.tgz#6a12ced93455827037bfb5ed8492820d60fc32cc",
+ "@babel/core@^7.23.2": "https://registry.yarnpkg.com/@babel/core/-/core-7.23.2.tgz#ed10df0d580fff67c5f3ee70fd22e2e4c90a9f94",
+ "@babel/generator@^7.23.0": "https://registry.yarnpkg.com/@babel/generator/-/generator-7.23.0.tgz#df5c386e2218be505b34837acbcb874d7a983420",
+ "@babel/helper-annotate-as-pure@^7.22.5": "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz#e7f06737b197d580a01edf75d97e2c8be99d3882",
+ "@babel/helper-builder-binary-assignment-operator-visitor@^7.22.5": "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz#5426b109cf3ad47b91120f8328d8ab1be8b0b956",
+ "@babel/helper-compilation-targets@^7.22.15": "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52",
+ "@babel/helper-compilation-targets@^7.22.5": "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52",
+ "@babel/helper-compilation-targets@^7.22.6": "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz#0698fc44551a26cf29f18d4662d5bf545a6cfc52",
+ "@babel/helper-create-class-features-plugin@^7.22.11": "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4",
+ "@babel/helper-create-class-features-plugin@^7.22.5": "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz#97a61b385e57fe458496fad19f8e63b63c867de4",
+ "@babel/helper-create-regexp-features-plugin@^7.18.6": "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1",
+ "@babel/helper-create-regexp-features-plugin@^7.22.5": "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz#5ee90093914ea09639b01c711db0d6775e558be1",
+ "@babel/helper-define-polyfill-provider@^0.4.3": "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz#a71c10f7146d809f4a256c373f462d9bba8cf6ba",
+ "@babel/helper-environment-visitor@^7.22.20": "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167",
+ "@babel/helper-environment-visitor@^7.22.5": "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz#96159db61d34a29dba454c959f5ae4a649ba9167",
+ "@babel/helper-function-name@^7.22.5": "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759",
+ "@babel/helper-function-name@^7.23.0": "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz#1f9a3cdbd5b2698a670c30d2735f9af95ed52759",
+ "@babel/helper-hoist-variables@^7.22.5": "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz#c01a007dac05c085914e8fb652b339db50d823bb",
+ "@babel/helper-member-expression-to-functions@^7.22.15": "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz#9263e88cc5e41d39ec18c9a3e0eced59a3e7d366",
+ "@babel/helper-module-imports@^7.22.15": "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0",
+ "@babel/helper-module-imports@^7.22.5": "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0",
+ "@babel/helper-module-transforms@^7.22.5": "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e",
+ "@babel/helper-module-transforms@^7.23.0": "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.23.0.tgz#3ec246457f6c842c0aee62a01f60739906f7047e",
+ "@babel/helper-optimise-call-expression@^7.22.5": "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz#f21531a9ccbff644fdd156b4077c16ff0c3f609e",
+ "@babel/helper-plugin-utils@^7.0.0": "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295",
+ "@babel/helper-plugin-utils@^7.10.4": "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295",
+ "@babel/helper-plugin-utils@^7.12.13": "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295",
+ "@babel/helper-plugin-utils@^7.14.5": "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295",
+ "@babel/helper-plugin-utils@^7.18.6": "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295",
+ "@babel/helper-plugin-utils@^7.22.5": "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295",
+ "@babel/helper-plugin-utils@^7.8.0": "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295",
+ "@babel/helper-plugin-utils@^7.8.3": "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295",
+ "@babel/helper-remap-async-to-generator@^7.22.20": "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0",
+ "@babel/helper-remap-async-to-generator@^7.22.5": "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz#7b68e1cb4fa964d2996fd063723fb48eca8498e0",
+ "@babel/helper-replace-supers@^7.22.5": "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793",
+ "@babel/helper-replace-supers@^7.22.9": "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz#e37d367123ca98fe455a9887734ed2e16eb7a793",
+ "@babel/helper-simple-access@^7.22.5": "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz#4938357dc7d782b80ed6dbb03a0fba3d22b1d5de",
+ "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz#007f15240b5751c537c40e77abb4e89eeaaa8847",
+ "@babel/helper-split-export-declaration@^7.22.6": "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz#322c61b7310c0997fe4c323955667f18fcefb91c",
+ "@babel/helper-string-parser@^7.22.5": "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f",
+ "@babel/helper-validator-identifier@^7.22.20": "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0",
+ "@babel/helper-validator-option@^7.22.15": "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz#694c30dfa1d09a6534cdfcafbe56789d36aba040",
+ "@babel/helper-wrap-function@^7.22.20": "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz#15352b0b9bfb10fc9c76f79f6342c00e3411a569",
+ "@babel/helpers@^7.23.2": "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.23.2.tgz#2832549a6e37d484286e15ba36a5330483cac767",
+ "@babel/highlight@^7.22.13": "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.20.tgz#4ca92b71d80554b01427815e06f2df965b9c1f54",
+ "@babel/parser@^7.22.15": "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719",
+ "@babel/parser@^7.23.0": "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.0.tgz#da950e622420bf96ca0d0f2909cdddac3acd8719",
+ "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.22.15": "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.15.tgz#02dc8a03f613ed5fdc29fb2f728397c78146c962",
+ "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.15": "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.15.tgz#2aeb91d337d4e1a1e7ce85b76a37f5301781200f",
+ "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703",
+ "@babel/plugin-syntax-async-generators@^7.8.4": "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d",
+ "@babel/plugin-syntax-class-properties@^7.12.13": "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10",
+ "@babel/plugin-syntax-class-static-block@^7.14.5": "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406",
+ "@babel/plugin-syntax-dynamic-import@^7.8.3": "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3",
+ "@babel/plugin-syntax-export-namespace-from@^7.8.3": "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a",
+ "@babel/plugin-syntax-import-assertions@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz#07d252e2aa0bc6125567f742cd58619cb14dce98",
+ "@babel/plugin-syntax-import-attributes@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz#ab840248d834410b829f569f5262b9e517555ecb",
+ "@babel/plugin-syntax-import-meta@^7.10.4": "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51",
+ "@babel/plugin-syntax-json-strings@^7.8.3": "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a",
+ "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699",
+ "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9",
+ "@babel/plugin-syntax-numeric-separator@^7.10.4": "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97",
+ "@babel/plugin-syntax-object-rest-spread@^7.8.3": "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871",
+ "@babel/plugin-syntax-optional-catch-binding@^7.8.3": "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1",
+ "@babel/plugin-syntax-optional-chaining@^7.8.3": "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a",
+ "@babel/plugin-syntax-private-property-in-object@^7.14.5": "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad",
+ "@babel/plugin-syntax-top-level-await@^7.14.5": "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c",
+ "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357",
+ "@babel/plugin-transform-arrow-functions@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz#e5ba566d0c58a5b2ba2a8b795450641950b71958",
+ "@babel/plugin-transform-async-generator-functions@^7.23.2": "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.2.tgz#054afe290d64c6f576f371ccc321772c8ea87ebb",
+ "@babel/plugin-transform-async-to-generator@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz#c7a85f44e46f8952f6d27fe57c2ed3cc084c3775",
+ "@babel/plugin-transform-block-scoped-functions@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz#27978075bfaeb9fa586d3cb63a3d30c1de580024",
+ "@babel/plugin-transform-block-scoping@^7.23.0": "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.0.tgz#8744d02c6c264d82e1a4bc5d2d501fd8aff6f022",
+ "@babel/plugin-transform-class-properties@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz#97a56e31ad8c9dc06a0b3710ce7803d5a48cca77",
+ "@babel/plugin-transform-class-static-block@^7.22.11": "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.11.tgz#dc8cc6e498f55692ac6b4b89e56d87cec766c974",
+ "@babel/plugin-transform-classes@^7.22.15": "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.15.tgz#aaf4753aee262a232bbc95451b4bdf9599c65a0b",
+ "@babel/plugin-transform-computed-properties@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz#cd1e994bf9f316bd1c2dafcd02063ec261bb3869",
+ "@babel/plugin-transform-destructuring@^7.23.0": "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.0.tgz#6447aa686be48b32eaf65a73e0e2c0bd010a266c",
+ "@babel/plugin-transform-dotall-regex@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz#dbb4f0e45766eb544e193fb00e65a1dd3b2a4165",
+ "@babel/plugin-transform-duplicate-keys@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz#b6e6428d9416f5f0bba19c70d1e6e7e0b88ab285",
+ "@babel/plugin-transform-dynamic-import@^7.22.11": "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.11.tgz#2c7722d2a5c01839eaf31518c6ff96d408e447aa",
+ "@babel/plugin-transform-exponentiation-operator@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz#402432ad544a1f9a480da865fda26be653e48f6a",
+ "@babel/plugin-transform-export-namespace-from@^7.22.11": "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.11.tgz#b3c84c8f19880b6c7440108f8929caf6056db26c",
+ "@babel/plugin-transform-for-of@^7.22.15": "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.15.tgz#f64b4ccc3a4f131a996388fae7680b472b306b29",
+ "@babel/plugin-transform-function-name@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz#935189af68b01898e0d6d99658db6b164205c143",
+ "@babel/plugin-transform-json-strings@^7.22.11": "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.11.tgz#689a34e1eed1928a40954e37f74509f48af67835",
+ "@babel/plugin-transform-literals@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz#e9341f4b5a167952576e23db8d435849b1dd7920",
+ "@babel/plugin-transform-logical-assignment-operators@^7.22.11": "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.11.tgz#24c522a61688bde045b7d9bc3c2597a4d948fc9c",
+ "@babel/plugin-transform-member-expression-literals@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz#4fcc9050eded981a468347dd374539ed3e058def",
+ "@babel/plugin-transform-modules-amd@^7.23.0": "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.0.tgz#05b2bc43373faa6d30ca89214731f76f966f3b88",
+ "@babel/plugin-transform-modules-commonjs@^7.23.0": "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.0.tgz#b3dba4757133b2762c00f4f94590cf6d52602481",
+ "@babel/plugin-transform-modules-systemjs@^7.23.0": "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.0.tgz#77591e126f3ff4132a40595a6cccd00a6b60d160",
+ "@babel/plugin-transform-modules-umd@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz#4694ae40a87b1745e3775b6a7fe96400315d4f98",
+ "@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz#67fe18ee8ce02d57c855185e27e3dc959b2e991f",
+ "@babel/plugin-transform-new-target@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz#1b248acea54ce44ea06dfd37247ba089fcf9758d",
+ "@babel/plugin-transform-nullish-coalescing-operator@^7.22.11": "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.11.tgz#debef6c8ba795f5ac67cd861a81b744c5d38d9fc",
+ "@babel/plugin-transform-numeric-separator@^7.22.11": "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.11.tgz#498d77dc45a6c6db74bb829c02a01c1d719cbfbd",
+ "@babel/plugin-transform-object-rest-spread@^7.22.15": "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.15.tgz#21a95db166be59b91cde48775310c0df6e1da56f",
+ "@babel/plugin-transform-object-super@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz#794a8d2fcb5d0835af722173c1a9d704f44e218c",
+ "@babel/plugin-transform-optional-catch-binding@^7.22.11": "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.11.tgz#461cc4f578a127bb055527b3e77404cad38c08e0",
+ "@babel/plugin-transform-optional-chaining@^7.22.15": "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz#73ff5fc1cf98f542f09f29c0631647d8ad0be158",
+ "@babel/plugin-transform-optional-chaining@^7.23.0": "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.0.tgz#73ff5fc1cf98f542f09f29c0631647d8ad0be158",
+ "@babel/plugin-transform-parameters@^7.22.15": "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.15.tgz#719ca82a01d177af358df64a514d64c2e3edb114",
+ "@babel/plugin-transform-private-methods@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz#21c8af791f76674420a147ae62e9935d790f8722",
+ "@babel/plugin-transform-private-property-in-object@^7.22.11": "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.11.tgz#ad45c4fc440e9cb84c718ed0906d96cf40f9a4e1",
+ "@babel/plugin-transform-property-literals@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz#b5ddabd73a4f7f26cd0e20f5db48290b88732766",
+ "@babel/plugin-transform-regenerator@^7.22.10": "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz#8ceef3bd7375c4db7652878b0241b2be5d0c3cca",
+ "@babel/plugin-transform-reserved-words@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz#832cd35b81c287c4bcd09ce03e22199641f964fb",
+ "@babel/plugin-transform-shorthand-properties@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz#6e277654be82b5559fc4b9f58088507c24f0c624",
+ "@babel/plugin-transform-spread@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz#6487fd29f229c95e284ba6c98d65eafb893fea6b",
+ "@babel/plugin-transform-sticky-regex@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz#295aba1595bfc8197abd02eae5fc288c0deb26aa",
+ "@babel/plugin-transform-template-literals@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz#8f38cf291e5f7a8e60e9f733193f0bcc10909bff",
+ "@babel/plugin-transform-typeof-symbol@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz#5e2ba478da4b603af8673ff7c54f75a97b716b34",
+ "@babel/plugin-transform-unicode-escapes@^7.22.10": "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz#c723f380f40a2b2f57a62df24c9005834c8616d9",
+ "@babel/plugin-transform-unicode-property-regex@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz#098898f74d5c1e86660dc112057b2d11227f1c81",
+ "@babel/plugin-transform-unicode-regex@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz#ce7e7bb3ef208c4ff67e02a22816656256d7a183",
+ "@babel/plugin-transform-unicode-sets-regex@^7.22.5": "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz#77788060e511b708ffc7d42fdfbc5b37c3004e91",
+ "@babel/preset-env@^7.23.2": "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.23.2.tgz#1f22be0ff0e121113260337dbc3e58fafce8d059",
+ "@babel/preset-modules@0.1.6-no-external-plugins": "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a",
+ "@babel/regjsgen@^0.8.0": "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310",
+ "@babel/runtime@^7.8.4": "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885",
+ "@babel/template@^7.22.15": "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38",
+ "@babel/template@^7.22.5": "https://registry.yarnpkg.com/@babel/template/-/template-7.22.15.tgz#09576efc3830f0430f4548ef971dde1350ef2f38",
+ "@babel/traverse@^7.23.2": "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.23.2.tgz#329c7a06735e144a506bdb2cad0268b7f46f4ad8",
+ "@babel/types@^7.22.15": "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb",
+ "@babel/types@^7.22.19": "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb",
+ "@babel/types@^7.22.5": "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb",
+ "@babel/types@^7.23.0": "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb",
+ "@babel/types@^7.4.4": "https://registry.yarnpkg.com/@babel/types/-/types-7.23.0.tgz#8c1f020c9df0e737e4e247c0619f58c68458aaeb",
+ "@csstools/cascade-layer-name-parser@^1.0.5": "https://registry.yarnpkg.com/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.5.tgz#c4d276e32787651df0007af22c9fa70d9c9ca3c2",
+ "@csstools/color-helpers@^3.0.2": "https://registry.yarnpkg.com/@csstools/color-helpers/-/color-helpers-3.0.2.tgz#6571d289af8bfcc3a8d75357b35e6d17a8ba6848",
+ "@csstools/css-calc@^1.1.4": "https://registry.yarnpkg.com/@csstools/css-calc/-/css-calc-1.1.4.tgz#70bf4c5b379cdc256d3936bf4a21e3a3454a3d68",
+ "@csstools/css-color-parser@^1.4.0": "https://registry.yarnpkg.com/@csstools/css-color-parser/-/css-color-parser-1.4.0.tgz#c8517457dcb6ad080848b1583aa029ab61221ce8",
+ "@csstools/css-parser-algorithms@2.3.2": "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.2.tgz#1e0d581dbf4518cb3e939c3b863cb7180c8cedad",
+ "@csstools/css-parser-algorithms@^2.3.2": "https://registry.yarnpkg.com/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.3.2.tgz#1e0d581dbf4518cb3e939c3b863cb7180c8cedad",
+ "@csstools/css-tokenizer@^2.2.1": "https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-2.2.1.tgz#9dc431c9a5f61087af626e41ac2a79cce7bb253d",
+ "@csstools/media-query-list-parser@^2.1.5": "https://registry.yarnpkg.com/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.5.tgz#94bc8b3c3fd7112a40b7bf0b483e91eba0654a0f",
+ "@csstools/postcss-cascade-layers@^4.0.0": "https://registry.yarnpkg.com/@csstools/postcss-cascade-layers/-/postcss-cascade-layers-4.0.0.tgz#21f8556de640f9f9ccfb950c49a886280fe5497e",
+ "@csstools/postcss-color-function@^3.0.7": "https://registry.yarnpkg.com/@csstools/postcss-color-function/-/postcss-color-function-3.0.7.tgz#646b0c3e3805e4bb9c1e240bce807f1cc6ccdfea",
+ "@csstools/postcss-color-mix-function@^2.0.7": "https://registry.yarnpkg.com/@csstools/postcss-color-mix-function/-/postcss-color-mix-function-2.0.7.tgz#0fc9b638bd6b9578a52a50e3af66109ae52dc2b6",
+ "@csstools/postcss-exponential-functions@^1.0.1": "https://registry.yarnpkg.com/@csstools/postcss-exponential-functions/-/postcss-exponential-functions-1.0.1.tgz#0d938f58ba5ac5c362e09ad22b5768b04ee82650",
+ "@csstools/postcss-font-format-keywords@^3.0.0": "https://registry.yarnpkg.com/@csstools/postcss-font-format-keywords/-/postcss-font-format-keywords-3.0.0.tgz#9ca3a3ca67122862addf8a1c0c61a6db02dea1cc",
+ "@csstools/postcss-gamut-mapping@^1.0.0": "https://registry.yarnpkg.com/@csstools/postcss-gamut-mapping/-/postcss-gamut-mapping-1.0.0.tgz#a23d2c4bd2bd89b2ed3c5d2e062c069ad18745e0",
+ "@csstools/postcss-gradients-interpolation-method@^4.0.7": "https://registry.yarnpkg.com/@csstools/postcss-gradients-interpolation-method/-/postcss-gradients-interpolation-method-4.0.7.tgz#e5c2628157fb9dea9aa8cd9c84fdcc2a842af91b",
+ "@csstools/postcss-hwb-function@^3.0.6": "https://registry.yarnpkg.com/@csstools/postcss-hwb-function/-/postcss-hwb-function-3.0.6.tgz#7d56583c6c8607352718a802f87e51edf4f9365e",
+ "@csstools/postcss-ic-unit@^3.0.2": "https://registry.yarnpkg.com/@csstools/postcss-ic-unit/-/postcss-ic-unit-3.0.2.tgz#08b62de51a3636ba40ba8e77cef4619a6e636aac",
+ "@csstools/postcss-initial@^1.0.0": "https://registry.yarnpkg.com/@csstools/postcss-initial/-/postcss-initial-1.0.0.tgz#e35ec12143a654b384fb81623970deeacedb0769",
+ "@csstools/postcss-is-pseudo-class@^4.0.3": "https://registry.yarnpkg.com/@csstools/postcss-is-pseudo-class/-/postcss-is-pseudo-class-4.0.3.tgz#d8b04ff5eefb1a9bc8f1ab99b8f3b6b04b704480",
+ "@csstools/postcss-logical-float-and-clear@^2.0.0": "https://registry.yarnpkg.com/@csstools/postcss-logical-float-and-clear/-/postcss-logical-float-and-clear-2.0.0.tgz#15e1b5d16dce01ad1e676167d0909e3958234eb5",
+ "@csstools/postcss-logical-resize@^2.0.0": "https://registry.yarnpkg.com/@csstools/postcss-logical-resize/-/postcss-logical-resize-2.0.0.tgz#751bd5aab335c9973e346e3edacb2a0a16fa8296",
+ "@csstools/postcss-logical-viewport-units@^2.0.3": "https://registry.yarnpkg.com/@csstools/postcss-logical-viewport-units/-/postcss-logical-viewport-units-2.0.3.tgz#95e7195660bb8b05cd46f13d0495fe427e2db988",
+ "@csstools/postcss-media-minmax@^1.1.0": "https://registry.yarnpkg.com/@csstools/postcss-media-minmax/-/postcss-media-minmax-1.1.0.tgz#8d46317b6686cd49e05870ae3c8993e49a54149c",
+ "@csstools/postcss-media-queries-aspect-ratio-number-values@^2.0.3": "https://registry.yarnpkg.com/@csstools/postcss-media-queries-aspect-ratio-number-values/-/postcss-media-queries-aspect-ratio-number-values-2.0.3.tgz#a74355c828a13ede8e8390bcf2701a34a60696b3",
+ "@csstools/postcss-nested-calc@^3.0.0": "https://registry.yarnpkg.com/@csstools/postcss-nested-calc/-/postcss-nested-calc-3.0.0.tgz#b9069f5e1c2ea08de3840a5922e39af4e0ecf4b1",
+ "@csstools/postcss-normalize-display-values@^3.0.1": "https://registry.yarnpkg.com/@csstools/postcss-normalize-display-values/-/postcss-normalize-display-values-3.0.1.tgz#8bacd4fa20434de67a7b1f4f64f6e4476922a98d",
+ "@csstools/postcss-oklab-function@^3.0.7": "https://registry.yarnpkg.com/@csstools/postcss-oklab-function/-/postcss-oklab-function-3.0.7.tgz#4daff9e85b7f68ea744f2898f73e81d6fe47c0d7",
+ "@csstools/postcss-progressive-custom-properties@^3.0.2": "https://registry.yarnpkg.com/@csstools/postcss-progressive-custom-properties/-/postcss-progressive-custom-properties-3.0.2.tgz#0c18152160a425950cb69a12a9add55af4f688e7",
+ "@csstools/postcss-relative-color-syntax@^2.0.7": "https://registry.yarnpkg.com/@csstools/postcss-relative-color-syntax/-/postcss-relative-color-syntax-2.0.7.tgz#1d017aa25e3cda513cf00401a91899e9d3b83659",
+ "@csstools/postcss-scope-pseudo-class@^3.0.0": "https://registry.yarnpkg.com/@csstools/postcss-scope-pseudo-class/-/postcss-scope-pseudo-class-3.0.0.tgz#23f32181b7de9a33e7c7c71f7620b78284955b82",
+ "@csstools/postcss-stepped-value-functions@^3.0.2": "https://registry.yarnpkg.com/@csstools/postcss-stepped-value-functions/-/postcss-stepped-value-functions-3.0.2.tgz#a902395efbf9c5c30a6d902a7c65549fb3f49309",
+ "@csstools/postcss-text-decoration-shorthand@^3.0.3": "https://registry.yarnpkg.com/@csstools/postcss-text-decoration-shorthand/-/postcss-text-decoration-shorthand-3.0.3.tgz#e0708cf41f94013837edca1c6db23d5d6dd3c10e",
+ "@csstools/postcss-trigonometric-functions@^3.0.2": "https://registry.yarnpkg.com/@csstools/postcss-trigonometric-functions/-/postcss-trigonometric-functions-3.0.2.tgz#b03d045015fc6e16d81e36e5783c545b5590a2f2",
+ "@csstools/postcss-unset-value@^3.0.0": "https://registry.yarnpkg.com/@csstools/postcss-unset-value/-/postcss-unset-value-3.0.0.tgz#6d2f08140b41d3e70d805ccd2baaf64a6f59fdac",
+ "@csstools/selector-specificity@^3.0.0": "https://registry.yarnpkg.com/@csstools/selector-specificity/-/selector-specificity-3.0.0.tgz#798622546b63847e82389e473fd67f2707d82247",
+ "@jridgewell/gen-mapping@^0.3.0": "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098",
+ "@jridgewell/gen-mapping@^0.3.2": "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz#7e02e6eb5df901aaedb08514203b096614024098",
+ "@jridgewell/resolve-uri@^3.1.0": "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721",
+ "@jridgewell/set-array@^1.0.1": "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.1.2.tgz#7c6cf998d6d20b914c0a55a91ae928ff25965e72",
+ "@jridgewell/sourcemap-codec@^1.4.10": "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32",
+ "@jridgewell/sourcemap-codec@^1.4.14": "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32",
+ "@jridgewell/trace-mapping@^0.3.17": "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811",
+ "@jridgewell/trace-mapping@^0.3.9": "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz#f8a3249862f91be48d3127c3cfe992f79b4b8811",
+ "@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3": "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b",
+ "@nodelib/fs.scandir@2.1.5": "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5",
+ "@nodelib/fs.stat@2.0.5": "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b",
+ "@nodelib/fs.stat@^2.0.2": "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b",
+ "@nodelib/fs.walk@^1.2.3": "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a",
+ "@trysound/sax@0.2.0": "https://registry.yarnpkg.com/@trysound/sax/-/sax-0.2.0.tgz#cccaab758af56761eb7bf37af6f03f326dd798ad",
+ "@types/minimatch@^3.0.3": "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40",
+ "ansi-regex@^2.0.0": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df",
+ "ansi-regex@^5.0.1": "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304",
+ "ansi-styles@^2.2.1": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe",
+ "ansi-styles@^3.2.1": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d",
+ "ansi-styles@^4.0.0": "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937",
+ "anymatch@~3.1.2": "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e",
+ "array-differ@^3.0.0": "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b",
+ "array-union@^2.1.0": "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d",
+ "arrify@^2.0.1": "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa",
+ "autoprefixer@^10.4.16": "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-10.4.16.tgz#fad1411024d8670880bdece3970aa72e3572feb8",
+ "autoprefixer@^7.1.2": "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-7.2.6.tgz#256672f86f7c735da849c4f07d008abb056067dc",
+ "babel-plugin-polyfill-corejs2@^0.4.6": "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz#b2df0251d8e99f229a8e60fc4efa9a68b41c8313",
+ "babel-plugin-polyfill-corejs3@^0.8.5": "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.5.tgz#a75fa1b0c3fc5bd6837f9ec465c0f48031b8cab1",
+ "babel-plugin-polyfill-regenerator@^0.5.3": "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz#d4c49e4b44614607c13fb769bcd85c72bb26a4a5",
+ "balanced-match@^0.4.2": "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838",
+ "balanced-match@^1.0.0": "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee",
+ "binary-extensions@^2.0.0": "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d",
+ "boolbase@^1.0.0": "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e",
+ "brace-expansion@^1.1.7": "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd",
+ "braces@^3.0.2": "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107",
+ "braces@~3.0.2": "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107",
+ "browserslist@^1.0.0": "https://registry.yarnpkg.com/browserslist/-/browserslist-1.7.7.tgz#0bd76704258be829b2398bb50e4b62d1a166b0b9",
+ "browserslist@^2.0.0": "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2",
+ "browserslist@^2.11.3": "https://registry.yarnpkg.com/browserslist/-/browserslist-2.11.3.tgz#fe36167aed1bbcde4827ebfe71347a2cc70b99b2",
+ "browserslist@^4.0.0": "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619",
+ "browserslist@^4.21.10": "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619",
+ "browserslist@^4.21.4": "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619",
+ "browserslist@^4.21.5": "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619",
+ "browserslist@^4.21.9": "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619",
+ "browserslist@^4.22.1": "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619",
+ "browserslist@^4.3.6": "https://registry.yarnpkg.com/browserslist/-/browserslist-4.22.1.tgz#ba91958d1a59b87dab6fed8dfbcb3da5e2e9c619",
+ "caniuse-api@^3.0.0": "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0",
+ "caniuse-db@^1.0.30000639": "https://registry.yarnpkg.com/caniuse-db/-/caniuse-db-1.0.30001549.tgz#f352931842e3968d51946fce7b94c82dce1b1bd3",
+ "caniuse-lite@^1.0.0": "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001549.tgz#7d1a3dce7ea78c06ed72c32c2743ea364b3615aa",
+ "caniuse-lite@^1.0.30000792": "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001549.tgz#7d1a3dce7ea78c06ed72c32c2743ea364b3615aa",
+ "caniuse-lite@^1.0.30000805": "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001549.tgz#7d1a3dce7ea78c06ed72c32c2743ea364b3615aa",
+ "caniuse-lite@^1.0.30001487": "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001549.tgz#7d1a3dce7ea78c06ed72c32c2743ea364b3615aa",
+ "caniuse-lite@^1.0.30001538": "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001549.tgz#7d1a3dce7ea78c06ed72c32c2743ea364b3615aa",
+ "caniuse-lite@^1.0.30001541": "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001549.tgz#7d1a3dce7ea78c06ed72c32c2743ea364b3615aa",
+ "chalk@^1.1.3": "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98",
+ "chalk@^2.0.1": "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424",
+ "chalk@^2.4.1": "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424",
+ "chalk@^2.4.2": "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424",
+ "chokidar@^3.3.0": "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd",
+ "chokidar@^3.4.0": "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd",
+ "cliui@^8.0.1": "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa",
+ "color-convert@^1.9.0": "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8",
+ "color-convert@^2.0.1": "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3",
+ "color-name@1.1.3": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25",
+ "color-name@~1.1.4": "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2",
+ "colord@^2.9.1": "https://registry.yarnpkg.com/colord/-/colord-2.9.3.tgz#4f8ce919de456f1d5c1c368c307fe20f3e59fb43",
+ "commander@^4.0.1": "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068",
+ "commander@^7.2.0": "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7",
+ "concat-map@0.0.1": "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b",
+ "convert-source-map@^2.0.0": "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a",
+ "core-js-compat@^3.31.0": "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.0.tgz#24aa230b228406450b2277b7c8bfebae932df966",
+ "core-js-compat@^3.32.2": "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.33.0.tgz#24aa230b228406450b2277b7c8bfebae932df966",
+ "core-util-is@~1.0.0": "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85",
+ "css-blank-pseudo@^6.0.0": "https://registry.yarnpkg.com/css-blank-pseudo/-/css-blank-pseudo-6.0.0.tgz#2bc6f812a5f60296c04c55b1696bad4300dcdbcc",
+ "css-declaration-sorter@^6.3.1": "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.4.1.tgz#28beac7c20bad7f1775be3a7129d7eae409a3a71",
+ "css-has-pseudo@^6.0.0": "https://registry.yarnpkg.com/css-has-pseudo/-/css-has-pseudo-6.0.0.tgz#b8c8f39a19bc83c5be59fd251510a7e443c47968",
+ "css-prefers-color-scheme@^9.0.0": "https://registry.yarnpkg.com/css-prefers-color-scheme/-/css-prefers-color-scheme-9.0.0.tgz#7e9b74062655ea15490e359cb456a3b9f4c93327",
+ "css-select@^5.1.0": "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6",
+ "css-tokenize@^1.0.1": "https://registry.yarnpkg.com/css-tokenize/-/css-tokenize-1.0.1.tgz#4625cb1eda21c143858b7f81d6803c1d26fc14be",
+ "css-tree@^2.2.1": "https://registry.yarnpkg.com/css-tree/-/css-tree-2.3.1.tgz#10264ce1e5442e8572fc82fbe490644ff54b5c20",
+ "css-tree@~2.2.0": "https://registry.yarnpkg.com/css-tree/-/css-tree-2.2.1.tgz#36115d382d60afd271e377f9c5f67d02bd48c032",
+ "css-unit-converter@^1.1.1": "https://registry.yarnpkg.com/css-unit-converter/-/css-unit-converter-1.1.2.tgz#4c77f5a1954e6dbff60695ecb214e3270436ab21",
+ "css-what@^6.1.0": "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4",
+ "cssdb@^7.8.0": "https://registry.yarnpkg.com/cssdb/-/cssdb-7.8.0.tgz#ac41fa025371b74eb2ccfe3d41f5c4dbd444fbe3",
+ "cssesc@^3.0.0": "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee",
+ "cssnano-preset-default@^6.0.1": "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-6.0.1.tgz#2a93247140d214ddb9f46bc6a3562fa9177fe301",
+ "cssnano-utils@^4.0.0": "https://registry.yarnpkg.com/cssnano-utils/-/cssnano-utils-4.0.0.tgz#d1da885ec04003ab19505ff0e62e029708d36b08",
+ "cssnano@^6.0.1": "https://registry.yarnpkg.com/cssnano/-/cssnano-6.0.1.tgz#87c38c4cd47049c735ab756d7e77ac3ca855c008",
+ "csso@^5.0.5": "https://registry.yarnpkg.com/csso/-/csso-5.0.5.tgz#f9b7fe6cc6ac0b7d90781bb16d5e9874303e2ca6",
+ "debug@^4.1.0": "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865",
+ "debug@^4.1.1": "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865",
+ "dependency-graph@^0.11.0": "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.11.0.tgz#ac0ce7ed68a54da22165a85e97a01d53f5eb2e27",
+ "dir-glob@^3.0.1": "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f",
+ "doiuse@^6.0.2": "https://registry.yarnpkg.com/doiuse/-/doiuse-6.0.2.tgz#0161e68a0bbc9525d3cebdfcbe5adb90023793e2",
+ "dom-serializer@^2.0.0": "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53",
+ "domelementtype@^2.3.0": "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d",
+ "domhandler@^5.0.2": "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31",
+ "domhandler@^5.0.3": "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31",
+ "domutils@^3.0.1": "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e",
+ "duplexify@^4.1.2": "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.2.tgz#18b4f8d28289132fa0b9573c898d9f903f81c7b0",
+ "electron-to-chromium@^1.2.7": "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.554.tgz#04e09c2ee31dc0f1546174033809b54cc372740b",
+ "electron-to-chromium@^1.3.30": "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.554.tgz#04e09c2ee31dc0f1546174033809b54cc372740b",
+ "electron-to-chromium@^1.4.535": "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.554.tgz#04e09c2ee31dc0f1546174033809b54cc372740b",
+ "emoji-regex@^8.0.0": "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37",
+ "end-of-stream@^1.4.1": "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0",
+ "entities@^4.2.0": "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48",
+ "escalade@^3.1.1": "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40",
+ "escape-string-regexp@^1.0.2": "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4",
+ "escape-string-regexp@^1.0.5": "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4",
+ "esutils@^2.0.2": "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64",
+ "fast-glob@^3.3.0": "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4",
+ "fastq@^1.6.0": "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a",
+ "fill-range@^7.0.1": "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40",
+ "flatten@^1.0.2": "https://registry.yarnpkg.com/flatten/-/flatten-1.0.3.tgz#c1283ac9f27b368abc1e36d1ff7b04501a30356b",
+ "fraction.js@^4.3.6": "https://registry.yarnpkg.com/fraction.js/-/fraction.js-4.3.7.tgz#06ca0085157e42fda7f9e726e79fefc4068840f7",
+ "fs-extra@^11.0.0": "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d",
+ "fs-readdir-recursive@^1.1.0": "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27",
+ "fs.realpath@^1.0.0": "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f",
+ "fsevents@~2.3.2": "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6",
+ "g@^2.0.1": "https://registry.yarnpkg.com/g/-/g-2.0.1.tgz#0b5963ebd0ca70e3bc8c6766934a021821c8b857",
+ "gather-stream@^1.0.0": "https://registry.yarnpkg.com/gather-stream/-/gather-stream-1.0.0.tgz#b33994af457a8115700d410f317733cbe7a0904b",
+ "gensync@^1.0.0-beta.2": "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0",
+ "get-caller-file@^2.0.5": "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e",
+ "get-stdin@^9.0.0": "https://registry.yarnpkg.com/get-stdin/-/get-stdin-9.0.0.tgz#3983ff82e03d56f1b2ea0d3e60325f39d703a575",
+ "glob-parent@^5.1.2": "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4",
+ "glob-parent@~5.1.2": "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4",
+ "glob@^7.2.0": "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b",
+ "globals@^11.1.0": "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e",
+ "globby@^13.0.0": "https://registry.yarnpkg.com/globby/-/globby-13.2.2.tgz#63b90b1bf68619c2135475cbd4e71e66aa090592",
+ "graceful-fs@^4.1.6": "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3",
+ "graceful-fs@^4.2.0": "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3",
+ "has-ansi@^2.0.0": "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91",
+ "has-flag@^1.0.0": "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa",
+ "has-flag@^3.0.0": "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd",
+ "has@^1.0.3": "https://registry.yarnpkg.com/has/-/has-1.0.4.tgz#2eb2860e000011dae4f1406a86fe80e530fb2ec6",
+ "ignore@^5.2.4": "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324",
+ "indexes-of@^1.0.1": "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607",
+ "inflight@^1.0.4": "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9",
+ "inherits@2": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c",
+ "inherits@^2.0.1": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c",
+ "inherits@^2.0.3": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c",
+ "inherits@~2.0.1": "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c",
+ "is-binary-path@~2.1.0": "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09",
+ "is-core-module@^2.13.0": "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db",
+ "is-extglob@^2.1.1": "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2",
+ "is-fullwidth-code-point@^3.0.0": "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d",
+ "is-glob@^4.0.1": "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084",
+ "is-glob@~4.0.1": "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084",
+ "is-number@^7.0.0": "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b",
+ "isarray@0.0.1": "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf",
+ "js-base64@^2.1.9": "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4",
+ "js-tokens@^4.0.0": "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499",
+ "jsesc@^2.5.1": "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4",
+ "jsesc@~0.5.0": "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d",
+ "json5@^2.2.3": "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283",
+ "jsonfile@^6.0.1": "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae",
+ "laggard@^2.0.0": "https://registry.yarnpkg.com/laggard/-/laggard-2.0.1.tgz#b34e87a5687788b9537e34c1b0560fed8f8c0cd9",
+ "ldjson-stream@^1.2.1": "https://registry.yarnpkg.com/ldjson-stream/-/ldjson-stream-1.2.1.tgz#91beceda5ac4ed2b17e649fb777e7abfa0189c2b",
+ "lilconfig@^2.0.5": "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52",
+ "lilconfig@^2.1.0": "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.1.0.tgz#78e23ac89ebb7e1bfbf25b18043de756548e7f52",
+ "lodash.debounce@^4.0.8": "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af",
+ "lodash.memoize@^4.1.2": "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe",
+ "lodash.uniq@^4.5.0": "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773",
+ "lodash@^4.17.21": "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c",
+ "lodash@^4.17.4": "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c",
+ "log-symbols@^2.0.0": "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a",
+ "lru-cache@^5.1.1": "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920",
+ "make-dir@^2.1.0": "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5",
+ "math-expression-evaluator@^1.2.14": "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.4.0.tgz#3d66031117fbb7b9715ea6c9c68c2cd2eebd37e2",
+ "mdn-data@2.0.28": "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.28.tgz#5ec48e7bef120654539069e1ae4ddc81ca490eba",
+ "mdn-data@2.0.30": "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.30.tgz#ce4df6f80af6cfbe218ecd5c552ba13c4dfa08cc",
+ "merge2@^1.3.0": "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae",
+ "merge2@^1.4.1": "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae",
+ "micromatch@^4.0.4": "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6",
+ "minimatch@^3.0.4": "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b",
+ "minimatch@^3.1.1": "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b",
+ "minimist@^1.1.2": "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c",
+ "minimist@^1.2.0": "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c",
+ "ms@2.1.2": "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009",
+ "multimatch@^5.0.0": "https://registry.yarnpkg.com/multimatch/-/multimatch-5.0.0.tgz#932b800963cea7a31a033328fa1e0c3a1874dbe6",
+ "nanoid@^3.3.6": "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.6.tgz#443380c856d6e9f9824267d960b4236ad583ea4c",
+ "node-releases@^2.0.13": "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.13.tgz#d5ed1627c23e3461e819b02e57b75e4899b1c81d",
+ "normalize-path@^3.0.0": "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65",
+ "normalize-path@~3.0.0": "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65",
+ "normalize-range@^0.1.2": "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942",
+ "nth-check@^2.0.1": "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d",
+ "num2fraction@^1.2.2": "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede",
+ "once@^1.3.0": "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1",
+ "once@^1.4.0": "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1",
+ "path-is-absolute@^1.0.0": "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f",
+ "path-parse@^1.0.7": "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735",
+ "path-type@^4.0.0": "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b",
+ "picocolors@^0.2.1": "https://registry.yarnpkg.com/picocolors/-/picocolors-0.2.1.tgz#570670f793646851d1ba135996962abad587859f",
+ "picocolors@^1.0.0": "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c",
+ "picomatch@^2.0.4": "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42",
+ "picomatch@^2.2.1": "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42",
+ "picomatch@^2.3.1": "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42",
+ "pify@^2.3.0": "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c",
+ "pify@^4.0.1": "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231",
+ "pixrem@^3.0.2": "https://registry.yarnpkg.com/pixrem/-/pixrem-3.0.2.tgz#30d1bafb4c3bdce8e9bb4bd56a13985619320c34",
+ "pixrem@^4.0.1": "https://registry.yarnpkg.com/pixrem/-/pixrem-4.0.1.tgz#2da4a1de6ec4423c5fc3794e930b81d4490ec686",
+ "pixrem@^5.0.0": "https://registry.yarnpkg.com/pixrem/-/pixrem-5.0.0.tgz#460c534fbc19e4e9fbf39012ae26c7107cd40bca",
+ "postcss-alias@^2.0.0": "https://registry.yarnpkg.com/postcss-alias/-/postcss-alias-2.0.0.tgz#018f46c2fbff818e29fa6af67afa4be2becd376d",
+ "postcss-attribute-case-insensitive@^6.0.2": "https://registry.yarnpkg.com/postcss-attribute-case-insensitive/-/postcss-attribute-case-insensitive-6.0.2.tgz#e843091859323342e461878d201ee70278809e01",
+ "postcss-calc@^6.0.2": "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-6.0.2.tgz#4d9a43e27dbbf27d095fecb021ac6896e2318337",
+ "postcss-calc@^9.0.0": "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-9.0.1.tgz#a744fd592438a93d6de0f1434c572670361eb6c6",
+ "postcss-clamp@^4.1.0": "https://registry.yarnpkg.com/postcss-clamp/-/postcss-clamp-4.1.0.tgz#7263e95abadd8c2ba1bd911b0b5a5c9c93e02363",
+ "postcss-clearfix@^2.0.1": "https://registry.yarnpkg.com/postcss-clearfix/-/postcss-clearfix-2.0.1.tgz#5170a1998f167d3190a0173445b6380c8c5c07f2",
+ "postcss-cli@^10.1.0": "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-10.1.0.tgz#f6658c4998a1c35bd66cd71009132b2d12e04f80",
+ "postcss-color-functional-notation@^6.0.2": "https://registry.yarnpkg.com/postcss-color-functional-notation/-/postcss-color-functional-notation-6.0.2.tgz#5fa38d36cd0e2ea9db7fd6f2f2a1ffb2c0796a8d",
+ "postcss-color-hex-alpha@^9.0.2": "https://registry.yarnpkg.com/postcss-color-hex-alpha/-/postcss-color-hex-alpha-9.0.2.tgz#6d3ed50342802469880981a1999515d003ff7d79",
+ "postcss-color-rebeccapurple@^9.0.1": "https://registry.yarnpkg.com/postcss-color-rebeccapurple/-/postcss-color-rebeccapurple-9.0.1.tgz#d1266b9a9571ca478c8ce7ad97a15727eac3c6b2",
+ "postcss-color-rgba-fallback@^3.0.0": "https://registry.yarnpkg.com/postcss-color-rgba-fallback/-/postcss-color-rgba-fallback-3.0.0.tgz#37d5c9353a07a09270912a82606bb42a0d702c04",
+ "postcss-color-rgba-fallback@^4.0.0": "https://registry.yarnpkg.com/postcss-color-rgba-fallback/-/postcss-color-rgba-fallback-4.0.0.tgz#b836c4a34c747cf9b16f1ebcd7d6016c299e0cf2",
+ "postcss-colormin@^6.0.0": "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-6.0.0.tgz#d4250652e952e1c0aca70c66942da93d3cdeaafe",
+ "postcss-convert-values@^6.0.0": "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-6.0.0.tgz#ec94a954957e5c3f78f0e8f65dfcda95280b8996",
+ "postcss-custom-media@^10.0.2": "https://registry.yarnpkg.com/postcss-custom-media/-/postcss-custom-media-10.0.2.tgz#70a244bbc59fc953ab6573e4e2c9624639aef08a",
+ "postcss-custom-properties@^13.3.2": "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-13.3.2.tgz#88952f883003d897ade5c836e1e005b09a12f02b",
+ "postcss-custom-selectors@^7.1.6": "https://registry.yarnpkg.com/postcss-custom-selectors/-/postcss-custom-selectors-7.1.6.tgz#6d28812998dcd48f61a6a538141fc16cf2c42123",
+ "postcss-dir-pseudo-class@^8.0.0": "https://registry.yarnpkg.com/postcss-dir-pseudo-class/-/postcss-dir-pseudo-class-8.0.0.tgz#9e4e37d170f672520d3f38fd8376db0ca04d4e9c",
+ "postcss-discard-comments@^6.0.0": "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-6.0.0.tgz#9ca335e8b68919f301b24ba47dde226a42e535fe",
+ "postcss-discard-duplicates@^6.0.0": "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.0.tgz#c26177a6c33070922e67e9a92c0fd23d443d1355",
+ "postcss-discard-empty@^6.0.0": "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-6.0.0.tgz#06c1c4fce09e22d2a99e667c8550eb8a3a1b9aee",
+ "postcss-discard-overridden@^6.0.0": "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-6.0.0.tgz#49c5262db14e975e349692d9024442de7cd8e234",
+ "postcss-double-position-gradients@^5.0.2": "https://registry.yarnpkg.com/postcss-double-position-gradients/-/postcss-double-position-gradients-5.0.2.tgz#a55ed4d6a395f324aa5535ea8c42c74e8ace2651",
+ "postcss-easings@^1.0.0": "https://registry.yarnpkg.com/postcss-easings/-/postcss-easings-1.0.1.tgz#a7b9ebddabe5f8589e245256bd565408ea3366c3",
+ "postcss-fixes@^3.0.0": "https://registry.yarnpkg.com/postcss-fixes/-/postcss-fixes-3.0.0.tgz#238db718328faab12deacf0a98348f84ed5b6f3b",
+ "postcss-flexbugs-fixes@^3.3.1": "https://registry.yarnpkg.com/postcss-flexbugs-fixes/-/postcss-flexbugs-fixes-3.3.1.tgz#0783cc7212850ef707f97f8bc8b6fb624e00c75d",
+ "postcss-focus-visible@^9.0.0": "https://registry.yarnpkg.com/postcss-focus-visible/-/postcss-focus-visible-9.0.0.tgz#a81227428d6f1e524099c6581f7c7132f987e382",
+ "postcss-focus-within@^8.0.0": "https://registry.yarnpkg.com/postcss-focus-within/-/postcss-focus-within-8.0.0.tgz#8304380dd2dadc1c2dcfa52816ff86be7736fc16",
+ "postcss-font-variant@^5.0.0": "https://registry.yarnpkg.com/postcss-font-variant/-/postcss-font-variant-5.0.0.tgz#efd59b4b7ea8bb06127f2d031bfbb7f24d32fa66",
+ "postcss-fontpath@^1.0.0": "https://registry.yarnpkg.com/postcss-fontpath/-/postcss-fontpath-1.0.0.tgz#ad0eefc2193e29cf7a34b8c751ff7fe8e74699e5",
+ "postcss-gap-properties@^5.0.0": "https://registry.yarnpkg.com/postcss-gap-properties/-/postcss-gap-properties-5.0.0.tgz#3bd77f3d51facb1da404b4edd72b8203929385a5",
+ "postcss-hexrgba@^1.0.0": "https://registry.yarnpkg.com/postcss-hexrgba/-/postcss-hexrgba-1.0.2.tgz#04a3206617f2c00d53b754dbba5406d32772db00",
+ "postcss-image-set-function@^6.0.1": "https://registry.yarnpkg.com/postcss-image-set-function/-/postcss-image-set-function-6.0.1.tgz#e2bba0a0536a0c70f63933f7c5df68742e9615ca",
+ "postcss-input-style@^1.0.0": "https://registry.yarnpkg.com/postcss-input-style/-/postcss-input-style-1.0.0.tgz#bbfdc82b9f799b3e78c863a02476757e26fbdc61",
+ "postcss-lab-function@^6.0.7": "https://registry.yarnpkg.com/postcss-lab-function/-/postcss-lab-function-6.0.7.tgz#b1dd0ad5a4c993b7695614239754b9be48f3b24b",
+ "postcss-load-config@^4.0.0": "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-4.0.1.tgz#152383f481c2758274404e4962743191d73875bd",
+ "postcss-logical@^7.0.0": "https://registry.yarnpkg.com/postcss-logical/-/postcss-logical-7.0.0.tgz#9a83426e716e3c8f957dda3fd874edbcf22c754e",
+ "postcss-merge-longhand@^6.0.0": "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-6.0.0.tgz#6f627b27db939bce316eaa97e22400267e798d69",
+ "postcss-merge-rules@^6.0.1": "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-6.0.1.tgz#39f165746404e646c0f5c510222ccde4824a86aa",
+ "postcss-minify-font-values@^6.0.0": "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-6.0.0.tgz#68d4a028f9fa5f61701974724b2cc9445d8e6070",
+ "postcss-minify-gradients@^6.0.0": "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-6.0.0.tgz#22b5c88cc63091dadbad34e31ff958404d51d679",
+ "postcss-minify-params@^6.0.0": "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-6.0.0.tgz#2b3a85a9e3b990d7a16866f430f5fd1d5961b539",
+ "postcss-minify-selectors@^6.0.0": "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-6.0.0.tgz#5046c5e8680a586e5a0cad52cc9aa36d6be5bda2",
+ "postcss-nesting@^12.0.1": "https://registry.yarnpkg.com/postcss-nesting/-/postcss-nesting-12.0.1.tgz#abb76d15dfd59a9f7d03b4464f53b60a4d3795c4",
+ "postcss-normalize-charset@^6.0.0": "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-6.0.0.tgz#36cc12457259064969fb96f84df491652a4b0975",
+ "postcss-normalize-display-values@^6.0.0": "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-6.0.0.tgz#8d2961415078644d8c6bbbdaf9a2fdd60f546cd4",
+ "postcss-normalize-positions@^6.0.0": "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-6.0.0.tgz#25b96df99a69f8925f730eaee0be74416865e301",
+ "postcss-normalize-repeat-style@^6.0.0": "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-6.0.0.tgz#ddf30ad8762feb5b1eb97f39f251acd7b8353299",
+ "postcss-normalize-string@^6.0.0": "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-6.0.0.tgz#948282647a51e409d69dde7910f0ac2ff97cb5d8",
+ "postcss-normalize-timing-functions@^6.0.0": "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-6.0.0.tgz#5f13e650b8c43351989fc5de694525cc2539841c",
+ "postcss-normalize-unicode@^6.0.0": "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.0.tgz#741b3310f874616bdcf07764f5503695d3604730",
+ "postcss-normalize-url@^6.0.0": "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-6.0.0.tgz#d0a31e962a16401fb7deb7754b397a323fb650b4",
+ "postcss-normalize-whitespace@^6.0.0": "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-6.0.0.tgz#accb961caa42e25ca4179b60855b79b1f7129d4d",
+ "postcss-nth-child-fix@^2.0.0": "https://registry.yarnpkg.com/postcss-nth-child-fix/-/postcss-nth-child-fix-2.0.0.tgz#d38df7693a373779925f43ee1176e7259c5d9c74",
+ "postcss-opacity-percentage@^2.0.0": "https://registry.yarnpkg.com/postcss-opacity-percentage/-/postcss-opacity-percentage-2.0.0.tgz#c0a56060cd4586e3f954dbde1efffc2deed53002",
+ "postcss-opacity@^5.0.0": "https://registry.yarnpkg.com/postcss-opacity/-/postcss-opacity-5.0.0.tgz#6ea6deef4d5fc28dd4cf7af97dba2807b3e07c4c",
+ "postcss-ordered-values@^6.0.0": "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-6.0.0.tgz#374704cdff25560d44061d17ba3c6308837a3218",
+ "postcss-overflow-shorthand@^5.0.0": "https://registry.yarnpkg.com/postcss-overflow-shorthand/-/postcss-overflow-shorthand-5.0.0.tgz#1ed6d6c532cdf52b5dabec06662dc63f9207855c",
+ "postcss-page-break@^3.0.4": "https://registry.yarnpkg.com/postcss-page-break/-/postcss-page-break-3.0.4.tgz#7fbf741c233621622b68d435babfb70dd8c1ee5f",
+ "postcss-place@^9.0.0": "https://registry.yarnpkg.com/postcss-place/-/postcss-place-9.0.0.tgz#7e47851bf40d16ce06f6013453b706100ca6c102",
+ "postcss-position@^1.0.0": "https://registry.yarnpkg.com/postcss-position/-/postcss-position-1.1.0.tgz#133fc2cafe05d22aa40ca701e6d3d276927cccac",
+ "postcss-preset-env@^9.2.0": "https://registry.yarnpkg.com/postcss-preset-env/-/postcss-preset-env-9.2.0.tgz#9106ed870811a6da44a5607860f8a2afffccec30",
+ "postcss-pseudo-class-any-link@^9.0.0": "https://registry.yarnpkg.com/postcss-pseudo-class-any-link/-/postcss-pseudo-class-any-link-9.0.0.tgz#5fb5b700e0ecdc845a94eb433b8ccff756cbf660",
+ "postcss-pseudoelements@^3.0.0": "https://registry.yarnpkg.com/postcss-pseudoelements/-/postcss-pseudoelements-3.0.0.tgz#6c682177c7900ba053b6df17f8c590284c7b8bbc",
+ "postcss-pseudoelements@^5.0.0": "https://registry.yarnpkg.com/postcss-pseudoelements/-/postcss-pseudoelements-5.0.0.tgz#eef194e8d524645ca520a949e95e518e812402cb",
+ "postcss-quantity-queries@^0.5.0": "https://registry.yarnpkg.com/postcss-quantity-queries/-/postcss-quantity-queries-0.5.0.tgz#52b6717fcc8d9925ae64cff43340870fe15516ab",
+ "postcss-reduce-initial@^6.0.0": "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-6.0.0.tgz#7d16e83e60e27e2fa42f56ec0b426f1da332eca7",
+ "postcss-reduce-transforms@^6.0.0": "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-6.0.0.tgz#28ff2601a6d9b96a2f039b3501526e1f4d584a46",
+ "postcss-replace-overflow-wrap@^4.0.0": "https://registry.yarnpkg.com/postcss-replace-overflow-wrap/-/postcss-replace-overflow-wrap-4.0.0.tgz#d2df6bed10b477bf9c52fab28c568b4b29ca4319",
+ "postcss-reporter@^5.0.0": "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-5.0.0.tgz#a14177fd1342829d291653f2786efd67110332c3",
+ "postcss-reporter@^7.0.0": "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-7.0.5.tgz#e55bd0fdf8d17e4f25fb55e9143fcd79349a2ceb",
+ "postcss-responsive-type@^1.0.0": "https://registry.yarnpkg.com/postcss-responsive-type/-/postcss-responsive-type-1.0.0.tgz#bb2d57d830beb9586ec4fda7994f07e37953aad8",
+ "postcss-selector-not@^7.0.1": "https://registry.yarnpkg.com/postcss-selector-not/-/postcss-selector-not-7.0.1.tgz#8142e90c8eb6c8c5faecb3e9d96d4353d02e94fb",
+ "postcss-selector-parser@^1.3.0": "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-1.3.3.tgz#d2ee19df7a64f8ef21c1a71c86f7d4835c88c281",
+ "postcss-selector-parser@^2.2.2": "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-2.2.3.tgz#f9437788606c3c9acee16ffe8d8b16297f27bb90",
+ "postcss-selector-parser@^6.0.10": "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b",
+ "postcss-selector-parser@^6.0.11": "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b",
+ "postcss-selector-parser@^6.0.13": "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b",
+ "postcss-selector-parser@^6.0.4": "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b",
+ "postcss-selector-parser@^6.0.5": "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz#d05d8d76b1e8e173257ef9d60b706a8e5e99bf1b",
+ "postcss-svgo@^6.0.0": "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-6.0.0.tgz#7b18742d38d4505a0455bbe70d52b49f00eaf69d",
+ "postcss-unique-selectors@^6.0.0": "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-6.0.0.tgz#c94e9b0f7bffb1203894e42294b5a1b3fb34fbe1",
+ "postcss-unopacity@^1.0.1": "https://registry.yarnpkg.com/postcss-unopacity/-/postcss-unopacity-1.0.1.tgz#3c4b199b98bda274bd308830d4c0f2b1058b00f7",
+ "postcss-unroot@^1.0.2": "https://registry.yarnpkg.com/postcss-unroot/-/postcss-unroot-1.0.2.tgz#4441bc206c99c4818bcbd014f49dba1cb9e9b47f",
+ "postcss-value-parser@^3.2.3": "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281",
+ "postcss-value-parser@^3.3.0": "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281",
+ "postcss-value-parser@^4.0.2": "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514",
+ "postcss-value-parser@^4.2.0": "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#723c09920836ba6d3e5af019f92bc0971c02e514",
+ "postcss-vmin@^3.0.0": "https://registry.yarnpkg.com/postcss-vmin/-/postcss-vmin-3.0.0.tgz#6d6ae6b3e84fe3ff7a4df1eb86f3a69a07e8a144",
+ "postcss-will-change@^2.0.0": "https://registry.yarnpkg.com/postcss-will-change/-/postcss-will-change-2.0.0.tgz#cff091a87a0386bab1f32a7cfa7f79d6b773e100",
+ "postcss-will-change@^4.0.1": "https://registry.yarnpkg.com/postcss-will-change/-/postcss-will-change-4.0.1.tgz#7604320aa8ba147e4d00732a37d32658aeb436d4",
+ "postcss@^5.0.0": "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5",
+ "postcss@^5.0.10": "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5",
+ "postcss@^5.0.4": "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5",
+ "postcss@^6.0.0": "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324",
+ "postcss@^6.0.1": "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324",
+ "postcss@^6.0.14": "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324",
+ "postcss@^6.0.17": "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324",
+ "postcss@^6.0.23": "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324",
+ "postcss@^6.0.6": "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324",
+ "postcss@^6.0.7": "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324",
+ "postcss@^6.0.8": "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324",
+ "postcss@^7.0.17": "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309",
+ "postcss@^7.0.2": "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309",
+ "postcss@^7.0.7": "https://registry.yarnpkg.com/postcss/-/postcss-7.0.39.tgz#9624375d965630e2e1f2c02a935c82a59cb48309",
+ "postcss@^8.4.21": "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d",
+ "postcss@^8.4.31": "https://registry.yarnpkg.com/postcss/-/postcss-8.4.31.tgz#92b451050a9f914da6755af352bdc0192508656d",
+ "pretty-hrtime@^1.0.3": "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1",
+ "queue-microtask@^1.2.2": "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243",
+ "read-cache@^1.0.0": "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774",
+ "read-file-stdin@^0.2.0": "https://registry.yarnpkg.com/read-file-stdin/-/read-file-stdin-0.2.1.tgz#25eccff3a153b6809afacb23ee15387db9e0ee61",
+ "readable-stream@>=1.0.33-1 <1.1.0-0": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c",
+ "readable-stream@^1.0.33": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9",
+ "readable-stream@^3.1.1": "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967",
+ "readdirp@~3.6.0": "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7",
+ "reduce-css-calc@^1.2.7": "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716",
+ "reduce-css-calc@^2.0.0": "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz#7ef8761a28d614980dc0c982f772c93f7a99de03",
+ "reduce-css-calc@^2.1.5": "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-2.1.8.tgz#7ef8761a28d614980dc0c982f772c93f7a99de03",
+ "reduce-function-call@^1.0.1": "https://registry.yarnpkg.com/reduce-function-call/-/reduce-function-call-1.0.3.tgz#60350f7fb252c0a67eb10fd4694d16909971300f",
+ "regenerate-unicode-properties@^10.1.0": "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480",
+ "regenerate@^1.4.2": "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a",
+ "regenerator-runtime@^0.14.0": "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45",
+ "regenerator-transform@^0.15.2": "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.2.tgz#5bbae58b522098ebdf09bca2f83838929001c7a4",
+ "regexpu-core@^5.3.1": "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b",
+ "regjsparser@^0.9.1": "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709",
+ "require-directory@^2.1.1": "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42",
+ "resolve@^1.14.2": "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d",
+ "reusify@^1.0.4": "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76",
+ "rgb-hex@^2.1.0": "https://registry.yarnpkg.com/rgb-hex/-/rgb-hex-2.1.0.tgz#c773c5fe2268a25578d92539a82a7a5ce53beda6",
+ "rgb-hex@^3.0.0": "https://registry.yarnpkg.com/rgb-hex/-/rgb-hex-3.0.0.tgz#eab0168cc1279563b18a14605315389142e2e487",
+ "rucksack-css@^1.0.2": "https://registry.yarnpkg.com/rucksack-css/-/rucksack-css-1.0.2.tgz#77808b4097b35acfb92e70dc89b65aa232f5169f",
+ "run-parallel@^1.1.9": "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee",
+ "safe-buffer@~5.2.0": "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6",
+ "semver@^5.6.0": "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8",
+ "semver@^6.3.1": "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4",
+ "slash@^2.0.0": "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44",
+ "slash@^4.0.0": "https://registry.yarnpkg.com/slash/-/slash-4.0.0.tgz#2422372176c4c6c5addb5e2ada885af984b396a7",
+ "slash@^5.0.0": "https://registry.yarnpkg.com/slash/-/slash-5.1.0.tgz#be3adddcdf09ac38eebe8dcdc7b1a57a75b095ce",
+ "source-map-js@^1.0.1": "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c",
+ "source-map-js@^1.0.2": "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c",
+ "source-map@^0.5.6": "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc",
+ "source-map@^0.6.1": "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263",
+ "source-map@^0.7.4": "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656",
+ "split2@^0.2.1": "https://registry.yarnpkg.com/split2/-/split2-0.2.1.tgz#02ddac9adc03ec0bb78c1282ec079ca6e85ae900",
+ "stream-shift@^1.0.0": "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d",
+ "string-width@^4.1.0": "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010",
+ "string-width@^4.2.0": "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010",
+ "string-width@^4.2.3": "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010",
+ "string_decoder@^1.1.1": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e",
+ "string_decoder@~0.10.x": "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94",
+ "strip-ansi@^3.0.0": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf",
+ "strip-ansi@^6.0.0": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9",
+ "strip-ansi@^6.0.1": "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9",
+ "stylehacks@^6.0.0": "https://registry.yarnpkg.com/stylehacks/-/stylehacks-6.0.0.tgz#9fdd7c217660dae0f62e14d51c89f6c01b3cb738",
+ "supports-color@^2.0.0": "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7",
+ "supports-color@^3.2.3": "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6",
+ "supports-color@^5.3.0": "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f",
+ "supports-color@^5.4.0": "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f",
+ "supports-preserve-symlinks-flag@^1.0.0": "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09",
+ "svgo@^3.0.2": "https://registry.yarnpkg.com/svgo/-/svgo-3.0.2.tgz#5e99eeea42c68ee0dc46aa16da093838c262fe0a",
+ "thenby@^1.3.4": "https://registry.yarnpkg.com/thenby/-/thenby-1.3.4.tgz#81581f6e1bb324c6dedeae9bfc28e59b1a2201cc",
+ "through2@^0.6.1": "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48",
+ "through2@~0.6.1": "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48",
+ "to-fast-properties@^2.0.0": "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e",
+ "to-regex-range@^5.0.1": "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4",
+ "unicode-canonical-property-names-ecmascript@^2.0.0": "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc",
+ "unicode-match-property-ecmascript@^2.0.0": "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3",
+ "unicode-match-property-value-ecmascript@^2.1.0": "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0",
+ "unicode-property-aliases-ecmascript@^2.0.0": "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd",
+ "uniq@^1.0.1": "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff",
+ "universalify@^2.0.0": "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717",
+ "update-browserslist-db@^1.0.13": "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4",
+ "util-deprecate@^1.0.1": "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf",
+ "util-deprecate@^1.0.2": "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf",
+ "wrap-ansi@^7.0.0": "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43",
+ "wrappy@1": "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f",
+ "write-file-stdout@0.0.2": "https://registry.yarnpkg.com/write-file-stdout/-/write-file-stdout-0.0.2.tgz#c252d7c7c5b1b402897630e3453c7bfe690d9ca1",
+ "write-file-stdout@^0.0.2": "https://registry.yarnpkg.com/write-file-stdout/-/write-file-stdout-0.0.2.tgz#c252d7c7c5b1b402897630e3453c7bfe690d9ca1",
+ "xtend@>=4.0.0 <4.1.0-0": "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54",
+ "y18n@^5.0.5": "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55",
+ "yallist@^3.0.2": "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd",
+ "yaml@^2.1.1": "https://registry.yarnpkg.com/yaml/-/yaml-2.3.2.tgz#f522db4313c671a0ca963a75670f1c12ea909144",
+ "yargs-parser@^21.1.1": "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35",
+ "yargs@^17.0.0": "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269",
+ "yargs@^17.7.1": "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
+ },
+ "files": [],
+ "artifacts": {}
+} \ No newline at end of file
diff --git a/node_modules/@babel/cli/node_modules/commander/CHANGELOG.md b/node_modules/@babel/cli/node_modules/commander/CHANGELOG.md
deleted file mode 100644
index f00cb2b5..00000000
--- a/node_modules/@babel/cli/node_modules/commander/CHANGELOG.md
+++ /dev/null
@@ -1,436 +0,0 @@
-# Changelog
-
-All notable changes to this project will be documented in this file.
-
-The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
-and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). (Format adopted after v3.0.0.)
-
-<!-- markdownlint-disable MD024 -->
-
-## [4.1.1] (2020-02-02)
-
-### Fixed
-
-* TypeScript definition for `.action()` should include Promise for async ([#1157])
-
-## [4.1.0] (2020-01-06)
-
-### Added
-
-* two routines to change how option values are handled, and eliminate name clashes with command properties ([#933] [#1102])
- * see storeOptionsAsProperties and passCommandToAction in README
-* `.parseAsync` to use instead of `.parse` if supply async action handlers ([#806] [#1118])
-
-### Fixed
-
-* Remove trailing blanks from wrapped help text ([#1096])
-
-### Changed
-
-* update dependencies
-* extend security coverage for Commander 2.x to 2020-02-03
-* improvements to README
-* improvements to TypeScript definition documentation
-* move old versions out of main CHANGELOG
-* removed explicit use of `ts-node` in tests
-
-## [4.0.1] (2019-11-12)
-
-### Fixed
-
-* display help when requested, even if there are missing required options ([#1091])
-
-## [4.0.0] (2019-11-02)
-
-### Added
-
-* automatically wrap and indent help descriptions for options and commands ([#1051])
-* `.exitOverride()` allows override of calls to `process.exit` for additional error handling and to keep program running ([#1040])
-* support for declaring required options with `.requiredOptions()` ([#1071])
-* GitHub Actions support ([#1027])
-* translation links in README
-
-### Changed
-
-* dev: switch tests from Sinon+Should to Jest with major rewrite of tests ([#1035])
-* call default subcommand even when there are unknown options ([#1047])
-* *Breaking* Commander is only officially supported on Node 8 and above, and requires Node 6 ([#1053])
-
-### Fixed
-
-* *Breaking* keep command object out of program.args when action handler called ([#1048])
- * also, action handler now passed array of unknown arguments
-* complain about unknown options when program argument supplied and action handler ([#1049])
- * this changes parameters to `command:*` event to include unknown arguments
-* removed deprecated `customFds` option from call to `child_process.spawn` ([#1052])
-* rework TypeScript declarations to bring all types into imported namespace ([#1081])
-
-### Migration Tips
-
-#### Testing for no arguments
-
-If you were previously using code like:
-
-```js
-if (!program.args.length) ...
-```
-
-a partial replacement is:
-
-```js
-if (program.rawArgs.length < 3) ...
-```
-
-## [4.0.0-1] Prerelease (2019-10-08)
-
-(Released in 4.0.0)
-
-## [4.0.0-0] Prerelease (2019-10-01)
-
-(Released in 4.0.0)
-
-## [2.20.1] (2019-09-29)
-
-### Fixed
-
-* Improve tracking of executable subcommands.
-
-### Changed
-
-* update development dependencies
-
-## [3.0.2] (2019-09-27)
-
-### Fixed
-
-* Improve tracking of executable subcommands.
-
-### Changed
-
-* update development dependencies
-
-## [3.0.1] (2019-08-30)
-
-### Added
-
-* .name and .usage to README ([#1010])
-* Table of Contents to README ([#1010])
-* TypeScript definition for `executableFile` in CommandOptions ([#1028])
-
-### Changed
-
-* consistently use `const` rather than `var` in README ([#1026])
-
-### Fixed
-
-* help for sub commands with custom executableFile ([#1018])
-
-## [3.0.0] / 2019-08-08
-
-* Add option to specify executable file name ([#999])
- * e.g. `.command('clone', 'clone description', { executableFile: 'myClone' })`
-* Change docs for `.command` to contrast action handler vs git-style executable. ([#938] [#990])
-* **Breaking** Change TypeScript to use overloaded function for `.command`. ([#938] [#990])
-* Change to use straight quotes around strings in error messages (like 'this' instead of `this') ([#915])
-* Add TypeScript "reference types" for node ([#974])
-* Add support for hyphen as an option argument in subcommands ([#697])
-* Add support for a short option flag and its value to be concatenated for action handler subcommands ([#599])
- * e.g. `-p 80` can also be supplied as `-p80`
-* Add executable arguments to spawn in win32, for git-style executables ([#611])
- * e.g. `node --harmony myCommand.js clone`
-* Add parent command as prefix of subcommand in help ([#980])
-* Add optional custom description to `.version` ([#963])
- * e.g. `program.version('0.0.1', '-v, --vers', 'output the current version')`
-* Add `.helpOption(flags, description)` routine to customise help flags and description ([#963])
- * e.g. `.helpOption('-e, --HELP', 'read more information')`
-* Fix behavior of --no-* options ([#795])
- * can now define both `--foo` and `--no-foo`
- * **Breaking** custom event listeners: `--no-foo` on cli now emits `option:no-foo` (previously `option:foo`)
- * **Breaking** default value: defining `--no-foo` after defining `--foo` leaves the default value unchanged (previously set it to false)
- * allow boolean default value, such as from environment ([#987])
-* Increment inspector port for spawned subcommands ([#991])
- * e.g. `node --inspect myCommand.js clone`
-
-### Migration Tips
-
-The custom event for a negated option like `--no-foo` is `option:no-foo` (previously `option:foo`).
-
-```js
-program
- .option('--no-foo')
- .on('option:no-foo', () => {
- console.log('removing foo');
- });
-```
-
-When using TypeScript, adding a command does not allow an explicit `undefined` for an unwanted executable description (e.g
-for a command with an action handler).
-
-```js
-program
- .command('action1', undefined, { noHelp: true }) // No longer valid
- .command('action2', { noHelp: true }) // Correct
-```
-
-## 3.0.0-0 Prerelease / 2019-07-28
-
-(Released as 3.0.0)
-
-## 2.20.0 / 2019-04-02
-
-* fix: resolve symbolic links completely when hunting for subcommands (#935)
-* Update index.d.ts (#930)
-* Update Readme.md (#924)
-* Remove --save option as it isn't required anymore (#918)
-* Add link to the license file (#900)
-* Added example of receiving args from options (#858)
-* Added missing semicolon (#882)
-* Add extension to .eslintrc (#876)
-
-## 2.19.0 / 2018-10-02
-
-* Removed newline after Options and Commands headers (#864)
-* Bugfix - Error output (#862)
-* Fix to change default value to string (#856)
-
-## 2.18.0 / 2018-09-07
-
-* Standardize help output (#853)
-* chmod 644 travis.yml (#851)
-* add support for execute typescript subcommand via ts-node (#849)
-
-## 2.17.1 / 2018-08-07
-
-* Fix bug in command emit (#844)
-
-## 2.17.0 / 2018-08-03
-
-* fixed newline output after help information (#833)
-* Fix to emit the action even without command (#778)
-* npm update (#823)
-
-## 2.16.0 / 2018-06-29
-
-* Remove Makefile and `test/run` (#821)
-* Make 'npm test' run on Windows (#820)
-* Add badge to display install size (#807)
-* chore: cache node_modules (#814)
-* chore: remove Node.js 4 (EOL), add Node.js 10 (#813)
-* fixed typo in readme (#812)
-* Fix types (#804)
-* Update eslint to resolve vulnerabilities in lodash (#799)
-* updated readme with custom event listeners. (#791)
-* fix tests (#794)
-
-## 2.15.0 / 2018-03-07
-
-* Update downloads badge to point to graph of downloads over time instead of duplicating link to npm
-* Arguments description
-
-## 2.14.1 / 2018-02-07
-
-* Fix typing of help function
-
-## 2.14.0 / 2018-02-05
-
-* only register the option:version event once
-* Fixes issue #727: Passing empty string for option on command is set to undefined
-* enable eqeqeq rule
-* resolves #754 add linter configuration to project
-* resolves #560 respect custom name for version option
-* document how to override the version flag
-* document using options per command
-
-## 2.13.0 / 2018-01-09
-
-* Do not print default for --no-
-* remove trailing spaces in command help
-* Update CI's Node.js to LTS and latest version
-* typedefs: Command and Option types added to commander namespace
-
-## 2.12.2 / 2017-11-28
-
-* fix: typings are not shipped
-
-## 2.12.1 / 2017-11-23
-
-* Move @types/node to dev dependency
-
-## 2.12.0 / 2017-11-22
-
-* add attributeName() method to Option objects
-* Documentation updated for options with --no prefix
-* typings: `outputHelp` takes a string as the first parameter
-* typings: use overloads
-* feat(typings): update to match js api
-* Print default value in option help
-* Fix translation error
-* Fail when using same command and alias (#491)
-* feat(typings): add help callback
-* fix bug when description is add after command with options (#662)
-* Format js code
-* Rename History.md to CHANGELOG.md (#668)
-* feat(typings): add typings to support TypeScript (#646)
-* use current node
-
-## 2.11.0 / 2017-07-03
-
-* Fix help section order and padding (#652)
-* feature: support for signals to subcommands (#632)
-* Fixed #37, --help should not display first (#447)
-* Fix translation errors. (#570)
-* Add package-lock.json
-* Remove engines
-* Upgrade package version
-* Prefix events to prevent conflicts between commands and options (#494)
-* Removing dependency on graceful-readlink
-* Support setting name in #name function and make it chainable
-* Add .vscode directory to .gitignore (Visual Studio Code metadata)
-* Updated link to ruby commander in readme files
-
-## 2.10.0 / 2017-06-19
-
-* Update .travis.yml. drop support for older node.js versions.
-* Fix require arguments in README.md
-* On SemVer you do not start from 0.0.1
-* Add missing semi colon in readme
-* Add save param to npm install
-* node v6 travis test
-* Update Readme_zh-CN.md
-* Allow literal '--' to be passed-through as an argument
-* Test subcommand alias help
-* link build badge to master branch
-* Support the alias of Git style sub-command
-* added keyword commander for better search result on npm
-* Fix Sub-Subcommands
-* test node.js stable
-* Fixes TypeError when a command has an option called `--description`
-* Update README.md to make it beginner friendly and elaborate on the difference between angled and square brackets.
-* Add chinese Readme file
-
-## 2.9.0 / 2015-10-13
-
-* Add option `isDefault` to set default subcommand #415 @Qix-
-* Add callback to allow filtering or post-processing of help text #434 @djulien
-* Fix `undefined` text in help information close #414 #416 @zhiyelee
-
-## 2.8.1 / 2015-04-22
-
-* Back out `support multiline description` Close #396 #397
-
-## 2.8.0 / 2015-04-07
-
-* Add `process.execArg` support, execution args like `--harmony` will be passed to sub-commands #387 @DigitalIO @zhiyelee
-* Fix bug in Git-style sub-commands #372 @zhiyelee
-* Allow commands to be hidden from help #383 @tonylukasavage
-* When git-style sub-commands are in use, yet none are called, display help #382 @claylo
-* Add ability to specify arguments syntax for top-level command #258 @rrthomas
-* Support multiline descriptions #208 @zxqfox
-
-## 2.7.1 / 2015-03-11
-
-* Revert #347 (fix collisions when option and first arg have same name) which causes a bug in #367.
-
-## 2.7.0 / 2015-03-09
-
-* Fix git-style bug when installed globally. Close #335 #349 @zhiyelee
-* Fix collisions when option and first arg have same name. Close #346 #347 @tonylukasavage
-* Add support for camelCase on `opts()`. Close #353 @nkzawa
-* Add node.js 0.12 and io.js to travis.yml
-* Allow RegEx options. #337 @palanik
-* Fixes exit code when sub-command failing. Close #260 #332 @pirelenito
-* git-style `bin` files in $PATH make sense. Close #196 #327 @zhiyelee
-
-## 2.6.0 / 2014-12-30
-
-* added `Command#allowUnknownOption` method. Close #138 #318 @doozr @zhiyelee
-* Add application description to the help msg. Close #112 @dalssoft
-
-## 2.5.1 / 2014-12-15
-
-* fixed two bugs incurred by variadic arguments. Close #291 @Quentin01 #302 @zhiyelee
-
-## 2.5.0 / 2014-10-24
-
-* add support for variadic arguments. Closes #277 @whitlockjc
-
-## 2.4.0 / 2014-10-17
-
-* fixed a bug on executing the coercion function of subcommands option. Closes #270
-* added `Command.prototype.name` to retrieve command name. Closes #264 #266 @tonylukasavage
-* added `Command.prototype.opts` to retrieve all the options as a simple object of key-value pairs. Closes #262 @tonylukasavage
-* fixed a bug on subcommand name. Closes #248 @jonathandelgado
-* fixed function normalize doesn’t honor option terminator. Closes #216 @abbr
-
-## 2.3.0 / 2014-07-16
-
-* add command alias'. Closes PR #210
-* fix: Typos. Closes #99
-* fix: Unused fs module. Closes #217
-
-## 2.2.0 / 2014-03-29
-
-* add passing of previous option value
-* fix: support subcommands on windows. Closes #142
-* Now the defaultValue passed as the second argument of the coercion function.
-
-## 2.1.0 / 2013-11-21
-
-* add: allow cflag style option params, unit test, fixes #174
-
-## 2.0.0 / 2013-07-18
-
-* remove input methods (.prompt, .confirm, etc)
-
-## Older versions
-
-* [1.x](./changelogs/CHANGELOG-1.md)
-* [0.x](./changelogs/CHANGELOG-0.md)
-
-[#599]: https://github.com/tj/commander.js/issues/599
-[#611]: https://github.com/tj/commander.js/issues/611
-[#697]: https://github.com/tj/commander.js/issues/697
-[#795]: https://github.com/tj/commander.js/issues/795
-[#806]: https://github.com/tj/commander.js/issues/806
-[#915]: https://github.com/tj/commander.js/issues/915
-[#938]: https://github.com/tj/commander.js/issues/938
-[#963]: https://github.com/tj/commander.js/issues/963
-[#974]: https://github.com/tj/commander.js/issues/974
-[#980]: https://github.com/tj/commander.js/issues/980
-[#987]: https://github.com/tj/commander.js/issues/987
-[#990]: https://github.com/tj/commander.js/issues/990
-[#991]: https://github.com/tj/commander.js/issues/991
-[#993]: https://github.com/tj/commander.js/issues/993
-[#999]: https://github.com/tj/commander.js/issues/999
-[#1010]: https://github.com/tj/commander.js/pull/1010
-[#1018]: https://github.com/tj/commander.js/pull/1018
-[#1026]: https://github.com/tj/commander.js/pull/1026
-[#1027]: https://github.com/tj/commander.js/pull/1027
-[#1028]: https://github.com/tj/commander.js/pull/1028
-[#1035]: https://github.com/tj/commander.js/pull/1035
-[#1040]: https://github.com/tj/commander.js/pull/1040
-[#1047]: https://github.com/tj/commander.js/pull/1047
-[#1048]: https://github.com/tj/commander.js/pull/1048
-[#1049]: https://github.com/tj/commander.js/pull/1049
-[#1051]: https://github.com/tj/commander.js/pull/1051
-[#1052]: https://github.com/tj/commander.js/pull/1052
-[#1053]: https://github.com/tj/commander.js/pull/1053
-[#1071]: https://github.com/tj/commander.js/pull/1071
-[#1081]: https://github.com/tj/commander.js/pull/1081
-[#1091]: https://github.com/tj/commander.js/pull/1091
-[#1096]: https://github.com/tj/commander.js/pull/1096
-[#1102]: https://github.com/tj/commander.js/pull/1102
-[#1118]: https://github.com/tj/commander.js/pull/1118
-[#1157]: https://github.com/tj/commander.js/pull/1157
-
-[Unreleased]: https://github.com/tj/commander.js/compare/master...develop
-[4.1.1]: https://github.com/tj/commander.js/compare/v4.0.0..v4.1.1
-[4.1.0]: https://github.com/tj/commander.js/compare/v4.0.1..v4.1.0
-[4.0.1]: https://github.com/tj/commander.js/compare/v4.0.0..v4.0.1
-[4.0.0]: https://github.com/tj/commander.js/compare/v3.0.2..v4.0.0
-[4.0.0-1]: https://github.com/tj/commander.js/compare/v4.0.0-0..v4.0.0-1
-[4.0.0-0]: https://github.com/tj/commander.js/compare/v3.0.2...v4.0.0-0
-[3.0.2]: https://github.com/tj/commander.js/compare/v3.0.1...v3.0.2
-[3.0.1]: https://github.com/tj/commander.js/compare/v3.0.0...v3.0.1
-[3.0.0]: https://github.com/tj/commander.js/compare/v2.20.1...v3.0.0
-[2.20.1]: https://github.com/tj/commander.js/compare/v2.20.0...v2.20.1
diff --git a/node_modules/@babel/cli/node_modules/commander/Readme.md b/node_modules/@babel/cli/node_modules/commander/Readme.md
deleted file mode 100644
index aa4f42b5..00000000
--- a/node_modules/@babel/cli/node_modules/commander/Readme.md
+++ /dev/null
@@ -1,713 +0,0 @@
-# Commander.js
-
-[![Build Status](https://api.travis-ci.org/tj/commander.js.svg?branch=master)](http://travis-ci.org/tj/commander.js)
-[![NPM Version](http://img.shields.io/npm/v/commander.svg?style=flat)](https://www.npmjs.org/package/commander)
-[![NPM Downloads](https://img.shields.io/npm/dm/commander.svg?style=flat)](https://npmcharts.com/compare/commander?minimal=true)
-[![Install Size](https://packagephobia.now.sh/badge?p=commander)](https://packagephobia.now.sh/result?p=commander)
-
-The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/commander-rb/commander).
-
-Read this in other languages: English | [简体中文](./Readme_zh-CN.md)
-
-- [Commander.js](#commanderjs)
- - [Installation](#installation)
- - [Declaring program variable](#declaring-program-variable)
- - [Options](#options)
- - [Common option types, boolean and value](#common-option-types-boolean-and-value)
- - [Default option value](#default-option-value)
- - [Other option types, negatable boolean and flag|value](#other-option-types-negatable-boolean-and-flagvalue)
- - [Custom option processing](#custom-option-processing)
- - [Required option](#required-option)
- - [Version option](#version-option)
- - [Commands](#commands)
- - [Specify the argument syntax](#specify-the-argument-syntax)
- - [Action handler (sub)commands](#action-handler-subcommands)
- - [Git-style executable (sub)commands](#git-style-executable-subcommands)
- - [Automated --help](#automated---help)
- - [Custom help](#custom-help)
- - [.usage and .name](#usage-and-name)
- - [.outputHelp(cb)](#outputhelpcb)
- - [.helpOption(flags, description)](#helpoptionflags-description)
- - [.help(cb)](#helpcb)
- - [Custom event listeners](#custom-event-listeners)
- - [Bits and pieces](#bits-and-pieces)
- - [Avoiding option name clashes](#avoiding-option-name-clashes)
- - [TypeScript](#typescript)
- - [Node options such as --harmony](#node-options-such-as---harmony)
- - [Node debugging](#node-debugging)
- - [Override exit handling](#override-exit-handling)
- - [Examples](#examples)
- - [License](#license)
- - [Support](#support)
- - [Commander for enterprise](#commander-for-enterprise)
-
-## Installation
-
-```bash
-npm install commander
-```
-
-## Declaring _program_ variable
-
-Commander exports a global object which is convenient for quick programs.
-This is used in the examples in this README for brevity.
-
-```js
-const program = require('commander');
-program.version('0.0.1');
-```
-
-For larger programs which may use commander in multiple ways, including unit testing, it is better to create a local Command object to use.
-
- ```js
- const commander = require('commander');
- const program = new commander.Command();
- program.version('0.0.1');
- ```
-
-## Options
-
-Options are defined with the `.option()` method, also serving as documentation for the options. Each option can have a short flag (single character) and a long name, separated by a comma or space.
-
-The options can be accessed as properties on the Command object. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc. Multiple short flags may be combined as a single arg, for example `-abc` is equivalent to `-a -b -c`.
-
-See also optional new behaviour to [avoid name clashes](#avoiding-option-name-clashes).
-
-### Common option types, boolean and value
-
-The two most used option types are a boolean flag, and an option which takes a value (declared using angle brackets). Both are `undefined` unless specified on command line.
-
-```js
-const program = require('commander');
-
-program
- .option('-d, --debug', 'output extra debugging')
- .option('-s, --small', 'small pizza size')
- .option('-p, --pizza-type <type>', 'flavour of pizza');
-
-program.parse(process.argv);
-
-if (program.debug) console.log(program.opts());
-console.log('pizza details:');
-if (program.small) console.log('- small pizza size');
-if (program.pizzaType) console.log(`- ${program.pizzaType}`);
-```
-
-```bash
-$ pizza-options -d
-{ debug: true, small: undefined, pizzaType: undefined }
-pizza details:
-$ pizza-options -p
-error: option '-p, --pizza-type <type>' argument missing
-$ pizza-options -ds -p vegetarian
-{ debug: true, small: true, pizzaType: 'vegetarian' }
-pizza details:
-- small pizza size
-- vegetarian
-$ pizza-options --pizza-type=cheese
-pizza details:
-- cheese
-```
-
-`program.parse(arguments)` processes the arguments, leaving any args not consumed by the options as the `program.args` array.
-
-### Default option value
-
-You can specify a default value for an option which takes a value.
-
-```js
-const program = require('commander');
-
-program
- .option('-c, --cheese <type>', 'add the specified type of cheese', 'blue');
-
-program.parse(process.argv);
-
-console.log(`cheese: ${program.cheese}`);
-```
-
-```bash
-$ pizza-options
-cheese: blue
-$ pizza-options --cheese stilton
-cheese: stilton
-```
-
-### Other option types, negatable boolean and flag|value
-
-You can specify a boolean option long name with a leading `no-` to set the option value to false when used.
-Defined alone this also makes the option true by default.
-
-If you define `--foo` first, adding `--no-foo` does not change the default value from what it would
-otherwise be. You can specify a default boolean value for a boolean flag and it can be overridden on command line.
-
-```js
-const program = require('commander');
-
-program
- .option('--no-sauce', 'Remove sauce')
- .option('--cheese <flavour>', 'cheese flavour', 'mozzarella')
- .option('--no-cheese', 'plain with no cheese')
- .parse(process.argv);
-
-const sauceStr = program.sauce ? 'sauce' : 'no sauce';
-const cheeseStr = (program.cheese === false) ? 'no cheese' : `${program.cheese} cheese`;
-console.log(`You ordered a pizza with ${sauceStr} and ${cheeseStr}`);
-```
-
-```bash
-$ pizza-options
-You ordered a pizza with sauce and mozzarella cheese
-$ pizza-options --sauce
-error: unknown option '--sauce'
-$ pizza-options --cheese=blue
-You ordered a pizza with sauce and blue cheese
-$ pizza-options --no-sauce --no-cheese
-You ordered a pizza with no sauce and no cheese
-```
-
-You can specify an option which functions as a flag but may also take a value (declared using square brackets).
-
-```js
-const program = require('commander');
-
-program
- .option('-c, --cheese [type]', 'Add cheese with optional type');
-
-program.parse(process.argv);
-
-if (program.cheese === undefined) console.log('no cheese');
-else if (program.cheese === true) console.log('add cheese');
-else console.log(`add cheese type ${program.cheese}`);
-```
-
-```bash
-$ pizza-options
-no cheese
-$ pizza-options --cheese
-add cheese
-$ pizza-options --cheese mozzarella
-add cheese type mozzarella
-```
-
-### Custom option processing
-
-You may specify a function to do custom processing of option values. The callback function receives two parameters, the user specified value and the
-previous value for the option. It returns the new value for the option.
-
-This allows you to coerce the option value to the desired type, or accumulate values, or do entirely custom processing.
-
-You can optionally specify the default/starting value for the option after the function.
-
-```js
-const program = require('commander');
-
-function myParseInt(value, dummyPrevious) {
- // parseInt takes a string and an optional radix
- return parseInt(value);
-}
-
-function increaseVerbosity(dummyValue, previous) {
- return previous + 1;
-}
-
-function collect(value, previous) {
- return previous.concat([value]);
-}
-
-function commaSeparatedList(value, dummyPrevious) {
- return value.split(',');
-}
-
-program
- .option('-f, --float <number>', 'float argument', parseFloat)
- .option('-i, --integer <number>', 'integer argument', myParseInt)
- .option('-v, --verbose', 'verbosity that can be increased', increaseVerbosity, 0)
- .option('-c, --collect <value>', 'repeatable value', collect, [])
- .option('-l, --list <items>', 'comma separated list', commaSeparatedList)
-;
-
-program.parse(process.argv);
-
-if (program.float !== undefined) console.log(`float: ${program.float}`);
-if (program.integer !== undefined) console.log(`integer: ${program.integer}`);
-if (program.verbose > 0) console.log(`verbosity: ${program.verbose}`);
-if (program.collect.length > 0) console.log(program.collect);
-if (program.list !== undefined) console.log(program.list);
-```
-
-```bash
-$ custom -f 1e2
-float: 100
-$ custom --integer 2
-integer: 2
-$ custom -v -v -v
-verbose: 3
-$ custom -c a -c b -c c
-[ 'a', 'b', 'c' ]
-$ custom --list x,y,z
-[ 'x', 'y', 'z' ]
-```
-
-### Required option
-
-You may specify a required (mandatory) option using `.requiredOption`. The option must be specified on the command line, or by having a default value. The method is otherwise the same as `.option` in format, taking flags and description, and optional default value or custom processing.
-
-```js
-const program = require('commander');
-
-program
- .requiredOption('-c, --cheese <type>', 'pizza must have cheese');
-
-program.parse(process.argv);
-```
-
-```
-$ pizza
-error: required option '-c, --cheese <type>' not specified
-```
-
-### Version option
-
-The optional `version` method adds handling for displaying the command version. The default option flags are `-V` and `--version`, and when present the command prints the version number and exits.
-
-```js
-program.version('0.0.1');
-```
-
-```bash
-$ ./examples/pizza -V
-0.0.1
-```
-
-You may change the flags and description by passing additional parameters to the `version` method, using
-the same syntax for flags as the `option` method. The version flags can be named anything, but a long name is required.
-
-```js
-program.version('0.0.1', '-v, --vers', 'output the current version');
-```
-
-## Commands
-
-You can specify (sub)commands for your top-level command using `.command`. There are two ways these can be implemented: using an action handler attached to the command, or as a separate executable file (described in more detail later). In the first parameter to `.command` you specify the command name and any command arguments. The arguments may be `<required>` or `[optional]`, and the last argument may also be `variadic...`.
-
-For example:
-
-```js
-// Command implemented using action handler (description is supplied separately to `.command`)
-// Returns new command for configuring.
-program
- .command('clone <source> [destination]')
- .description('clone a repository into a newly created directory')
- .action((source, destination) => {
- console.log('clone command called');
- });
-
-// Command implemented using separate executable file (description is second parameter to `.command`)
-// Returns top-level command for adding more commands.
-program
- .command('start <service>', 'start named service')
- .command('stop [service]', 'stop named service, or all if no name supplied');
-```
-
-### Specify the argument syntax
-
-You use `.arguments` to specify the arguments for the top-level command, and for subcommands they are included in the `.command` call. Angled brackets (e.g. `<required>`) indicate required input. Square brackets (e.g. `[optional]`) indicate optional input.
-
-```js
-const program = require('commander');
-
-program
- .version('0.1.0')
- .arguments('<cmd> [env]')
- .action(function (cmd, env) {
- cmdValue = cmd;
- envValue = env;
- });
-
-program.parse(process.argv);
-
-if (typeof cmdValue === 'undefined') {
- console.error('no command given!');
- process.exit(1);
-}
-console.log('command:', cmdValue);
-console.log('environment:', envValue || "no environment given");
-```
-
- The last argument of a command can be variadic, and only the last argument. To make an argument variadic you
- append `...` to the argument name. For example:
-
-```js
-const program = require('commander');
-
-program
- .version('0.1.0')
- .command('rmdir <dir> [otherDirs...]')
- .action(function (dir, otherDirs) {
- console.log('rmdir %s', dir);
- if (otherDirs) {
- otherDirs.forEach(function (oDir) {
- console.log('rmdir %s', oDir);
- });
- }
- });
-
-program.parse(process.argv);
-```
-
-The variadic argument is passed to the action handler as an array. (And this also applies to `program.args`.)
-
-### Action handler (sub)commands
-
-You can add options to a command that uses an action handler.
-The action handler gets passed a parameter for each argument you declared, and one additional argument which is the
-command object itself. This command argument has the values for the command-specific options added as properties.
-
-```js
-const program = require('commander');
-
-program
- .command('rm <dir>')
- .option('-r, --recursive', 'Remove recursively')
- .action(function (dir, cmdObj) {
- console.log('remove ' + dir + (cmdObj.recursive ? ' recursively' : ''))
- })
-
-program.parse(process.argv)
-```
-
-You may supply an `async` action handler, in which case you call `.parseAsync` rather than `.parse`.
-
-```js
-async function run() { /* code goes here */ }
-
-async function main() {
- program
- .command('run')
- .action(run);
- await program.parseAsync(process.argv);
-}
-```
-
-A command's options on the command line are validated when the command is used. Any unknown options will be reported as an error. However, if an action-based command does not define an action, then the options are not validated.
-
-Configuration options can be passed with the call to `.command()`. Specifying `true` for `opts.noHelp` will remove the command from the generated help output.
-
-### Git-style executable (sub)commands
-
-When `.command()` is invoked with a description argument, this tells commander that you're going to use separate executables for sub-commands, much like `git(1)` and other popular tools.
-Commander will search the executables in the directory of the entry script (like `./examples/pm`) with the name `program-subcommand`, like `pm-install`, `pm-search`.
-You can specify a custom name with the `executableFile` configuration option.
-
-You handle the options for an executable (sub)command in the executable, and don't declare them at the top-level.
-
-```js
-// file: ./examples/pm
-const program = require('commander');
-
-program
- .version('0.1.0')
- .command('install [name]', 'install one or more packages')
- .command('search [query]', 'search with optional query')
- .command('update', 'update installed packages', {executableFile: 'myUpdateSubCommand'})
- .command('list', 'list packages installed', {isDefault: true})
- .parse(process.argv);
-```
-
-Configuration options can be passed with the call to `.command()`. Specifying `true` for `opts.noHelp` will remove the command from the generated help output. Specifying `true` for `opts.isDefault` will run the subcommand if no other subcommand is specified.
-Specifying a name with `executableFile` will override the default constructed name.
-
-If the program is designed to be installed globally, make sure the executables have proper modes, like `755`.
-
-## Automated --help
-
- The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free:
-
-```bash
-$ ./examples/pizza --help
-Usage: pizza [options]
-
-An application for pizzas ordering
-
-Options:
- -V, --version output the version number
- -p, --peppers Add peppers
- -P, --pineapple Add pineapple
- -b, --bbq Add bbq sauce
- -c, --cheese <type> Add the specified type of cheese (default: "marble")
- -C, --no-cheese You do not want any cheese
- -h, --help output usage information
-```
-
-### Custom help
-
- You can display arbitrary `-h, --help` information
- by listening for "--help". Commander will automatically
- exit once you are done so that the remainder of your program
- does not execute causing undesired behaviors, for example
- in the following executable "stuff" will not output when
- `--help` is used.
-
-```js
-#!/usr/bin/env node
-
-const program = require('commander');
-
-program
- .version('0.1.0')
- .option('-f, --foo', 'enable some foo')
- .option('-b, --bar', 'enable some bar')
- .option('-B, --baz', 'enable some baz');
-
-// must be before .parse() since
-// node's emit() is immediate
-
-program.on('--help', function(){
- console.log('')
- console.log('Examples:');
- console.log(' $ custom-help --help');
- console.log(' $ custom-help -h');
-});
-
-program.parse(process.argv);
-
-console.log('stuff');
-```
-
-Yields the following help output when `node script-name.js -h` or `node script-name.js --help` are run:
-
-```Text
-Usage: custom-help [options]
-
-Options:
- -h, --help output usage information
- -V, --version output the version number
- -f, --foo enable some foo
- -b, --bar enable some bar
- -B, --baz enable some baz
-
-Examples:
- $ custom-help --help
- $ custom-help -h
-```
-
-### .usage and .name
-
-These allow you to customise the usage description in the first line of the help. The name is otherwise
-deduced from the (full) program arguments. Given:
-
-```js
-program
- .name("my-command")
- .usage("[global options] command")
-```
-
-The help will start with:
-
-```Text
-Usage: my-command [global options] command
-```
-
-### .outputHelp(cb)
-
-Output help information without exiting.
-Optional callback cb allows post-processing of help text before it is displayed.
-
-If you want to display help by default (e.g. if no command was provided), you can use something like:
-
-```js
-const program = require('commander');
-const colors = require('colors');
-
-program
- .version('0.1.0')
- .command('getstream [url]', 'get stream URL')
- .parse(process.argv);
-
-if (!process.argv.slice(2).length) {
- program.outputHelp(make_red);
-}
-
-function make_red(txt) {
- return colors.red(txt); //display the help text in red on the console
-}
-```
-
-### .helpOption(flags, description)
-
- Override the default help flags and description.
-
-```js
-program
- .helpOption('-e, --HELP', 'read more information');
-```
-
-### .help(cb)
-
- Output help information and exit immediately.
- Optional callback cb allows post-processing of help text before it is displayed.
-
-## Custom event listeners
-
- You can execute custom actions by listening to command and option events.
-
-```js
-program.on('option:verbose', function () {
- process.env.VERBOSE = this.verbose;
-});
-
-// error on unknown commands
-program.on('command:*', function () {
- console.error('Invalid command: %s\nSee --help for a list of available commands.', program.args.join(' '));
- process.exit(1);
-});
-```
-
-## Bits and pieces
-
-### Avoiding option name clashes
-
-The original and default behaviour is that the option values are stored
-as properties on the program, and the action handler is passed a
-command object with the options values stored as properties.
-This is very convenient to code, but the downside is possible clashes with
-existing properties of Command.
-
-There are two new routines to change the behaviour, and the default behaviour may change in the future:
-
-- `storeOptionsAsProperties`: whether to store option values as properties on command object, or store separately (specify false) and access using `.opts()`
-- `passCommandToAction`: whether to pass command to action handler,
-or just the options (specify false)
-
-```js
-// file: ./examples/storeOptionsAsProperties.action.js
-program
- .storeOptionsAsProperties(false)
- .passCommandToAction(false);
-
-program
- .name('my-program-name')
- .option('-n,--name <name>');
-
-program
- .command('show')
- .option('-a,--action <action>')
- .action((options) => {
- console.log(options.action);
- });
-
-program.parse(process.argv);
-
-const programOptions = program.opts();
-console.log(programOptions.name);
-```
-
-### TypeScript
-
-The Commander package includes its TypeScript Definition file, but also requires the node types which you need to install yourself. e.g.
-
-```bash
-npm install commander
-npm install --save-dev @types/node
-```
-
-If you use `ts-node` and git-style sub-commands written as `.ts` files, you need to call your program through node to get the sub-commands called correctly. e.g.
-
-```bash
-node -r ts-node/register pm.ts
-```
-
-### Node options such as `--harmony`
-
-You can enable `--harmony` option in two ways:
-
-- Use `#! /usr/bin/env node --harmony` in the sub-commands scripts. (Note Windows does not support this pattern.)
-- Use the `--harmony` option when call the command, like `node --harmony examples/pm publish`. The `--harmony` option will be preserved when spawning sub-command process.
-
-### Node debugging
-
-If you are using the node inspector for [debugging](https://nodejs.org/en/docs/guides/debugging-getting-started/) git-style executable (sub)commands using `node --inspect` et al,
-the inspector port is incremented by 1 for the spawned subcommand.
-
-### Override exit handling
-
-By default Commander calls `process.exit` when it detects errors, or after displaying the help or version. You can override
-this behaviour and optionally supply a callback. The default override throws a `CommanderError`.
-
-The override callback is passed a `CommanderError` with properties `exitCode` number, `code` string, and `message`. The default override behaviour is to throw the error, except for async handling of executable subcommand completion which carries on. The normal display of error messages or version or help
-is not affected by the override which is called after the display.
-
-``` js
-program.exitOverride();
-
-try {
- program.parse(process.argv);
-} catch (err) {
- // custom processing...
-}
-```
-
-## Examples
-
-```js
-const program = require('commander');
-
-program
- .version('0.1.0')
- .option('-C, --chdir <path>', 'change the working directory')
- .option('-c, --config <path>', 'set config path. defaults to ./deploy.conf')
- .option('-T, --no-tests', 'ignore test hook');
-
-program
- .command('setup [env]')
- .description('run setup commands for all envs')
- .option("-s, --setup_mode [mode]", "Which setup mode to use")
- .action(function(env, options){
- const mode = options.setup_mode || "normal";
- env = env || 'all';
- console.log('setup for %s env(s) with %s mode', env, mode);
- });
-
-program
- .command('exec <cmd>')
- .alias('ex')
- .description('execute the given remote cmd')
- .option("-e, --exec_mode <mode>", "Which exec mode to use")
- .action(function(cmd, options){
- console.log('exec "%s" using %s mode', cmd, options.exec_mode);
- }).on('--help', function() {
- console.log('');
- console.log('Examples:');
- console.log('');
- console.log(' $ deploy exec sequential');
- console.log(' $ deploy exec async');
- });
-
-program
- .command('*')
- .action(function(env){
- console.log('deploying "%s"', env);
- });
-
-program.parse(process.argv);
-```
-
-More Demos can be found in the [examples](https://github.com/tj/commander.js/tree/master/examples) directory.
-
-## License
-
-[MIT](https://github.com/tj/commander.js/blob/master/LICENSE)
-
-## Support
-
-Commander 4.x is supported on Node 8 and above, and is likely to work with Node 6 but not tested.
-(For versions of Node below Node 6, use Commander 3.x or 2.x.)
-
-The main forum for free and community support is the project [Issues](https://github.com/tj/commander.js/issues) on GitHub.
-
-### Commander for enterprise
-
-Available as part of the Tidelift Subscription
-
-The maintainers of Commander and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-commander?utm_source=npm-commander&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)
diff --git a/node_modules/@babel/cli/node_modules/commander/index.js b/node_modules/@babel/cli/node_modules/commander/index.js
deleted file mode 100644
index 37d20cc5..00000000
--- a/node_modules/@babel/cli/node_modules/commander/index.js
+++ /dev/null
@@ -1,1649 +0,0 @@
-/**
- * Module dependencies.
- */
-
-var EventEmitter = require('events').EventEmitter;
-var spawn = require('child_process').spawn;
-var path = require('path');
-var dirname = path.dirname;
-var basename = path.basename;
-var fs = require('fs');
-
-/**
- * Inherit `Command` from `EventEmitter.prototype`.
- */
-
-require('util').inherits(Command, EventEmitter);
-
-/**
- * Expose the root command.
- */
-
-exports = module.exports = new Command();
-
-/**
- * Expose `Command`.
- */
-
-exports.Command = Command;
-
-/**
- * Expose `Option`.
- */
-
-exports.Option = Option;
-
-/**
- * Initialize a new `Option` with the given `flags` and `description`.
- *
- * @param {String} flags
- * @param {String} description
- * @api public
- */
-
-function Option(flags, description) {
- this.flags = flags;
- this.required = flags.indexOf('<') >= 0; // A value must be supplied when the option is specified.
- this.optional = flags.indexOf('[') >= 0; // A value is optional when the option is specified.
- this.mandatory = false; // The option must have a value after parsing, which usually means it must be specified on command line.
- this.negate = flags.indexOf('-no-') !== -1;
- flags = flags.split(/[ ,|]+/);
- if (flags.length > 1 && !/^[[<]/.test(flags[1])) this.short = flags.shift();
- this.long = flags.shift();
- this.description = description || '';
-}
-
-/**
- * Return option name.
- *
- * @return {String}
- * @api private
- */
-
-Option.prototype.name = function() {
- return this.long.replace(/^--/, '');
-};
-
-/**
- * Return option name, in a camelcase format that can be used
- * as a object attribute key.
- *
- * @return {String}
- * @api private
- */
-
-Option.prototype.attributeName = function() {
- return camelcase(this.name().replace(/^no-/, ''));
-};
-
-/**
- * Check if `arg` matches the short or long flag.
- *
- * @param {String} arg
- * @return {Boolean}
- * @api private
- */
-
-Option.prototype.is = function(arg) {
- return this.short === arg || this.long === arg;
-};
-
-/**
- * CommanderError class
- * @class
- */
-class CommanderError extends Error {
- /**
- * Constructs the CommanderError class
- * @param {Number} exitCode suggested exit code which could be used with process.exit
- * @param {String} code an id string representing the error
- * @param {String} message human-readable description of the error
- * @constructor
- */
- constructor(exitCode, code, message) {
- super(message);
- // properly capture stack trace in Node.js
- Error.captureStackTrace(this, this.constructor);
- this.name = this.constructor.name;
- this.code = code;
- this.exitCode = exitCode;
- }
-}
-
-exports.CommanderError = CommanderError;
-
-/**
- * Initialize a new `Command`.
- *
- * @param {String} [name]
- * @api public
- */
-
-function Command(name) {
- this.commands = [];
- this.options = [];
- this._execs = new Set();
- this._allowUnknownOption = false;
- this._args = [];
- this._name = name || '';
- this._optionValues = {};
- this._storeOptionsAsProperties = true; // backwards compatible by default
- this._passCommandToAction = true; // backwards compatible by default
- this._actionResults = [];
-
- this._helpFlags = '-h, --help';
- this._helpDescription = 'output usage information';
- this._helpShortFlag = '-h';
- this._helpLongFlag = '--help';
-}
-
-/**
- * Define a command.
- *
- * There are two styles of command: pay attention to where to put the description.
- *
- * Examples:
- *
- * // Command implemented using action handler (description is supplied separately to `.command`)
- * program
- * .command('clone <source> [destination]')
- * .description('clone a repository into a newly created directory')
- * .action((source, destination) => {
- * console.log('clone command called');
- * });
- *
- * // Command implemented using separate executable file (description is second parameter to `.command`)
- * program
- * .command('start <service>', 'start named service')
- * .command('stop [service]', 'stop named service, or all if no name supplied');
- *
- * @param {string} nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`
- * @param {Object|string} [actionOptsOrExecDesc] - configuration options (for action), or description (for executable)
- * @param {Object} [execOpts] - configuration options (for executable)
- * @return {Command} returns new command for action handler, or top-level command for executable command
- * @api public
- */
-
-Command.prototype.command = function(nameAndArgs, actionOptsOrExecDesc, execOpts) {
- var desc = actionOptsOrExecDesc;
- var opts = execOpts;
- if (typeof desc === 'object' && desc !== null) {
- opts = desc;
- desc = null;
- }
- opts = opts || {};
- var args = nameAndArgs.split(/ +/);
- var cmd = new Command(args.shift());
-
- if (desc) {
- cmd.description(desc);
- this.executables = true;
- this._execs.add(cmd._name);
- if (opts.isDefault) this.defaultExecutable = cmd._name;
- }
- cmd._noHelp = !!opts.noHelp;
- cmd._helpFlags = this._helpFlags;
- cmd._helpDescription = this._helpDescription;
- cmd._helpShortFlag = this._helpShortFlag;
- cmd._helpLongFlag = this._helpLongFlag;
- cmd._exitCallback = this._exitCallback;
- cmd._storeOptionsAsProperties = this._storeOptionsAsProperties;
- cmd._passCommandToAction = this._passCommandToAction;
-
- cmd._executableFile = opts.executableFile; // Custom name for executable file
- this.commands.push(cmd);
- cmd.parseExpectedArgs(args);
- cmd.parent = this;
-
- if (desc) return this;
- return cmd;
-};
-
-/**
- * Define argument syntax for the top-level command.
- *
- * @api public
- */
-
-Command.prototype.arguments = function(desc) {
- return this.parseExpectedArgs(desc.split(/ +/));
-};
-
-/**
- * Add an implicit `help [cmd]` subcommand
- * which invokes `--help` for the given command.
- *
- * @api private
- */
-
-Command.prototype.addImplicitHelpCommand = function() {
- this.command('help [cmd]', 'display help for [cmd]');
-};
-
-/**
- * Parse expected `args`.
- *
- * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`.
- *
- * @param {Array} args
- * @return {Command} for chaining
- * @api public
- */
-
-Command.prototype.parseExpectedArgs = function(args) {
- if (!args.length) return;
- var self = this;
- args.forEach(function(arg) {
- var argDetails = {
- required: false,
- name: '',
- variadic: false
- };
-
- switch (arg[0]) {
- case '<':
- argDetails.required = true;
- argDetails.name = arg.slice(1, -1);
- break;
- case '[':
- argDetails.name = arg.slice(1, -1);
- break;
- }
-
- if (argDetails.name.length > 3 && argDetails.name.slice(-3) === '...') {
- argDetails.variadic = true;
- argDetails.name = argDetails.name.slice(0, -3);
- }
- if (argDetails.name) {
- self._args.push(argDetails);
- }
- });
- return this;
-};
-
-/**
- * Register callback to use as replacement for calling process.exit.
- *
- * @param {Function} [fn] optional callback which will be passed a CommanderError, defaults to throwing
- * @return {Command} for chaining
- * @api public
- */
-
-Command.prototype.exitOverride = function(fn) {
- if (fn) {
- this._exitCallback = fn;
- } else {
- this._exitCallback = function(err) {
- if (err.code !== 'commander.executeSubCommandAsync') {
- throw err;
- } else {
- // Async callback from spawn events, not useful to throw.
- }
- };
- }
- return this;
-};
-
-/**
- * Call process.exit, and _exitCallback if defined.
- *
- * @param {Number} exitCode exit code for using with process.exit
- * @param {String} code an id string representing the error
- * @param {String} message human-readable description of the error
- * @return never
- * @api private
- */
-
-Command.prototype._exit = function(exitCode, code, message) {
- if (this._exitCallback) {
- this._exitCallback(new CommanderError(exitCode, code, message));
- // Expecting this line is not reached.
- }
- process.exit(exitCode);
-};
-
-/**
- * Register callback `fn` for the command.
- *
- * Examples:
- *
- * program
- * .command('help')
- * .description('display verbose help')
- * .action(function() {
- * // output help here
- * });
- *
- * @param {Function} fn
- * @return {Command} for chaining
- * @api public
- */
-
-Command.prototype.action = function(fn) {
- var self = this;
- var listener = function(args, unknown) {
- // Parse any so-far unknown options
- args = args || [];
- unknown = unknown || [];
-
- var parsed = self.parseOptions(unknown);
-
- // Output help if necessary
- outputHelpIfRequested(self, parsed.unknown);
- self._checkForMissingMandatoryOptions();
-
- // If there are still any unknown options, then we simply
- // die, unless someone asked for help, in which case we give it
- // to them, and then we die.
- if (parsed.unknown.length > 0) {
- self.unknownOption(parsed.unknown[0]);
- }
-
- // Leftover arguments need to be pushed back. Fixes issue #56
- if (parsed.args.length) args = parsed.args.concat(args);
-
- self._args.forEach(function(arg, i) {
- if (arg.required && args[i] == null) {
- self.missingArgument(arg.name);
- } else if (arg.variadic) {
- if (i !== self._args.length - 1) {
- self.variadicArgNotLast(arg.name);
- }
-
- args[i] = args.splice(i);
- }
- });
-
- // The .action callback takes an extra parameter which is the command itself.
- var expectedArgsCount = self._args.length;
- var actionArgs = args.slice(0, expectedArgsCount);
- if (self._passCommandToAction) {
- actionArgs[expectedArgsCount] = self;
- } else {
- actionArgs[expectedArgsCount] = self.opts();
- }
- // Add the extra arguments so available too.
- if (args.length > expectedArgsCount) {
- actionArgs.push(args.slice(expectedArgsCount));
- }
-
- const actionResult = fn.apply(self, actionArgs);
- // Remember result in case it is async. Assume parseAsync getting called on root.
- let rootCommand = self;
- while (rootCommand.parent) {
- rootCommand = rootCommand.parent;
- }
- rootCommand._actionResults.push(actionResult);
- };
- var parent = this.parent || this;
- var name = parent === this ? '*' : this._name;
- parent.on('command:' + name, listener);
- if (this._alias) parent.on('command:' + this._alias, listener);
- return this;
-};
-
-/**
- * Internal implementation shared by .option() and .requiredOption()
- *
- * @param {Object} config
- * @param {String} flags
- * @param {String} description
- * @param {Function|*} [fn] - custom option processing function or default vaue
- * @param {*} [defaultValue]
- * @return {Command} for chaining
- * @api private
- */
-
-Command.prototype._optionEx = function(config, flags, description, fn, defaultValue) {
- var self = this,
- option = new Option(flags, description),
- oname = option.name(),
- name = option.attributeName();
- option.mandatory = !!config.mandatory;
-
- // default as 3rd arg
- if (typeof fn !== 'function') {
- if (fn instanceof RegExp) {
- // This is a bit simplistic (especially no error messages), and probably better handled by caller using custom option processing.
- // No longer documented in README, but still present for backwards compatibility.
- var regex = fn;
- fn = function(val, def) {
- var m = regex.exec(val);
- return m ? m[0] : def;
- };
- } else {
- defaultValue = fn;
- fn = null;
- }
- }
-
- // preassign default value for --no-*, [optional], <required>, or plain flag if boolean value
- if (option.negate || option.optional || option.required || typeof defaultValue === 'boolean') {
- // when --no-foo we make sure default is true, unless a --foo option is already defined
- if (option.negate) {
- const positiveLongFlag = option.long.replace(/^--no-/, '--');
- defaultValue = self.optionFor(positiveLongFlag) ? self._getOptionValue(name) : true;
- }
- // preassign only if we have a default
- if (defaultValue !== undefined) {
- self._setOptionValue(name, defaultValue);
- option.defaultValue = defaultValue;
- }
- }
-
- // register the option
- this.options.push(option);
-
- // when it's passed assign the value
- // and conditionally invoke the callback
- this.on('option:' + oname, function(val) {
- // coercion
- if (val !== null && fn) {
- val = fn(val, self._getOptionValue(name) === undefined ? defaultValue : self._getOptionValue(name));
- }
-
- // unassigned or boolean value
- if (typeof self._getOptionValue(name) === 'boolean' || typeof self._getOptionValue(name) === 'undefined') {
- // if no value, negate false, and we have a default, then use it!
- if (val == null) {
- self._setOptionValue(name, option.negate
- ? false
- : defaultValue || true);
- } else {
- self._setOptionValue(name, val);
- }
- } else if (val !== null) {
- // reassign
- self._setOptionValue(name, option.negate ? false : val);
- }
- });
-
- return this;
-};
-
-/**
- * Define option with `flags`, `description` and optional
- * coercion `fn`.
- *
- * The `flags` string should contain both the short and long flags,
- * separated by comma, a pipe or space. The following are all valid
- * all will output this way when `--help` is used.
- *
- * "-p, --pepper"
- * "-p|--pepper"
- * "-p --pepper"
- *
- * Examples:
- *
- * // simple boolean defaulting to undefined
- * program.option('-p, --pepper', 'add pepper');
- *
- * program.pepper
- * // => undefined
- *
- * --pepper
- * program.pepper
- * // => true
- *
- * // simple boolean defaulting to true (unless non-negated option is also defined)
- * program.option('-C, --no-cheese', 'remove cheese');
- *
- * program.cheese
- * // => true
- *
- * --no-cheese
- * program.cheese
- * // => false
- *
- * // required argument
- * program.option('-C, --chdir <path>', 'change the working directory');
- *
- * --chdir /tmp
- * program.chdir
- * // => "/tmp"
- *
- * // optional argument
- * program.option('-c, --cheese [type]', 'add cheese [marble]');
- *
- * @param {String} flags
- * @param {String} description
- * @param {Function|*} [fn] - custom option processing function or default vaue
- * @param {*} [defaultValue]
- * @return {Command} for chaining
- * @api public
- */
-
-Command.prototype.option = function(flags, description, fn, defaultValue) {
- return this._optionEx({}, flags, description, fn, defaultValue);
-};
-
-/*
- * Add a required option which must have a value after parsing. This usually means
- * the option must be specified on the command line. (Otherwise the same as .option().)
- *
- * The `flags` string should contain both the short and long flags, separated by comma, a pipe or space.
- *
- * @param {String} flags
- * @param {String} description
- * @param {Function|*} [fn] - custom option processing function or default vaue
- * @param {*} [defaultValue]
- * @return {Command} for chaining
- * @api public
- */
-
-Command.prototype.requiredOption = function(flags, description, fn, defaultValue) {
- return this._optionEx({ mandatory: true }, flags, description, fn, defaultValue);
-};
-
-/**
- * Allow unknown options on the command line.
- *
- * @param {Boolean} arg if `true` or omitted, no error will be thrown
- * for unknown options.
- * @api public
- */
-Command.prototype.allowUnknownOption = function(arg) {
- this._allowUnknownOption = arguments.length === 0 || arg;
- return this;
-};
-
-/**
- * Whether to store option values as properties on command object,
- * or store separately (specify false). In both cases the option values can be accessed using .opts().
- *
- * @param {boolean} value
- * @return {Command} Command for chaining
- * @api public
- */
-
-Command.prototype.storeOptionsAsProperties = function(value) {
- this._storeOptionsAsProperties = (value === undefined) || value;
- if (this.options.length) {
- // This is for programmer, not end user.
- console.error('Commander usage error: call storeOptionsAsProperties before adding options');
- }
- return this;
-};
-
-/**
- * Whether to pass command to action handler,
- * or just the options (specify false).
- *
- * @param {boolean} value
- * @return {Command} Command for chaining
- * @api public
- */
-
-Command.prototype.passCommandToAction = function(value) {
- this._passCommandToAction = (value === undefined) || value;
- return this;
-};
-
-/**
- * Store option value
- *
- * @param {String} key
- * @param {Object} value
- * @api private
- */
-
-Command.prototype._setOptionValue = function(key, value) {
- if (this._storeOptionsAsProperties) {
- this[key] = value;
- } else {
- this._optionValues[key] = value;
- }
-};
-
-/**
- * Retrieve option value
- *
- * @param {String} key
- * @return {Object} value
- * @api private
- */
-
-Command.prototype._getOptionValue = function(key) {
- if (this._storeOptionsAsProperties) {
- return this[key];
- }
- return this._optionValues[key];
-};
-
-/**
- * Parse `argv`, setting options and invoking commands when defined.
- *
- * @param {Array} argv
- * @return {Command} for chaining
- * @api public
- */
-
-Command.prototype.parse = function(argv) {
- // implicit help
- if (this.executables) this.addImplicitHelpCommand();
-
- // store raw args
- this.rawArgs = argv;
-
- // guess name
- this._name = this._name || basename(argv[1], '.js');
-
- // github-style sub-commands with no sub-command
- if (this.executables && argv.length < 3 && !this.defaultExecutable) {
- // this user needs help
- argv.push(this._helpLongFlag);
- }
-
- // process argv
- var normalized = this.normalize(argv.slice(2));
- var parsed = this.parseOptions(normalized);
- var args = this.args = parsed.args;
-
- var result = this.parseArgs(this.args, parsed.unknown);
-
- if (args[0] === 'help' && args.length === 1) this.help();
-
- // Note for future: we could return early if we found an action handler in parseArgs, as none of following code needed?
-
- // <cmd> --help
- if (args[0] === 'help') {
- args[0] = args[1];
- args[1] = this._helpLongFlag;
- } else {
- // If calling through to executable subcommand we could check for help flags before failing,
- // but a somewhat unlikely case since program options not passed to executable subcommands.
- // Wait for reports to see if check needed and what usage pattern is.
- this._checkForMissingMandatoryOptions();
- }
-
- // executable sub-commands
- // (Debugging note for future: args[0] is not right if an action has been called)
- var name = result.args[0];
- var subCommand = null;
-
- // Look for subcommand
- if (name) {
- subCommand = this.commands.find(function(command) {
- return command._name === name;
- });
- }
-
- // Look for alias
- if (!subCommand && name) {
- subCommand = this.commands.find(function(command) {
- return command.alias() === name;
- });
- if (subCommand) {
- name = subCommand._name;
- args[0] = name;
- }
- }
-
- // Look for default subcommand
- if (!subCommand && this.defaultExecutable) {
- name = this.defaultExecutable;
- args.unshift(name);
- subCommand = this.commands.find(function(command) {
- return command._name === name;
- });
- }
-
- if (this._execs.has(name)) {
- return this.executeSubCommand(argv, args, parsed.unknown, subCommand ? subCommand._executableFile : undefined);
- }
-
- return result;
-};
-
-/**
- * Parse `argv`, setting options and invoking commands when defined.
- *
- * Use parseAsync instead of parse if any of your action handlers are async. Returns a Promise.
- *
- * @param {Array} argv
- * @return {Promise}
- * @api public
- */
-Command.prototype.parseAsync = function(argv) {
- this.parse(argv);
- return Promise.all(this._actionResults);
-};
-
-/**
- * Execute a sub-command executable.
- *
- * @param {Array} argv
- * @param {Array} args
- * @param {Array} unknown
- * @param {String} executableFile
- * @api private
- */
-
-Command.prototype.executeSubCommand = function(argv, args, unknown, executableFile) {
- args = args.concat(unknown);
-
- if (!args.length) this.help();
-
- var isExplicitJS = false; // Whether to use node to launch "executable"
-
- // executable
- var pm = argv[1];
- // name of the subcommand, like `pm-install`
- var bin = basename(pm, path.extname(pm)) + '-' + args[0];
- if (executableFile != null) {
- bin = executableFile;
- // Check for same extensions as we scan for below so get consistent launch behaviour.
- var executableExt = path.extname(executableFile);
- isExplicitJS = executableExt === '.js' || executableExt === '.ts' || executableExt === '.mjs';
- }
-
- // In case of globally installed, get the base dir where executable
- // subcommand file should be located at
- var baseDir;
-
- var resolvedLink = fs.realpathSync(pm);
-
- baseDir = dirname(resolvedLink);
-
- // prefer local `./<bin>` to bin in the $PATH
- var localBin = path.join(baseDir, bin);
-
- // whether bin file is a js script with explicit `.js` or `.ts` extension
- if (exists(localBin + '.js')) {
- bin = localBin + '.js';
- isExplicitJS = true;
- } else if (exists(localBin + '.ts')) {
- bin = localBin + '.ts';
- isExplicitJS = true;
- } else if (exists(localBin + '.mjs')) {
- bin = localBin + '.mjs';
- isExplicitJS = true;
- } else if (exists(localBin)) {
- bin = localBin;
- }
-
- args = args.slice(1);
-
- var proc;
- if (process.platform !== 'win32') {
- if (isExplicitJS) {
- args.unshift(bin);
- // add executable arguments to spawn
- args = incrementNodeInspectorPort(process.execArgv).concat(args);
-
- proc = spawn(process.argv[0], args, { stdio: 'inherit' });
- } else {
- proc = spawn(bin, args, { stdio: 'inherit' });
- }
- } else {
- args.unshift(bin);
- // add executable arguments to spawn
- args = incrementNodeInspectorPort(process.execArgv).concat(args);
- proc = spawn(process.execPath, args, { stdio: 'inherit' });
- }
-
- var signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP'];
- signals.forEach(function(signal) {
- process.on(signal, function() {
- if (proc.killed === false && proc.exitCode === null) {
- proc.kill(signal);
- }
- });
- });
-
- // By default terminate process when spawned process terminates.
- // Suppressing the exit if exitCallback defined is a bit messy and of limited use, but does allow process to stay running!
- const exitCallback = this._exitCallback;
- if (!exitCallback) {
- proc.on('close', process.exit.bind(process));
- } else {
- proc.on('close', () => {
- exitCallback(new CommanderError(process.exitCode || 0, 'commander.executeSubCommandAsync', '(close)'));
- });
- }
- proc.on('error', function(err) {
- if (err.code === 'ENOENT') {
- console.error('error: %s(1) does not exist, try --help', bin);
- } else if (err.code === 'EACCES') {
- console.error('error: %s(1) not executable. try chmod or run with root', bin);
- }
- if (!exitCallback) {
- process.exit(1);
- } else {
- const wrappedError = new CommanderError(1, 'commander.executeSubCommandAsync', '(error)');
- wrappedError.nestedError = err;
- exitCallback(wrappedError);
- }
- });
-
- // Store the reference to the child process
- this.runningCommand = proc;
-};
-
-/**
- * Normalize `args`, splitting joined short flags. For example
- * the arg "-abc" is equivalent to "-a -b -c".
- * This also normalizes equal sign and splits "--abc=def" into "--abc def".
- *
- * @param {Array} args
- * @return {Array}
- * @api private
- */
-
-Command.prototype.normalize = function(args) {
- var ret = [],
- arg,
- lastOpt,
- index,
- short,
- opt;
-
- for (var i = 0, len = args.length; i < len; ++i) {
- arg = args[i];
- if (i > 0) {
- lastOpt = this.optionFor(args[i - 1]);
- }
-
- if (arg === '--') {
- // Honor option terminator
- ret = ret.concat(args.slice(i));
- break;
- } else if (lastOpt && lastOpt.required) {
- ret.push(arg);
- } else if (arg.length > 2 && arg[0] === '-' && arg[1] !== '-') {
- short = arg.slice(0, 2);
- opt = this.optionFor(short);
- if (opt && (opt.required || opt.optional)) {
- ret.push(short);
- ret.push(arg.slice(2));
- } else {
- arg.slice(1).split('').forEach(function(c) {
- ret.push('-' + c);
- });
- }
- } else if (/^--/.test(arg) && ~(index = arg.indexOf('='))) {
- ret.push(arg.slice(0, index), arg.slice(index + 1));
- } else {
- ret.push(arg);
- }
- }
-
- return ret;
-};
-
-/**
- * Parse command `args`.
- *
- * When listener(s) are available those
- * callbacks are invoked, otherwise the "*"
- * event is emitted and those actions are invoked.
- *
- * @param {Array} args
- * @return {Command} for chaining
- * @api private
- */
-
-Command.prototype.parseArgs = function(args, unknown) {
- var name;
-
- if (args.length) {
- name = args[0];
- if (this.listeners('command:' + name).length) {
- this.emit('command:' + args.shift(), args, unknown);
- } else {
- this.emit('command:*', args, unknown);
- }
- } else {
- outputHelpIfRequested(this, unknown);
-
- // If there were no args and we have unknown options,
- // then they are extraneous and we need to error.
- if (unknown.length > 0 && !this.defaultExecutable) {
- this.unknownOption(unknown[0]);
- }
- if (this.commands.length === 0 &&
- this._args.filter(function(a) { return a.required; }).length === 0) {
- this.emit('command:*');
- }
- }
-
- return this;
-};
-
-/**
- * Return an option matching `arg` if any.
- *
- * @param {String} arg
- * @return {Option}
- * @api private
- */
-
-Command.prototype.optionFor = function(arg) {
- for (var i = 0, len = this.options.length; i < len; ++i) {
- if (this.options[i].is(arg)) {
- return this.options[i];
- }
- }
-};
-
-/**
- * Display an error message if a mandatory option does not have a value.
- *
- * @api private
- */
-
-Command.prototype._checkForMissingMandatoryOptions = function() {
- // Walk up hierarchy so can call from action handler after checking for displaying help.
- for (var cmd = this; cmd; cmd = cmd.parent) {
- cmd.options.forEach((anOption) => {
- if (anOption.mandatory && (cmd._getOptionValue(anOption.attributeName()) === undefined)) {
- cmd.missingMandatoryOptionValue(anOption);
- }
- });
- }
-};
-
-/**
- * Parse options from `argv` returning `argv`
- * void of these options.
- *
- * @param {Array} argv
- * @return {{args: Array, unknown: Array}}
- * @api public
- */
-
-Command.prototype.parseOptions = function(argv) {
- var args = [],
- len = argv.length,
- literal,
- option,
- arg;
-
- var unknownOptions = [];
-
- // parse options
- for (var i = 0; i < len; ++i) {
- arg = argv[i];
-
- // literal args after --
- if (literal) {
- args.push(arg);
- continue;
- }
-
- if (arg === '--') {
- literal = true;
- continue;
- }
-
- // find matching Option
- option = this.optionFor(arg);
-
- // option is defined
- if (option) {
- // requires arg
- if (option.required) {
- arg = argv[++i];
- if (arg == null) return this.optionMissingArgument(option);
- this.emit('option:' + option.name(), arg);
- // optional arg
- } else if (option.optional) {
- arg = argv[i + 1];
- if (arg == null || (arg[0] === '-' && arg !== '-')) {
- arg = null;
- } else {
- ++i;
- }
- this.emit('option:' + option.name(), arg);
- // flag
- } else {
- this.emit('option:' + option.name());
- }
- continue;
- }
-
- // looks like an option
- if (arg.length > 1 && arg[0] === '-') {
- unknownOptions.push(arg);
-
- // If the next argument looks like it might be
- // an argument for this option, we pass it on.
- // If it isn't, then it'll simply be ignored
- if ((i + 1) < argv.length && (argv[i + 1][0] !== '-' || argv[i + 1] === '-')) {
- unknownOptions.push(argv[++i]);
- }
- continue;
- }
-
- // arg
- args.push(arg);
- }
-
- return { args: args, unknown: unknownOptions };
-};
-
-/**
- * Return an object containing options as key-value pairs
- *
- * @return {Object}
- * @api public
- */
-Command.prototype.opts = function() {
- if (this._storeOptionsAsProperties) {
- // Preserve original behaviour so backwards compatible when still using properties
- var result = {},
- len = this.options.length;
-
- for (var i = 0; i < len; i++) {
- var key = this.options[i].attributeName();
- result[key] = key === this._versionOptionName ? this._version : this[key];
- }
- return result;
- }
-
- return this._optionValues;
-};
-
-/**
- * Argument `name` is missing.
- *
- * @param {String} name
- * @api private
- */
-
-Command.prototype.missingArgument = function(name) {
- const message = `error: missing required argument '${name}'`;
- console.error(message);
- this._exit(1, 'commander.missingArgument', message);
-};
-
-/**
- * `Option` is missing an argument, but received `flag` or nothing.
- *
- * @param {Option} option
- * @param {String} [flag]
- * @api private
- */
-
-Command.prototype.optionMissingArgument = function(option, flag) {
- let message;
- if (flag) {
- message = `error: option '${option.flags}' argument missing, got '${flag}'`;
- } else {
- message = `error: option '${option.flags}' argument missing`;
- }
- console.error(message);
- this._exit(1, 'commander.optionMissingArgument', message);
-};
-
-/**
- * `Option` does not have a value, and is a mandatory option.
- *
- * @param {Option} option
- * @api private
- */
-
-Command.prototype.missingMandatoryOptionValue = function(option) {
- const message = `error: required option '${option.flags}' not specified`;
- console.error(message);
- this._exit(1, 'commander.missingMandatoryOptionValue', message);
-};
-
-/**
- * Unknown option `flag`.
- *
- * @param {String} flag
- * @api private
- */
-
-Command.prototype.unknownOption = function(flag) {
- if (this._allowUnknownOption) return;
- const message = `error: unknown option '${flag}'`;
- console.error(message);
- this._exit(1, 'commander.unknownOption', message);
-};
-
-/**
- * Variadic argument with `name` is not the last argument as required.
- *
- * @param {String} name
- * @api private
- */
-
-Command.prototype.variadicArgNotLast = function(name) {
- const message = `error: variadic arguments must be last '${name}'`;
- console.error(message);
- this._exit(1, 'commander.variadicArgNotLast', message);
-};
-
-/**
- * Set the program version to `str`.
- *
- * This method auto-registers the "-V, --version" flag
- * which will print the version number when passed.
- *
- * You can optionally supply the flags and description to override the defaults.
- *
- * @param {String} str
- * @param {String} [flags]
- * @param {String} [description]
- * @return {Command} for chaining
- * @api public
- */
-
-Command.prototype.version = function(str, flags, description) {
- if (arguments.length === 0) return this._version;
- this._version = str;
- flags = flags || '-V, --version';
- description = description || 'output the version number';
- var versionOption = new Option(flags, description);
- this._versionOptionName = versionOption.long.substr(2) || 'version';
- this.options.push(versionOption);
- var self = this;
- this.on('option:' + this._versionOptionName, function() {
- process.stdout.write(str + '\n');
- self._exit(0, 'commander.version', str);
- });
- return this;
-};
-
-/**
- * Set the description to `str`.
- *
- * @param {String} str
- * @param {Object} [argsDescription]
- * @return {String|Command}
- * @api public
- */
-
-Command.prototype.description = function(str, argsDescription) {
- if (arguments.length === 0) return this._description;
- this._description = str;
- this._argsDescription = argsDescription;
- return this;
-};
-
-/**
- * Set an alias for the command
- *
- * @param {String} alias
- * @return {String|Command}
- * @api public
- */
-
-Command.prototype.alias = function(alias) {
- var command = this;
- if (this.commands.length !== 0) {
- command = this.commands[this.commands.length - 1];
- }
-
- if (arguments.length === 0) return command._alias;
-
- if (alias === command._name) throw new Error('Command alias can\'t be the same as its name');
-
- command._alias = alias;
- return this;
-};
-
-/**
- * Set / get the command usage `str`.
- *
- * @param {String} [str]
- * @return {String|Command}
- * @api public
- */
-
-Command.prototype.usage = function(str) {
- var args = this._args.map(function(arg) {
- return humanReadableArgName(arg);
- });
-
- var usage = '[options]' +
- (this.commands.length ? ' [command]' : '') +
- (this._args.length ? ' ' + args.join(' ') : '');
-
- if (arguments.length === 0) return this._usage || usage;
- this._usage = str;
-
- return this;
-};
-
-/**
- * Get or set the name of the command
- *
- * @param {String} [str]
- * @return {String|Command}
- * @api public
- */
-
-Command.prototype.name = function(str) {
- if (arguments.length === 0) return this._name;
- this._name = str;
- return this;
-};
-
-/**
- * Return prepared commands.
- *
- * @return {Array}
- * @api private
- */
-
-Command.prototype.prepareCommands = function() {
- return this.commands.filter(function(cmd) {
- return !cmd._noHelp;
- }).map(function(cmd) {
- var args = cmd._args.map(function(arg) {
- return humanReadableArgName(arg);
- }).join(' ');
-
- return [
- cmd._name +
- (cmd._alias ? '|' + cmd._alias : '') +
- (cmd.options.length ? ' [options]' : '') +
- (args ? ' ' + args : ''),
- cmd._description
- ];
- });
-};
-
-/**
- * Return the largest command length.
- *
- * @return {Number}
- * @api private
- */
-
-Command.prototype.largestCommandLength = function() {
- var commands = this.prepareCommands();
- return commands.reduce(function(max, command) {
- return Math.max(max, command[0].length);
- }, 0);
-};
-
-/**
- * Return the largest option length.
- *
- * @return {Number}
- * @api private
- */
-
-Command.prototype.largestOptionLength = function() {
- var options = [].slice.call(this.options);
- options.push({
- flags: this._helpFlags
- });
-
- return options.reduce(function(max, option) {
- return Math.max(max, option.flags.length);
- }, 0);
-};
-
-/**
- * Return the largest arg length.
- *
- * @return {Number}
- * @api private
- */
-
-Command.prototype.largestArgLength = function() {
- return this._args.reduce(function(max, arg) {
- return Math.max(max, arg.name.length);
- }, 0);
-};
-
-/**
- * Return the pad width.
- *
- * @return {Number}
- * @api private
- */
-
-Command.prototype.padWidth = function() {
- var width = this.largestOptionLength();
- if (this._argsDescription && this._args.length) {
- if (this.largestArgLength() > width) {
- width = this.largestArgLength();
- }
- }
-
- if (this.commands && this.commands.length) {
- if (this.largestCommandLength() > width) {
- width = this.largestCommandLength();
- }
- }
-
- return width;
-};
-
-/**
- * Return help for options.
- *
- * @return {String}
- * @api private
- */
-
-Command.prototype.optionHelp = function() {
- var width = this.padWidth();
-
- var columns = process.stdout.columns || 80;
- var descriptionWidth = columns - width - 4;
-
- // Append the help information
- return this.options.map(function(option) {
- const fullDesc = option.description +
- ((!option.negate && option.defaultValue !== undefined) ? ' (default: ' + JSON.stringify(option.defaultValue) + ')' : '');
- return pad(option.flags, width) + ' ' + optionalWrap(fullDesc, descriptionWidth, width + 2);
- }).concat([pad(this._helpFlags, width) + ' ' + optionalWrap(this._helpDescription, descriptionWidth, width + 2)])
- .join('\n');
-};
-
-/**
- * Return command help documentation.
- *
- * @return {String}
- * @api private
- */
-
-Command.prototype.commandHelp = function() {
- if (!this.commands.length) return '';
-
- var commands = this.prepareCommands();
- var width = this.padWidth();
-
- var columns = process.stdout.columns || 80;
- var descriptionWidth = columns - width - 4;
-
- return [
- 'Commands:',
- commands.map(function(cmd) {
- var desc = cmd[1] ? ' ' + cmd[1] : '';
- return (desc ? pad(cmd[0], width) : cmd[0]) + optionalWrap(desc, descriptionWidth, width + 2);
- }).join('\n').replace(/^/gm, ' '),
- ''
- ].join('\n');
-};
-
-/**
- * Return program help documentation.
- *
- * @return {String}
- * @api private
- */
-
-Command.prototype.helpInformation = function() {
- var desc = [];
- if (this._description) {
- desc = [
- this._description,
- ''
- ];
-
- var argsDescription = this._argsDescription;
- if (argsDescription && this._args.length) {
- var width = this.padWidth();
- var columns = process.stdout.columns || 80;
- var descriptionWidth = columns - width - 5;
- desc.push('Arguments:');
- desc.push('');
- this._args.forEach(function(arg) {
- desc.push(' ' + pad(arg.name, width) + ' ' + wrap(argsDescription[arg.name], descriptionWidth, width + 4));
- });
- desc.push('');
- }
- }
-
- var cmdName = this._name;
- if (this._alias) {
- cmdName = cmdName + '|' + this._alias;
- }
- var parentCmdNames = '';
- for (var parentCmd = this.parent; parentCmd; parentCmd = parentCmd.parent) {
- parentCmdNames = parentCmd.name() + ' ' + parentCmdNames;
- }
- var usage = [
- 'Usage: ' + parentCmdNames + cmdName + ' ' + this.usage(),
- ''
- ];
-
- var cmds = [];
- var commandHelp = this.commandHelp();
- if (commandHelp) cmds = [commandHelp];
-
- var options = [
- 'Options:',
- '' + this.optionHelp().replace(/^/gm, ' '),
- ''
- ];
-
- return usage
- .concat(desc)
- .concat(options)
- .concat(cmds)
- .join('\n');
-};
-
-/**
- * Output help information for this command.
- *
- * When listener(s) are available for the helpLongFlag
- * those callbacks are invoked.
- *
- * @api public
- */
-
-Command.prototype.outputHelp = function(cb) {
- if (!cb) {
- cb = function(passthru) {
- return passthru;
- };
- }
- const cbOutput = cb(this.helpInformation());
- if (typeof cbOutput !== 'string' && !Buffer.isBuffer(cbOutput)) {
- throw new Error('outputHelp callback must return a string or a Buffer');
- }
- process.stdout.write(cbOutput);
- this.emit(this._helpLongFlag);
-};
-
-/**
- * You can pass in flags and a description to override the help
- * flags and help description for your command.
- *
- * @param {String} [flags]
- * @param {String} [description]
- * @return {Command}
- * @api public
- */
-
-Command.prototype.helpOption = function(flags, description) {
- this._helpFlags = flags || this._helpFlags;
- this._helpDescription = description || this._helpDescription;
-
- var splitFlags = this._helpFlags.split(/[ ,|]+/);
-
- if (splitFlags.length > 1) this._helpShortFlag = splitFlags.shift();
-
- this._helpLongFlag = splitFlags.shift();
-
- return this;
-};
-
-/**
- * Output help information and exit.
- *
- * @param {Function} [cb]
- * @api public
- */
-
-Command.prototype.help = function(cb) {
- this.outputHelp(cb);
- // exitCode: preserving original behaviour which was calling process.exit()
- // message: do not have all displayed text available so only passing placeholder.
- this._exit(process.exitCode || 0, 'commander.help', '(outputHelp)');
-};
-
-/**
- * Camel-case the given `flag`
- *
- * @param {String} flag
- * @return {String}
- * @api private
- */
-
-function camelcase(flag) {
- return flag.split('-').reduce(function(str, word) {
- return str + word[0].toUpperCase() + word.slice(1);
- });
-}
-
-/**
- * Pad `str` to `width`.
- *
- * @param {String} str
- * @param {Number} width
- * @return {String}
- * @api private
- */
-
-function pad(str, width) {
- var len = Math.max(0, width - str.length);
- return str + Array(len + 1).join(' ');
-}
-
-/**
- * Wraps the given string with line breaks at the specified width while breaking
- * words and indenting every but the first line on the left.
- *
- * @param {String} str
- * @param {Number} width
- * @param {Number} indent
- * @return {String}
- * @api private
- */
-function wrap(str, width, indent) {
- var regex = new RegExp('.{1,' + (width - 1) + '}([\\s\u200B]|$)|[^\\s\u200B]+?([\\s\u200B]|$)', 'g');
- var lines = str.match(regex) || [];
- return lines.map(function(line, i) {
- if (line.slice(-1) === '\n') {
- line = line.slice(0, line.length - 1);
- }
- return ((i > 0 && indent) ? Array(indent + 1).join(' ') : '') + line.trimRight();
- }).join('\n');
-}
-
-/**
- * Optionally wrap the given str to a max width of width characters per line
- * while indenting with indent spaces. Do not wrap if insufficient width or
- * string is manually formatted.
- *
- * @param {String} str
- * @param {Number} width
- * @param {Number} indent
- * @return {String}
- * @api private
- */
-function optionalWrap(str, width, indent) {
- // Detect manually wrapped and indented strings by searching for line breaks
- // followed by multiple spaces/tabs.
- if (str.match(/[\n]\s+/)) return str;
- // Do not wrap to narrow columns (or can end up with a word per line).
- const minWidth = 40;
- if (width < minWidth) return str;
-
- return wrap(str, width, indent);
-}
-
-/**
- * Output help information if help flags specified
- *
- * @param {Command} cmd - command to output help for
- * @param {Array} options - array of options to search for -h or --help
- * @api private
- */
-
-function outputHelpIfRequested(cmd, options) {
- options = options || [];
-
- for (var i = 0; i < options.length; i++) {
- if (options[i] === cmd._helpLongFlag || options[i] === cmd._helpShortFlag) {
- cmd.outputHelp();
- // (Do not have all displayed text available so only passing placeholder.)
- cmd._exit(0, 'commander.helpDisplayed', '(outputHelp)');
- }
- }
-}
-
-/**
- * Takes an argument and returns its human readable equivalent for help usage.
- *
- * @param {Object} arg
- * @return {String}
- * @api private
- */
-
-function humanReadableArgName(arg) {
- var nameOutput = arg.name + (arg.variadic === true ? '...' : '');
-
- return arg.required
- ? '<' + nameOutput + '>'
- : '[' + nameOutput + ']';
-}
-
-// for versions before node v0.8 when there weren't `fs.existsSync`
-function exists(file) {
- try {
- if (fs.statSync(file).isFile()) {
- return true;
- }
- } catch (e) {
- return false;
- }
-}
-
-/**
- * Scan arguments and increment port number for inspect calls (to avoid conflicts when spawning new command).
- *
- * @param {string[]} args - array of arguments from node.execArgv
- * @returns {string[]}
- * @api private
- */
-
-function incrementNodeInspectorPort(args) {
- // Testing for these options:
- // --inspect[=[host:]port]
- // --inspect-brk[=[host:]port]
- // --inspect-port=[host:]port
- return args.map((arg) => {
- var result = arg;
- if (arg.indexOf('--inspect') === 0) {
- var debugOption;
- var debugHost = '127.0.0.1';
- var debugPort = '9229';
- var match;
- if ((match = arg.match(/^(--inspect(-brk)?)$/)) !== null) {
- // e.g. --inspect
- debugOption = match[1];
- } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/)) !== null) {
- debugOption = match[1];
- if (/^\d+$/.test(match[3])) {
- // e.g. --inspect=1234
- debugPort = match[3];
- } else {
- // e.g. --inspect=localhost
- debugHost = match[3];
- }
- } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/)) !== null) {
- // e.g. --inspect=localhost:1234
- debugOption = match[1];
- debugHost = match[3];
- debugPort = match[4];
- }
-
- if (debugOption && debugPort !== '0') {
- result = `${debugOption}=${debugHost}:${parseInt(debugPort) + 1}`;
- }
- }
- return result;
- });
-}
diff --git a/node_modules/@babel/cli/node_modules/commander/package.json b/node_modules/@babel/cli/node_modules/commander/package.json
deleted file mode 100644
index e4781e5b..00000000
--- a/node_modules/@babel/cli/node_modules/commander/package.json
+++ /dev/null
@@ -1,41 +0,0 @@
-{
- "name": "commander",
- "version": "4.1.1",
- "description": "the complete solution for node.js command-line programs",
- "keywords": [
- "commander",
- "command",
- "option",
- "parser"
- ],
- "author": "TJ Holowaychuk <tj@vision-media.ca>",
- "license": "MIT",
- "repository": {
- "type": "git",
- "url": "https://github.com/tj/commander.js.git"
- },
- "scripts": {
- "lint": "eslint index.js \"tests/**/*.js\"",
- "test": "jest && npm run test-typings",
- "test-typings": "tsc -p tsconfig.json"
- },
- "main": "index",
- "files": [
- "index.js",
- "typings/index.d.ts"
- ],
- "dependencies": {},
- "devDependencies": {
- "@types/jest": "^24.0.23",
- "@types/node": "^12.12.11",
- "eslint": "^6.7.0",
- "eslint-plugin-jest": "^22.21.0",
- "jest": "^24.8.0",
- "standard": "^14.3.1",
- "typescript": "^3.7.2"
- },
- "typings": "typings/index.d.ts",
- "engines": {
- "node": ">= 6"
- }
-}
diff --git a/node_modules/@babel/cli/node_modules/commander/typings/index.d.ts b/node_modules/@babel/cli/node_modules/commander/typings/index.d.ts
deleted file mode 100644
index 082a3a3c..00000000
--- a/node_modules/@babel/cli/node_modules/commander/typings/index.d.ts
+++ /dev/null
@@ -1,311 +0,0 @@
-// Type definitions for commander
-// Original definitions by: Alan Agius <https://github.com/alan-agius4>, Marcelo Dezem <https://github.com/mdezem>, vvakame <https://github.com/vvakame>, Jules Randolph <https://github.com/sveinburne>
-
-///<reference types="node" />
-
-declare namespace commander {
-
- interface CommanderError extends Error {
- code: string;
- exitCode: number;
- message: string;
- nestedError?: string;
- }
- type CommanderErrorConstructor = { new (exitCode: number, code: string, message: string): CommanderError };
-
- interface Option {
- flags: string;
- required: boolean; // A value must be supplied when the option is specified.
- optional: boolean; // A value is optional when the option is specified.
- mandatory: boolean; // The option must have a value after parsing, which usually means it must be specified on command line.
- bool: boolean;
- short?: string;
- long: string;
- description: string;
- }
- type OptionConstructor = { new (flags: string, description?: string): Option };
-
- interface Command extends NodeJS.EventEmitter {
- [key: string]: any; // options as properties
-
- args: string[];
-
- /**
- * Set the program version to `str`.
- *
- * This method auto-registers the "-V, --version" flag
- * which will print the version number when passed.
- *
- * You can optionally supply the flags and description to override the defaults.
- */
- version(str: string, flags?: string, description?: string): Command;
-
- /**
- * Define a command, implemented using an action handler.
- *
- * @remarks
- * The command description is supplied using `.description`, not as a parameter to `.command`.
- *
- * @example
- * ```ts
- * program
- * .command('clone <source> [destination]')
- * .description('clone a repository into a newly created directory')
- * .action((source, destination) => {
- * console.log('clone command called');
- * });
- * ```
- *
- * @param nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`
- * @param opts - configuration options
- * @returns new command
- */
- command(nameAndArgs: string, opts?: CommandOptions): Command;
- /**
- * Define a command, implemented in a separate executable file.
- *
- * @remarks
- * The command description is supplied as the second parameter to `.command`.
- *
- * @example
- * ```ts
- * program
- * .command('start <service>', 'start named service')
- * .command('stop [service]', 'stop named serice, or all if no name supplied');
- * ```
- *
- * @param nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`
- * @param description - description of executable command
- * @param opts - configuration options
- * @returns top level command for chaining more command definitions
- */
- command(nameAndArgs: string, description: string, opts?: commander.CommandOptions): Command;
-
- /**
- * Define argument syntax for the top-level command.
- *
- * @returns Command for chaining
- */
- arguments(desc: string): Command;
-
- /**
- * Parse expected `args`.
- *
- * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`.
- *
- * @returns Command for chaining
- */
- parseExpectedArgs(args: string[]): Command;
-
- /**
- * Register callback to use as replacement for calling process.exit.
- */
- exitOverride(callback?: (err: CommanderError) => never|void): Command;
-
- /**
- * Register callback `fn` for the command.
- *
- * @example
- * program
- * .command('help')
- * .description('display verbose help')
- * .action(function() {
- * // output help here
- * });
- *
- * @returns Command for chaining
- */
- action(fn: (...args: any[]) => void | Promise<void>): Command;
-
- /**
- * Define option with `flags`, `description` and optional
- * coercion `fn`.
- *
- * The `flags` string should contain both the short and long flags,
- * separated by comma, a pipe or space. The following are all valid
- * all will output this way when `--help` is used.
- *
- * "-p, --pepper"
- * "-p|--pepper"
- * "-p --pepper"
- *
- * @example
- * // simple boolean defaulting to false
- * program.option('-p, --pepper', 'add pepper');
- *
- * --pepper
- * program.pepper
- * // => Boolean
- *
- * // simple boolean defaulting to true
- * program.option('-C, --no-cheese', 'remove cheese');
- *
- * program.cheese
- * // => true
- *
- * --no-cheese
- * program.cheese
- * // => false
- *
- * // required argument
- * program.option('-C, --chdir <path>', 'change the working directory');
- *
- * --chdir /tmp
- * program.chdir
- * // => "/tmp"
- *
- * // optional argument
- * program.option('-c, --cheese [type]', 'add cheese [marble]');
- *
- * @returns Command for chaining
- */
- option(flags: string, description?: string, fn?: ((arg1: any, arg2: any) => void) | RegExp, defaultValue?: any): Command;
- option(flags: string, description?: string, defaultValue?: any): Command;
-
- /**
- * Define a required option, which must have a value after parsing. This usually means
- * the option must be specified on the command line. (Otherwise the same as .option().)
- *
- * The `flags` string should contain both the short and long flags, separated by comma, a pipe or space.
- */
- requiredOption(flags: string, description?: string, fn?: ((arg1: any, arg2: any) => void) | RegExp, defaultValue?: any): Command;
- requiredOption(flags: string, description?: string, defaultValue?: any): Command;
-
-
- /**
- * Whether to store option values as properties on command object,
- * or store separately (specify false). In both cases the option values can be accessed using .opts().
- *
- * @return Command for chaining
- */
- storeOptionsAsProperties(value?: boolean): Command;
-
- /**
- * Whether to pass command to action handler,
- * or just the options (specify false).
- *
- * @return Command for chaining
- */
- passCommandToAction(value?: boolean): Command;
-
- /**
- * Allow unknown options on the command line.
- *
- * @param [arg] if `true` or omitted, no error will be thrown for unknown options.
- * @returns Command for chaining
- */
- allowUnknownOption(arg?: boolean): Command;
-
- /**
- * Parse `argv`, setting options and invoking commands when defined.
- *
- * @returns Command for chaining
- */
- parse(argv: string[]): Command;
-
- /**
- * Parse `argv`, setting options and invoking commands when defined.
- *
- * Use parseAsync instead of parse if any of your action handlers are async. Returns a Promise.
- *
- * @returns Promise
- */
- parseAsync(argv: string[]): Promise<any>;
-
- /**
- * Parse options from `argv` returning `argv` void of these options.
- */
- parseOptions(argv: string[]): commander.ParseOptionsResult;
-
- /**
- * Return an object containing options as key-value pairs
- */
- opts(): { [key: string]: any };
-
- /**
- * Set the description.
- *
- * @returns Command for chaining
- */
- description(str: string, argsDescription?: {[argName: string]: string}): Command;
- /**
- * Get the description.
- */
- description(): string;
-
- /**
- * Set an alias for the command.
- *
- * @returns Command for chaining
- */
- alias(alias: string): Command;
- /**
- * Get alias for the command.
- */
- alias(): string;
-
- /**
- * Set the command usage.
- *
- * @returns Command for chaining
- */
- usage(str: string): Command;
- /**
- * Get the command usage.
- */
- usage(): string;
-
- /**
- * Set the name of the command.
- *
- * @returns Command for chaining
- */
- name(str: string): Command;
- /**
- * Get the name of the command.
- */
- name(): string;
-
- /**
- * Output help information for this command.
- *
- * When listener(s) are available for the helpLongFlag
- * those callbacks are invoked.
- */
- outputHelp(cb?: (str: string) => string): void;
-
- /**
- * You can pass in flags and a description to override the help
- * flags and help description for your command.
- */
- helpOption(flags?: string, description?: string): Command;
-
- /**
- * Output help information and exit.
- */
- help(cb?: (str: string) => string): never;
- }
- type CommandConstructor = { new (name?: string): Command };
-
-
- interface CommandOptions {
- noHelp?: boolean;
- isDefault?: boolean;
- executableFile?: string;
- }
-
- interface ParseOptionsResult {
- args: string[];
- unknown: string[];
- }
-
- interface CommanderStatic extends Command {
- Command: CommandConstructor;
- Option: OptionConstructor;
- CommanderError:CommanderErrorConstructor;
- }
-
-}
-
-declare const commander: commander.CommanderStatic;
-export = commander;
diff --git a/node_modules/@babel/cli/node_modules/slash/index.js b/node_modules/@babel/cli/node_modules/slash/index.js
deleted file mode 100644
index 75d72501..00000000
--- a/node_modules/@babel/cli/node_modules/slash/index.js
+++ /dev/null
@@ -1,11 +0,0 @@
-'use strict';
-module.exports = input => {
- const isExtendedLengthPath = /^\\\\\?\\/.test(input);
- const hasNonAscii = /[^\u0000-\u0080]+/.test(input); // eslint-disable-line no-control-regex
-
- if (isExtendedLengthPath || hasNonAscii) {
- return input;
- }
-
- return input.replace(/\\/g, '/');
-};
diff --git a/node_modules/@babel/cli/node_modules/slash/readme.md b/node_modules/@babel/cli/node_modules/slash/readme.md
deleted file mode 100644
index 5e2fedbc..00000000
--- a/node_modules/@babel/cli/node_modules/slash/readme.md
+++ /dev/null
@@ -1,44 +0,0 @@
-# slash [![Build Status](https://travis-ci.org/sindresorhus/slash.svg?branch=master)](https://travis-ci.org/sindresorhus/slash)
-
-> Convert Windows backslash paths to slash paths: `foo\\bar` ➔ `foo/bar`
-
-[Forward-slash paths can be used in Windows](http://superuser.com/a/176395/6877) as long as they're not extended-length paths and don't contain any non-ascii characters.
-
-This was created since the `path` methods in Node outputs `\\` paths on Windows.
-
-
-## Install
-
-```
-$ npm install slash
-```
-
-
-## Usage
-
-```js
-const path = require('path');
-const slash = require('slash');
-
-const str = path.join('foo', 'bar');
-// Unix => foo/bar
-// Windows => foo\\bar
-
-slash(str);
-// Unix => foo/bar
-// Windows => foo/bar
-```
-
-
-## API
-
-### slash(path)
-
-Type: `string`
-
-Accepts a Windows backslash path and returns a slash path.
-
-
-## License
-
-MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/node_modules/@babel/core/node_modules/.bin/json5 b/node_modules/@babel/core/node_modules/.bin/json5
new file mode 120000
index 00000000..ea747651
--- /dev/null
+++ b/node_modules/@babel/core/node_modules/.bin/json5
@@ -0,0 +1 @@
+../../../../json5/lib/cli.js \ No newline at end of file
diff --git a/node_modules/@babel/core/node_modules/.bin/parser b/node_modules/@babel/core/node_modules/.bin/parser
new file mode 120000
index 00000000..97a06c36
--- /dev/null
+++ b/node_modules/@babel/core/node_modules/.bin/parser
@@ -0,0 +1 @@
+../../../parser/bin/babel-parser.js \ No newline at end of file
diff --git a/node_modules/@babel/core/node_modules/.bin/semver b/node_modules/@babel/core/node_modules/.bin/semver
new file mode 120000
index 00000000..501bb2f5
--- /dev/null
+++ b/node_modules/@babel/core/node_modules/.bin/semver
@@ -0,0 +1 @@
+../../../../semver/bin/semver.js \ No newline at end of file
diff --git a/node_modules/@babel/generator/node_modules/.bin/jsesc b/node_modules/@babel/generator/node_modules/.bin/jsesc
new file mode 120000
index 00000000..dac89cfb
--- /dev/null
+++ b/node_modules/@babel/generator/node_modules/.bin/jsesc
@@ -0,0 +1 @@
+../../../../jsesc/bin/jsesc \ No newline at end of file
diff --git a/node_modules/@babel/helper-compilation-targets/node_modules/.bin/browserslist b/node_modules/@babel/helper-compilation-targets/node_modules/.bin/browserslist
new file mode 120000
index 00000000..93881e31
--- /dev/null
+++ b/node_modules/@babel/helper-compilation-targets/node_modules/.bin/browserslist
@@ -0,0 +1 @@
+../../../../browserslist/cli.js \ No newline at end of file
diff --git a/node_modules/@babel/helper-compilation-targets/node_modules/.bin/semver b/node_modules/@babel/helper-compilation-targets/node_modules/.bin/semver
new file mode 120000
index 00000000..501bb2f5
--- /dev/null
+++ b/node_modules/@babel/helper-compilation-targets/node_modules/.bin/semver
@@ -0,0 +1 @@
+../../../../semver/bin/semver.js \ No newline at end of file
diff --git a/node_modules/@babel/helper-create-class-features-plugin/node_modules/.bin/semver b/node_modules/@babel/helper-create-class-features-plugin/node_modules/.bin/semver
new file mode 120000
index 00000000..501bb2f5
--- /dev/null
+++ b/node_modules/@babel/helper-create-class-features-plugin/node_modules/.bin/semver
@@ -0,0 +1 @@
+../../../../semver/bin/semver.js \ No newline at end of file
diff --git a/node_modules/@babel/helper-create-regexp-features-plugin/node_modules/.bin/semver b/node_modules/@babel/helper-create-regexp-features-plugin/node_modules/.bin/semver
new file mode 120000
index 00000000..501bb2f5
--- /dev/null
+++ b/node_modules/@babel/helper-create-regexp-features-plugin/node_modules/.bin/semver
@@ -0,0 +1 @@
+../../../../semver/bin/semver.js \ No newline at end of file
diff --git a/node_modules/@babel/helper-define-polyfill-provider/node_modules/.bin/resolve b/node_modules/@babel/helper-define-polyfill-provider/node_modules/.bin/resolve
new file mode 120000
index 00000000..168a366d
--- /dev/null
+++ b/node_modules/@babel/helper-define-polyfill-provider/node_modules/.bin/resolve
@@ -0,0 +1 @@
+../../../../resolve/bin/resolve \ No newline at end of file
diff --git a/node_modules/@babel/preset-env/node_modules/.bin/semver b/node_modules/@babel/preset-env/node_modules/.bin/semver
new file mode 120000
index 00000000..501bb2f5
--- /dev/null
+++ b/node_modules/@babel/preset-env/node_modules/.bin/semver
@@ -0,0 +1 @@
+../../../../semver/bin/semver.js \ No newline at end of file
diff --git a/node_modules/@babel/template/node_modules/.bin/parser b/node_modules/@babel/template/node_modules/.bin/parser
new file mode 120000
index 00000000..97a06c36
--- /dev/null
+++ b/node_modules/@babel/template/node_modules/.bin/parser
@@ -0,0 +1 @@
+../../../parser/bin/babel-parser.js \ No newline at end of file
diff --git a/node_modules/@babel/traverse/node_modules/.bin/parser b/node_modules/@babel/traverse/node_modules/.bin/parser
new file mode 120000
index 00000000..97a06c36
--- /dev/null
+++ b/node_modules/@babel/traverse/node_modules/.bin/parser
@@ -0,0 +1 @@
+../../../parser/bin/babel-parser.js \ No newline at end of file
diff --git a/node_modules/ansi-regex/index.js b/node_modules/ansi-regex/index.js
index 616ff837..b9574ed7 100644
--- a/node_modules/ansi-regex/index.js
+++ b/node_modules/ansi-regex/index.js
@@ -1,10 +1,4 @@
'use strict';
-
-module.exports = ({onlyFirst = false} = {}) => {
- const pattern = [
- '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
- '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
- ].join('|');
-
- return new RegExp(pattern, onlyFirst ? undefined : 'g');
+module.exports = function () {
+ return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g;
};
diff --git a/node_modules/ansi-regex/license b/node_modules/ansi-regex/license
index e7af2f77..654d0bfe 100644
--- a/node_modules/ansi-regex/license
+++ b/node_modules/ansi-regex/license
@@ -1,9 +1,21 @@
-MIT License
+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:
+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 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.
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/ansi-regex/package.json b/node_modules/ansi-regex/package.json
index 017f5311..eb44fb5c 100644
--- a/node_modules/ansi-regex/package.json
+++ b/node_modules/ansi-regex/package.json
@@ -1,55 +1,64 @@
{
- "name": "ansi-regex",
- "version": "5.0.1",
- "description": "Regular expression for matching ANSI escape codes",
- "license": "MIT",
- "repository": "chalk/ansi-regex",
- "author": {
- "name": "Sindre Sorhus",
- "email": "sindresorhus@gmail.com",
- "url": "sindresorhus.com"
- },
- "engines": {
- "node": ">=8"
- },
- "scripts": {
- "test": "xo && ava && tsd",
- "view-supported": "node fixtures/view-codes.js"
- },
- "files": [
- "index.js",
- "index.d.ts"
- ],
- "keywords": [
- "ansi",
- "styles",
- "color",
- "colour",
- "colors",
- "terminal",
- "console",
- "cli",
- "string",
- "tty",
- "escape",
- "formatting",
- "rgb",
- "256",
- "shell",
- "xterm",
- "command-line",
- "text",
- "regex",
- "regexp",
- "re",
- "match",
- "test",
- "find",
- "pattern"
- ],
- "devDependencies": {
- "ava": "^2.4.0",
- "tsd": "^0.9.0",
- "xo": "^0.25.3"
- }
+ "name": "ansi-regex",
+ "version": "2.1.1",
+ "description": "Regular expression for matching ANSI escape codes",
+ "license": "MIT",
+ "repository": "chalk/ansi-regex",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "maintainers": [
+ "Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)",
+ "Joshua Appelman <jappelman@xebia.com> (jbnicolai.com)",
+ "JD Ballard <i.am.qix@gmail.com> (github.com/qix-)"
+ ],
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "xo && ava --verbose",
+ "view-supported": "node fixtures/view-codes.js"
+ },
+ "files": [
+ "index.js"
+ ],
+ "keywords": [
+ "ansi",
+ "styles",
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "cli",
+ "string",
+ "tty",
+ "escape",
+ "formatting",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "command-line",
+ "text",
+ "regex",
+ "regexp",
+ "re",
+ "match",
+ "test",
+ "find",
+ "pattern"
+ ],
+ "devDependencies": {
+ "ava": "0.17.0",
+ "xo": "0.16.0"
+ },
+ "xo": {
+ "rules": {
+ "guard-for-in": 0,
+ "no-loop-func": 0
+ }
+ }
}
diff --git a/node_modules/ansi-regex/readme.md b/node_modules/ansi-regex/readme.md
index 4d848bc3..6a928edf 100644
--- a/node_modules/ansi-regex/readme.md
+++ b/node_modules/ansi-regex/readme.md
@@ -1,12 +1,12 @@
-# ansi-regex
+# ansi-regex [![Build Status](https://travis-ci.org/chalk/ansi-regex.svg?branch=master)](https://travis-ci.org/chalk/ansi-regex)
-> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code)
+> Regular expression for matching [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)
## Install
```
-$ npm install ansi-regex
+$ npm install --save ansi-regex
```
@@ -15,64 +15,25 @@ $ npm install ansi-regex
```js
const ansiRegex = require('ansi-regex');
-ansiRegex().test('\u001B[4mcake\u001B[0m');
+ansiRegex().test('\u001b[4mcake\u001b[0m');
//=> true
ansiRegex().test('cake');
//=> false
-'\u001B[4mcake\u001B[0m'.match(ansiRegex());
-//=> ['\u001B[4m', '\u001B[0m']
-
-'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true}));
-//=> ['\u001B[4m']
-
-'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex());
-//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007']
+'\u001b[4mcake\u001b[0m'.match(ansiRegex());
+//=> ['\u001b[4m', '\u001b[0m']
```
-
-## API
-
-### ansiRegex(options?)
-
-Returns a regex for matching ANSI escape codes.
-
-#### options
-
-Type: `object`
-
-##### onlyFirst
-
-Type: `boolean`<br>
-Default: `false` *(Matches any ANSI escape codes in a string)*
-
-Match only the first ANSI escape.
-
-
## FAQ
### Why do you test for codes not in the ECMA 48 standard?
-Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them.
+Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. If I recall correctly, we test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them.
On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out.
-## Maintainers
-
-- [Sindre Sorhus](https://github.com/sindresorhus)
-- [Josh Junon](https://github.com/qix-)
-
-
----
+## License
-<div align="center">
- <b>
- <a href="https://tidelift.com/subscription/pkg/npm-ansi-regex?utm_source=npm-ansi-regex&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
- </b>
- <br>
- <sub>
- Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
- </sub>
-</div>
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/node_modules/ansi-styles/index.js b/node_modules/ansi-styles/index.js
index 5d82581a..90a871c4 100644
--- a/node_modules/ansi-styles/index.js
+++ b/node_modules/ansi-styles/index.js
@@ -1,63 +1,21 @@
'use strict';
+const colorConvert = require('color-convert');
-const wrapAnsi16 = (fn, offset) => (...args) => {
- const code = fn(...args);
+const wrapAnsi16 = (fn, offset) => function () {
+ const code = fn.apply(colorConvert, arguments);
return `\u001B[${code + offset}m`;
};
-const wrapAnsi256 = (fn, offset) => (...args) => {
- const code = fn(...args);
+const wrapAnsi256 = (fn, offset) => function () {
+ const code = fn.apply(colorConvert, arguments);
return `\u001B[${38 + offset};5;${code}m`;
};
-const wrapAnsi16m = (fn, offset) => (...args) => {
- const rgb = fn(...args);
+const wrapAnsi16m = (fn, offset) => function () {
+ const rgb = fn.apply(colorConvert, arguments);
return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
};
-const ansi2ansi = n => n;
-const rgb2rgb = (r, g, b) => [r, g, b];
-
-const setLazyProperty = (object, property, get) => {
- Object.defineProperty(object, property, {
- get: () => {
- const value = get();
-
- Object.defineProperty(object, property, {
- value,
- enumerable: true,
- configurable: true
- });
-
- return value;
- },
- enumerable: true,
- configurable: true
- });
-};
-
-/** @type {typeof import('color-convert')} */
-let colorConvert;
-const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => {
- if (colorConvert === undefined) {
- colorConvert = require('color-convert');
- }
-
- const offset = isBackground ? 10 : 0;
- const styles = {};
-
- for (const [sourceSpace, suite] of Object.entries(colorConvert)) {
- const name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace;
- if (sourceSpace === targetSpace) {
- styles[name] = wrap(identity, offset);
- } else if (typeof suite === 'object') {
- styles[name] = wrap(suite[targetSpace], offset);
- }
- }
-
- return styles;
-};
-
function assembleStyles() {
const codes = new Map();
const styles = {
@@ -81,9 +39,9 @@ function assembleStyles() {
magenta: [35, 39],
cyan: [36, 39],
white: [37, 39],
+ gray: [90, 39],
// Bright color
- blackBright: [90, 39],
redBright: [91, 39],
greenBright: [92, 39],
yellowBright: [93, 39],
@@ -114,14 +72,15 @@ function assembleStyles() {
}
};
- // Alias bright black as gray (and grey)
- styles.color.gray = styles.color.blackBright;
- styles.bgColor.bgGray = styles.bgColor.bgBlackBright;
- styles.color.grey = styles.color.blackBright;
- styles.bgColor.bgGrey = styles.bgColor.bgBlackBright;
+ // Fix humans
+ styles.color.grey = styles.color.gray;
+
+ for (const groupName of Object.keys(styles)) {
+ const group = styles[groupName];
+
+ for (const styleName of Object.keys(group)) {
+ const style = group[styleName];
- for (const [groupName, group] of Object.entries(styles)) {
- for (const [styleName, style] of Object.entries(group)) {
styles[styleName] = {
open: `\u001B[${style[0]}m`,
close: `\u001B[${style[1]}m`
@@ -136,22 +95,65 @@ function assembleStyles() {
value: group,
enumerable: false
});
+
+ Object.defineProperty(styles, 'codes', {
+ value: codes,
+ enumerable: false
+ });
}
- Object.defineProperty(styles, 'codes', {
- value: codes,
- enumerable: false
- });
+ const ansi2ansi = n => n;
+ const rgb2rgb = (r, g, b) => [r, g, b];
styles.color.close = '\u001B[39m';
styles.bgColor.close = '\u001B[49m';
- setLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false));
- setLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false));
- setLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false));
- setLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true));
- setLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true));
- setLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true));
+ styles.color.ansi = {
+ ansi: wrapAnsi16(ansi2ansi, 0)
+ };
+ styles.color.ansi256 = {
+ ansi256: wrapAnsi256(ansi2ansi, 0)
+ };
+ styles.color.ansi16m = {
+ rgb: wrapAnsi16m(rgb2rgb, 0)
+ };
+
+ styles.bgColor.ansi = {
+ ansi: wrapAnsi16(ansi2ansi, 10)
+ };
+ styles.bgColor.ansi256 = {
+ ansi256: wrapAnsi256(ansi2ansi, 10)
+ };
+ styles.bgColor.ansi16m = {
+ rgb: wrapAnsi16m(rgb2rgb, 10)
+ };
+
+ for (let key of Object.keys(colorConvert)) {
+ if (typeof colorConvert[key] !== 'object') {
+ continue;
+ }
+
+ const suite = colorConvert[key];
+
+ if (key === 'ansi16') {
+ key = 'ansi';
+ }
+
+ if ('ansi16' in suite) {
+ styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0);
+ styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10);
+ }
+
+ if ('ansi256' in suite) {
+ styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0);
+ styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10);
+ }
+
+ if ('rgb' in suite) {
+ styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0);
+ styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10);
+ }
+ }
return styles;
}
diff --git a/node_modules/ansi-styles/package.json b/node_modules/ansi-styles/package.json
index 75393284..65edb48c 100644
--- a/node_modules/ansi-styles/package.json
+++ b/node_modules/ansi-styles/package.json
@@ -1,25 +1,23 @@
{
"name": "ansi-styles",
- "version": "4.3.0",
+ "version": "3.2.1",
"description": "ANSI escape codes for styling strings in the terminal",
"license": "MIT",
"repository": "chalk/ansi-styles",
- "funding": "https://github.com/chalk/ansi-styles?sponsor=1",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
"url": "sindresorhus.com"
},
"engines": {
- "node": ">=8"
+ "node": ">=4"
},
"scripts": {
- "test": "xo && ava && tsd",
+ "test": "xo && ava",
"screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor"
},
"files": [
- "index.js",
- "index.d.ts"
+ "index.js"
],
"keywords": [
"ansi",
@@ -44,13 +42,15 @@
"text"
],
"dependencies": {
- "color-convert": "^2.0.1"
+ "color-convert": "^1.9.0"
},
"devDependencies": {
- "@types/color-convert": "^1.9.0",
- "ava": "^2.3.0",
+ "ava": "*",
+ "babel-polyfill": "^6.23.0",
"svg-term-cli": "^2.1.1",
- "tsd": "^0.11.0",
- "xo": "^0.25.3"
+ "xo": "*"
+ },
+ "ava": {
+ "require": "babel-polyfill"
}
}
diff --git a/node_modules/ansi-styles/readme.md b/node_modules/ansi-styles/readme.md
index 24883de8..3158e2df 100644
--- a/node_modules/ansi-styles/readme.md
+++ b/node_modules/ansi-styles/readme.md
@@ -1,10 +1,11 @@
# ansi-styles [![Build Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles)
-> [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal
+> [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal
You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings.
-<img src="screenshot.svg" width="900">
+<img src="https://cdn.rawgit.com/chalk/ansi-styles/8261697c95bf34b6c7767e2cbe9941a851d59385/screenshot.svg" width="900">
+
## Install
@@ -12,6 +13,7 @@ You probably want the higher-level [chalk](https://github.com/chalk/chalk) modul
$ npm install ansi-styles
```
+
## Usage
```js
@@ -27,13 +29,14 @@ console.log(`${style.green.open}Hello world!${style.green.close}`);
// original color.
console.log(style.bgColor.ansi.hsl(120, 80, 72) + 'Hello world!' + style.bgColor.close);
console.log(style.color.ansi256.rgb(199, 20, 250) + 'Hello world!' + style.color.close);
-console.log(style.color.ansi16m.hex('#abcdef') + 'Hello world!' + style.color.close);
+console.log(style.color.ansi16m.hex('#ABCDEF') + 'Hello world!' + style.color.close);
```
## API
Each style has an `open` and `close` property.
+
## Styles
### Modifiers
@@ -57,7 +60,7 @@ Each style has an `open` and `close` property.
- `magenta`
- `cyan`
- `white`
-- `blackBright` (alias: `gray`, `grey`)
+- `gray` ("bright black")
- `redBright`
- `greenBright`
- `yellowBright`
@@ -76,7 +79,7 @@ Each style has an `open` and `close` property.
- `bgMagenta`
- `bgCyan`
- `bgWhite`
-- `bgBlackBright` (alias: `bgGray`, `bgGrey`)
+- `bgBlackBright`
- `bgRedBright`
- `bgGreenBright`
- `bgYellowBright`
@@ -85,6 +88,7 @@ Each style has an `open` and `close` property.
- `bgCyanBright`
- `bgWhiteBright`
+
## Advanced usage
By default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module.
@@ -108,21 +112,11 @@ console.log(style.codes.get(36));
//=> 39
```
+
## [256 / 16 million (TrueColor) support](https://gist.github.com/XVilka/8346728)
`ansi-styles` uses the [`color-convert`](https://github.com/Qix-/color-convert) package to allow for converting between various colors and ANSI escapes, with support for 256 and 16 million colors.
-The following color spaces from `color-convert` are supported:
-
-- `rgb`
-- `hex`
-- `keyword`
-- `hsl`
-- `hsv`
-- `hwb`
-- `ansi`
-- `ansi256`
-
To use these, call the associated conversion function with the intended output, for example:
```js
@@ -136,17 +130,18 @@ style.color.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color foreground
style.bgColor.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color background code
```
+
## Related
- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal
+
## Maintainers
- [Sindre Sorhus](https://github.com/sindresorhus)
- [Josh Junon](https://github.com/qix-)
-## For enterprise
-Available as part of the Tidelift Subscription.
+## License
-The maintainers of `ansi-styles` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ansi-styles?utm_source=npm-ansi-styles&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)
+MIT
diff --git a/node_modules/autoprefixer/node_modules/.bin/browserslist b/node_modules/autoprefixer/node_modules/.bin/browserslist
new file mode 120000
index 00000000..c4cc06e3
--- /dev/null
+++ b/node_modules/autoprefixer/node_modules/.bin/browserslist
@@ -0,0 +1 @@
+../../../browserslist/cli.js \ No newline at end of file
diff --git a/node_modules/babel-plugin-polyfill-corejs2/node_modules/.bin/semver b/node_modules/babel-plugin-polyfill-corejs2/node_modules/.bin/semver
new file mode 120000
index 00000000..c3277a7a
--- /dev/null
+++ b/node_modules/babel-plugin-polyfill-corejs2/node_modules/.bin/semver
@@ -0,0 +1 @@
+../../../semver/bin/semver.js \ No newline at end of file
diff --git a/node_modules/laggard/node_modules/balanced-match/.npmignore b/node_modules/balanced-match/.npmignore
index ae5d8c36..ae5d8c36 100644
--- a/node_modules/laggard/node_modules/balanced-match/.npmignore
+++ b/node_modules/balanced-match/.npmignore
diff --git a/node_modules/balanced-match/README.md b/node_modules/balanced-match/README.md
index d2a48b6b..08e918c0 100644
--- a/node_modules/balanced-match/README.md
+++ b/node_modules/balanced-match/README.md
@@ -66,12 +66,6 @@ With [npm](https://npmjs.org) do:
npm install balanced-match
```
-## Security contact information
-
-To report a security vulnerability, please use the
-[Tidelift security contact](https://tidelift.com/security).
-Tidelift will coordinate the fix and disclosure.
-
## License
(MIT)
diff --git a/node_modules/balanced-match/index.js b/node_modules/balanced-match/index.js
index c67a6460..e8d85870 100644
--- a/node_modules/balanced-match/index.js
+++ b/node_modules/balanced-match/index.js
@@ -1,4 +1,3 @@
-'use strict';
module.exports = balanced;
function balanced(a, b, str) {
if (a instanceof RegExp) a = maybeMatch(a, str);
@@ -28,9 +27,6 @@ function range(a, b, str) {
var i = ai;
if (ai >= 0 && bi > 0) {
- if(a===b) {
- return [ai, bi];
- }
begs = [];
left = str.length;
diff --git a/node_modules/balanced-match/package.json b/node_modules/balanced-match/package.json
index ce6073e0..720eb4d1 100644
--- a/node_modules/balanced-match/package.json
+++ b/node_modules/balanced-match/package.json
@@ -1,7 +1,7 @@
{
"name": "balanced-match",
"description": "Match balanced character pairs, like \"{\" and \"}\"",
- "version": "1.0.2",
+ "version": "0.4.2",
"repository": {
"type": "git",
"url": "git://github.com/juliangruber/balanced-match.git"
@@ -9,11 +9,10 @@
"homepage": "https://github.com/juliangruber/balanced-match",
"main": "index.js",
"scripts": {
- "test": "tape test/test.js",
- "bench": "matcha test/bench.js"
+ "test": "make test"
},
+ "dependencies": {},
"devDependencies": {
- "matcha": "^0.7.0",
"tape": "^4.6.0"
},
"keywords": [
diff --git a/node_modules/balanced-match/.github/FUNDING.yml b/node_modules/brace-expansion/node_modules/balanced-match/.github/FUNDING.yml
index cea8b16e..cea8b16e 100644
--- a/node_modules/balanced-match/.github/FUNDING.yml
+++ b/node_modules/brace-expansion/node_modules/balanced-match/.github/FUNDING.yml
diff --git a/node_modules/laggard/node_modules/balanced-match/LICENSE.md b/node_modules/brace-expansion/node_modules/balanced-match/LICENSE.md
index 2cdc8e41..2cdc8e41 100644
--- a/node_modules/laggard/node_modules/balanced-match/LICENSE.md
+++ b/node_modules/brace-expansion/node_modules/balanced-match/LICENSE.md
diff --git a/node_modules/laggard/node_modules/balanced-match/README.md b/node_modules/brace-expansion/node_modules/balanced-match/README.md
index 08e918c0..d2a48b6b 100644
--- a/node_modules/laggard/node_modules/balanced-match/README.md
+++ b/node_modules/brace-expansion/node_modules/balanced-match/README.md
@@ -66,6 +66,12 @@ With [npm](https://npmjs.org) do:
npm install balanced-match
```
+## Security contact information
+
+To report a security vulnerability, please use the
+[Tidelift security contact](https://tidelift.com/security).
+Tidelift will coordinate the fix and disclosure.
+
## License
(MIT)
diff --git a/node_modules/postcss-quantity-queries/node_modules/balanced-match/index.js b/node_modules/brace-expansion/node_modules/balanced-match/index.js
index e8d85870..c67a6460 100644
--- a/node_modules/postcss-quantity-queries/node_modules/balanced-match/index.js
+++ b/node_modules/brace-expansion/node_modules/balanced-match/index.js
@@ -1,3 +1,4 @@
+'use strict';
module.exports = balanced;
function balanced(a, b, str) {
if (a instanceof RegExp) a = maybeMatch(a, str);
@@ -27,6 +28,9 @@ function range(a, b, str) {
var i = ai;
if (ai >= 0 && bi > 0) {
+ if(a===b) {
+ return [ai, bi];
+ }
begs = [];
left = str.length;
diff --git a/node_modules/postcss-fixes/node_modules/balanced-match/package.json b/node_modules/brace-expansion/node_modules/balanced-match/package.json
index 720eb4d1..ce6073e0 100644
--- a/node_modules/postcss-fixes/node_modules/balanced-match/package.json
+++ b/node_modules/brace-expansion/node_modules/balanced-match/package.json
@@ -1,7 +1,7 @@
{
"name": "balanced-match",
"description": "Match balanced character pairs, like \"{\" and \"}\"",
- "version": "0.4.2",
+ "version": "1.0.2",
"repository": {
"type": "git",
"url": "git://github.com/juliangruber/balanced-match.git"
@@ -9,10 +9,11 @@
"homepage": "https://github.com/juliangruber/balanced-match",
"main": "index.js",
"scripts": {
- "test": "make test"
+ "test": "tape test/test.js",
+ "bench": "matcha test/bench.js"
},
- "dependencies": {},
"devDependencies": {
+ "matcha": "^0.7.0",
"tape": "^4.6.0"
},
"keywords": [
diff --git a/node_modules/browserslist/node_modules/.bin/update-browserslist-db b/node_modules/browserslist/node_modules/.bin/update-browserslist-db
new file mode 120000
index 00000000..693117f2
--- /dev/null
+++ b/node_modules/browserslist/node_modules/.bin/update-browserslist-db
@@ -0,0 +1 @@
+../../../update-browserslist-db/cli.js \ No newline at end of file
diff --git a/node_modules/caniuse-api/node_modules/.bin/browserslist b/node_modules/caniuse-api/node_modules/.bin/browserslist
new file mode 120000
index 00000000..c4cc06e3
--- /dev/null
+++ b/node_modules/caniuse-api/node_modules/.bin/browserslist
@@ -0,0 +1 @@
+../../../browserslist/cli.js \ No newline at end of file
diff --git a/node_modules/chalk/node_modules/ansi-styles/index.js b/node_modules/chalk/node_modules/ansi-styles/index.js
deleted file mode 100644
index 90a871c4..00000000
--- a/node_modules/chalk/node_modules/ansi-styles/index.js
+++ /dev/null
@@ -1,165 +0,0 @@
-'use strict';
-const colorConvert = require('color-convert');
-
-const wrapAnsi16 = (fn, offset) => function () {
- const code = fn.apply(colorConvert, arguments);
- return `\u001B[${code + offset}m`;
-};
-
-const wrapAnsi256 = (fn, offset) => function () {
- const code = fn.apply(colorConvert, arguments);
- return `\u001B[${38 + offset};5;${code}m`;
-};
-
-const wrapAnsi16m = (fn, offset) => function () {
- const rgb = fn.apply(colorConvert, arguments);
- return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
-};
-
-function assembleStyles() {
- const codes = new Map();
- const styles = {
- modifier: {
- reset: [0, 0],
- // 21 isn't widely supported and 22 does the same thing
- bold: [1, 22],
- dim: [2, 22],
- italic: [3, 23],
- underline: [4, 24],
- inverse: [7, 27],
- hidden: [8, 28],
- strikethrough: [9, 29]
- },
- color: {
- black: [30, 39],
- red: [31, 39],
- green: [32, 39],
- yellow: [33, 39],
- blue: [34, 39],
- magenta: [35, 39],
- cyan: [36, 39],
- white: [37, 39],
- gray: [90, 39],
-
- // Bright color
- redBright: [91, 39],
- greenBright: [92, 39],
- yellowBright: [93, 39],
- blueBright: [94, 39],
- magentaBright: [95, 39],
- cyanBright: [96, 39],
- whiteBright: [97, 39]
- },
- bgColor: {
- bgBlack: [40, 49],
- bgRed: [41, 49],
- bgGreen: [42, 49],
- bgYellow: [43, 49],
- bgBlue: [44, 49],
- bgMagenta: [45, 49],
- bgCyan: [46, 49],
- bgWhite: [47, 49],
-
- // Bright color
- bgBlackBright: [100, 49],
- bgRedBright: [101, 49],
- bgGreenBright: [102, 49],
- bgYellowBright: [103, 49],
- bgBlueBright: [104, 49],
- bgMagentaBright: [105, 49],
- bgCyanBright: [106, 49],
- bgWhiteBright: [107, 49]
- }
- };
-
- // Fix humans
- styles.color.grey = styles.color.gray;
-
- for (const groupName of Object.keys(styles)) {
- const group = styles[groupName];
-
- for (const styleName of Object.keys(group)) {
- const style = group[styleName];
-
- styles[styleName] = {
- open: `\u001B[${style[0]}m`,
- close: `\u001B[${style[1]}m`
- };
-
- group[styleName] = styles[styleName];
-
- codes.set(style[0], style[1]);
- }
-
- Object.defineProperty(styles, groupName, {
- value: group,
- enumerable: false
- });
-
- Object.defineProperty(styles, 'codes', {
- value: codes,
- enumerable: false
- });
- }
-
- const ansi2ansi = n => n;
- const rgb2rgb = (r, g, b) => [r, g, b];
-
- styles.color.close = '\u001B[39m';
- styles.bgColor.close = '\u001B[49m';
-
- styles.color.ansi = {
- ansi: wrapAnsi16(ansi2ansi, 0)
- };
- styles.color.ansi256 = {
- ansi256: wrapAnsi256(ansi2ansi, 0)
- };
- styles.color.ansi16m = {
- rgb: wrapAnsi16m(rgb2rgb, 0)
- };
-
- styles.bgColor.ansi = {
- ansi: wrapAnsi16(ansi2ansi, 10)
- };
- styles.bgColor.ansi256 = {
- ansi256: wrapAnsi256(ansi2ansi, 10)
- };
- styles.bgColor.ansi16m = {
- rgb: wrapAnsi16m(rgb2rgb, 10)
- };
-
- for (let key of Object.keys(colorConvert)) {
- if (typeof colorConvert[key] !== 'object') {
- continue;
- }
-
- const suite = colorConvert[key];
-
- if (key === 'ansi16') {
- key = 'ansi';
- }
-
- if ('ansi16' in suite) {
- styles.color.ansi[key] = wrapAnsi16(suite.ansi16, 0);
- styles.bgColor.ansi[key] = wrapAnsi16(suite.ansi16, 10);
- }
-
- if ('ansi256' in suite) {
- styles.color.ansi256[key] = wrapAnsi256(suite.ansi256, 0);
- styles.bgColor.ansi256[key] = wrapAnsi256(suite.ansi256, 10);
- }
-
- if ('rgb' in suite) {
- styles.color.ansi16m[key] = wrapAnsi16m(suite.rgb, 0);
- styles.bgColor.ansi16m[key] = wrapAnsi16m(suite.rgb, 10);
- }
- }
-
- return styles;
-}
-
-// Make the export immutable
-Object.defineProperty(module, 'exports', {
- enumerable: true,
- get: assembleStyles
-});
diff --git a/node_modules/chalk/node_modules/color-convert/index.js b/node_modules/chalk/node_modules/color-convert/index.js
deleted file mode 100644
index e65b5d77..00000000
--- a/node_modules/chalk/node_modules/color-convert/index.js
+++ /dev/null
@@ -1,78 +0,0 @@
-var conversions = require('./conversions');
-var route = require('./route');
-
-var convert = {};
-
-var models = Object.keys(conversions);
-
-function wrapRaw(fn) {
- var wrappedFn = function (args) {
- if (args === undefined || args === null) {
- return args;
- }
-
- if (arguments.length > 1) {
- args = Array.prototype.slice.call(arguments);
- }
-
- return fn(args);
- };
-
- // preserve .conversion property if there is one
- if ('conversion' in fn) {
- wrappedFn.conversion = fn.conversion;
- }
-
- return wrappedFn;
-}
-
-function wrapRounded(fn) {
- var wrappedFn = function (args) {
- if (args === undefined || args === null) {
- return args;
- }
-
- if (arguments.length > 1) {
- args = Array.prototype.slice.call(arguments);
- }
-
- var result = fn(args);
-
- // we're assuming the result is an array here.
- // see notice in conversions.js; don't use box types
- // in conversion functions.
- if (typeof result === 'object') {
- for (var len = result.length, i = 0; i < len; i++) {
- result[i] = Math.round(result[i]);
- }
- }
-
- return result;
- };
-
- // preserve .conversion property if there is one
- if ('conversion' in fn) {
- wrappedFn.conversion = fn.conversion;
- }
-
- return wrappedFn;
-}
-
-models.forEach(function (fromModel) {
- convert[fromModel] = {};
-
- Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});
- Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});
-
- var routes = route(fromModel);
- var routeModels = Object.keys(routes);
-
- routeModels.forEach(function (toModel) {
- var fn = routes[toModel];
-
- convert[fromModel][toModel] = wrapRounded(fn);
- convert[fromModel][toModel].raw = wrapRaw(fn);
- });
-});
-
-module.exports = convert;
diff --git a/node_modules/color-convert/conversions.js b/node_modules/color-convert/conversions.js
index 2657f265..32172007 100644
--- a/node_modules/color-convert/conversions.js
+++ b/node_modules/color-convert/conversions.js
@@ -1,17 +1,18 @@
/* MIT license */
-/* eslint-disable no-mixed-operators */
-const cssKeywords = require('color-name');
+var cssKeywords = require('color-name');
// NOTE: conversions should only return primitive values (i.e. arrays, or
// values that give correct `typeof` results).
// do not use box values types (i.e. Number(), String(), etc.)
-const reverseKeywords = {};
-for (const key of Object.keys(cssKeywords)) {
- reverseKeywords[cssKeywords[key]] = key;
+var reverseKeywords = {};
+for (var key in cssKeywords) {
+ if (cssKeywords.hasOwnProperty(key)) {
+ reverseKeywords[cssKeywords[key]] = key;
+ }
}
-const convert = {
+var convert = module.exports = {
rgb: {channels: 3, labels: 'rgb'},
hsl: {channels: 3, labels: 'hsl'},
hsv: {channels: 3, labels: 'hsv'},
@@ -29,38 +30,40 @@ const convert = {
gray: {channels: 1, labels: ['gray']}
};
-module.exports = convert;
+// hide .channels and .labels properties
+for (var model in convert) {
+ if (convert.hasOwnProperty(model)) {
+ if (!('channels' in convert[model])) {
+ throw new Error('missing channels property: ' + model);
+ }
-// Hide .channels and .labels properties
-for (const model of Object.keys(convert)) {
- if (!('channels' in convert[model])) {
- throw new Error('missing channels property: ' + model);
- }
+ if (!('labels' in convert[model])) {
+ throw new Error('missing channel labels property: ' + model);
+ }
- if (!('labels' in convert[model])) {
- throw new Error('missing channel labels property: ' + model);
- }
+ if (convert[model].labels.length !== convert[model].channels) {
+ throw new Error('channel and label counts mismatch: ' + model);
+ }
- if (convert[model].labels.length !== convert[model].channels) {
- throw new Error('channel and label counts mismatch: ' + model);
+ var channels = convert[model].channels;
+ var labels = convert[model].labels;
+ delete convert[model].channels;
+ delete convert[model].labels;
+ Object.defineProperty(convert[model], 'channels', {value: channels});
+ Object.defineProperty(convert[model], 'labels', {value: labels});
}
-
- const {channels, labels} = convert[model];
- delete convert[model].channels;
- delete convert[model].labels;
- Object.defineProperty(convert[model], 'channels', {value: channels});
- Object.defineProperty(convert[model], 'labels', {value: labels});
}
convert.rgb.hsl = function (rgb) {
- const r = rgb[0] / 255;
- const g = rgb[1] / 255;
- const b = rgb[2] / 255;
- const min = Math.min(r, g, b);
- const max = Math.max(r, g, b);
- const delta = max - min;
- let h;
- let s;
+ var r = rgb[0] / 255;
+ var g = rgb[1] / 255;
+ var b = rgb[2] / 255;
+ var min = Math.min(r, g, b);
+ var max = Math.max(r, g, b);
+ var delta = max - min;
+ var h;
+ var s;
+ var l;
if (max === min) {
h = 0;
@@ -78,7 +81,7 @@ convert.rgb.hsl = function (rgb) {
h += 360;
}
- const l = (min + max) / 2;
+ l = (min + max) / 2;
if (max === min) {
s = 0;
@@ -92,24 +95,23 @@ convert.rgb.hsl = function (rgb) {
};
convert.rgb.hsv = function (rgb) {
- let rdif;
- let gdif;
- let bdif;
- let h;
- let s;
-
- const r = rgb[0] / 255;
- const g = rgb[1] / 255;
- const b = rgb[2] / 255;
- const v = Math.max(r, g, b);
- const diff = v - Math.min(r, g, b);
- const diffc = function (c) {
+ var rdif;
+ var gdif;
+ var bdif;
+ var h;
+ var s;
+
+ var r = rgb[0] / 255;
+ var g = rgb[1] / 255;
+ var b = rgb[2] / 255;
+ var v = Math.max(r, g, b);
+ var diff = v - Math.min(r, g, b);
+ var diffc = function (c) {
return (v - c) / 6 / diff + 1 / 2;
};
if (diff === 0) {
- h = 0;
- s = 0;
+ h = s = 0;
} else {
s = diff / v;
rdif = diffc(r);
@@ -123,7 +125,6 @@ convert.rgb.hsv = function (rgb) {
} else if (b === v) {
h = (2 / 3) + gdif - rdif;
}
-
if (h < 0) {
h += 1;
} else if (h > 1) {
@@ -139,11 +140,11 @@ convert.rgb.hsv = function (rgb) {
};
convert.rgb.hwb = function (rgb) {
- const r = rgb[0];
- const g = rgb[1];
- let b = rgb[2];
- const h = convert.rgb.hsl(rgb)[0];
- const w = 1 / 255 * Math.min(r, Math.min(g, b));
+ var r = rgb[0];
+ var g = rgb[1];
+ var b = rgb[2];
+ var h = convert.rgb.hsl(rgb)[0];
+ var w = 1 / 255 * Math.min(r, Math.min(g, b));
b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));
@@ -151,48 +152,54 @@ convert.rgb.hwb = function (rgb) {
};
convert.rgb.cmyk = function (rgb) {
- const r = rgb[0] / 255;
- const g = rgb[1] / 255;
- const b = rgb[2] / 255;
-
- const k = Math.min(1 - r, 1 - g, 1 - b);
- const c = (1 - r - k) / (1 - k) || 0;
- const m = (1 - g - k) / (1 - k) || 0;
- const y = (1 - b - k) / (1 - k) || 0;
+ var r = rgb[0] / 255;
+ var g = rgb[1] / 255;
+ var b = rgb[2] / 255;
+ var c;
+ var m;
+ var y;
+ var k;
+
+ k = Math.min(1 - r, 1 - g, 1 - b);
+ c = (1 - r - k) / (1 - k) || 0;
+ m = (1 - g - k) / (1 - k) || 0;
+ y = (1 - b - k) / (1 - k) || 0;
return [c * 100, m * 100, y * 100, k * 100];
};
+/**
+ * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance
+ * */
function comparativeDistance(x, y) {
- /*
- See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance
- */
return (
- ((x[0] - y[0]) ** 2) +
- ((x[1] - y[1]) ** 2) +
- ((x[2] - y[2]) ** 2)
+ Math.pow(x[0] - y[0], 2) +
+ Math.pow(x[1] - y[1], 2) +
+ Math.pow(x[2] - y[2], 2)
);
}
convert.rgb.keyword = function (rgb) {
- const reversed = reverseKeywords[rgb];
+ var reversed = reverseKeywords[rgb];
if (reversed) {
return reversed;
}
- let currentClosestDistance = Infinity;
- let currentClosestKeyword;
+ var currentClosestDistance = Infinity;
+ var currentClosestKeyword;
- for (const keyword of Object.keys(cssKeywords)) {
- const value = cssKeywords[keyword];
+ for (var keyword in cssKeywords) {
+ if (cssKeywords.hasOwnProperty(keyword)) {
+ var value = cssKeywords[keyword];
- // Compute comparative distance
- const distance = comparativeDistance(rgb, value);
+ // Compute comparative distance
+ var distance = comparativeDistance(rgb, value);
- // Check if its less, if so set as closest
- if (distance < currentClosestDistance) {
- currentClosestDistance = distance;
- currentClosestKeyword = keyword;
+ // Check if its less, if so set as closest
+ if (distance < currentClosestDistance) {
+ currentClosestDistance = distance;
+ currentClosestKeyword = keyword;
+ }
}
}
@@ -204,50 +211,55 @@ convert.keyword.rgb = function (keyword) {
};
convert.rgb.xyz = function (rgb) {
- let r = rgb[0] / 255;
- let g = rgb[1] / 255;
- let b = rgb[2] / 255;
+ var r = rgb[0] / 255;
+ var g = rgb[1] / 255;
+ var b = rgb[2] / 255;
- // Assume sRGB
- r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);
- g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);
- b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);
+ // assume sRGB
+ r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);
+ g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);
+ b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);
- const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);
- const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);
- const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);
+ var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);
+ var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);
+ var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);
return [x * 100, y * 100, z * 100];
};
convert.rgb.lab = function (rgb) {
- const xyz = convert.rgb.xyz(rgb);
- let x = xyz[0];
- let y = xyz[1];
- let z = xyz[2];
+ var xyz = convert.rgb.xyz(rgb);
+ var x = xyz[0];
+ var y = xyz[1];
+ var z = xyz[2];
+ var l;
+ var a;
+ var b;
x /= 95.047;
y /= 100;
z /= 108.883;
- x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);
- y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);
- z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);
+ x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);
+ y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);
+ z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);
- const l = (116 * y) - 16;
- const a = 500 * (x - y);
- const b = 200 * (y - z);
+ l = (116 * y) - 16;
+ a = 500 * (x - y);
+ b = 200 * (y - z);
return [l, a, b];
};
convert.hsl.rgb = function (hsl) {
- const h = hsl[0] / 360;
- const s = hsl[1] / 100;
- const l = hsl[2] / 100;
- let t2;
- let t3;
- let val;
+ var h = hsl[0] / 360;
+ var s = hsl[1] / 100;
+ var l = hsl[2] / 100;
+ var t1;
+ var t2;
+ var t3;
+ var rgb;
+ var val;
if (s === 0) {
val = l * 255;
@@ -260,15 +272,14 @@ convert.hsl.rgb = function (hsl) {
t2 = l + s - l * s;
}
- const t1 = 2 * l - t2;
+ t1 = 2 * l - t2;
- const rgb = [0, 0, 0];
- for (let i = 0; i < 3; i++) {
+ rgb = [0, 0, 0];
+ for (var i = 0; i < 3; i++) {
t3 = h + 1 / 3 * -(i - 1);
if (t3 < 0) {
t3++;
}
-
if (t3 > 1) {
t3--;
}
@@ -290,31 +301,33 @@ convert.hsl.rgb = function (hsl) {
};
convert.hsl.hsv = function (hsl) {
- const h = hsl[0];
- let s = hsl[1] / 100;
- let l = hsl[2] / 100;
- let smin = s;
- const lmin = Math.max(l, 0.01);
+ var h = hsl[0];
+ var s = hsl[1] / 100;
+ var l = hsl[2] / 100;
+ var smin = s;
+ var lmin = Math.max(l, 0.01);
+ var sv;
+ var v;
l *= 2;
s *= (l <= 1) ? l : 2 - l;
smin *= lmin <= 1 ? lmin : 2 - lmin;
- const v = (l + s) / 2;
- const sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);
+ v = (l + s) / 2;
+ sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);
return [h, sv * 100, v * 100];
};
convert.hsv.rgb = function (hsv) {
- const h = hsv[0] / 60;
- const s = hsv[1] / 100;
- let v = hsv[2] / 100;
- const hi = Math.floor(h) % 6;
-
- const f = h - Math.floor(h);
- const p = 255 * v * (1 - s);
- const q = 255 * v * (1 - (s * f));
- const t = 255 * v * (1 - (s * (1 - f)));
+ var h = hsv[0] / 60;
+ var s = hsv[1] / 100;
+ var v = hsv[2] / 100;
+ var hi = Math.floor(h) % 6;
+
+ var f = h - Math.floor(h);
+ var p = 255 * v * (1 - s);
+ var q = 255 * v * (1 - (s * f));
+ var t = 255 * v * (1 - (s * (1 - f)));
v *= 255;
switch (hi) {
@@ -334,15 +347,16 @@ convert.hsv.rgb = function (hsv) {
};
convert.hsv.hsl = function (hsv) {
- const h = hsv[0];
- const s = hsv[1] / 100;
- const v = hsv[2] / 100;
- const vmin = Math.max(v, 0.01);
- let sl;
- let l;
+ var h = hsv[0];
+ var s = hsv[1] / 100;
+ var v = hsv[2] / 100;
+ var vmin = Math.max(v, 0.01);
+ var lmin;
+ var sl;
+ var l;
l = (2 - s) * v;
- const lmin = (2 - s) * vmin;
+ lmin = (2 - s) * vmin;
sl = s * vmin;
sl /= (lmin <= 1) ? lmin : 2 - lmin;
sl = sl || 0;
@@ -353,83 +367,87 @@ convert.hsv.hsl = function (hsv) {
// http://dev.w3.org/csswg/css-color/#hwb-to-rgb
convert.hwb.rgb = function (hwb) {
- const h = hwb[0] / 360;
- let wh = hwb[1] / 100;
- let bl = hwb[2] / 100;
- const ratio = wh + bl;
- let f;
-
- // Wh + bl cant be > 1
+ var h = hwb[0] / 360;
+ var wh = hwb[1] / 100;
+ var bl = hwb[2] / 100;
+ var ratio = wh + bl;
+ var i;
+ var v;
+ var f;
+ var n;
+
+ // wh + bl cant be > 1
if (ratio > 1) {
wh /= ratio;
bl /= ratio;
}
- const i = Math.floor(6 * h);
- const v = 1 - bl;
+ i = Math.floor(6 * h);
+ v = 1 - bl;
f = 6 * h - i;
if ((i & 0x01) !== 0) {
f = 1 - f;
}
- const n = wh + f * (v - wh); // Linear interpolation
+ n = wh + f * (v - wh); // linear interpolation
- let r;
- let g;
- let b;
- /* eslint-disable max-statements-per-line,no-multi-spaces */
+ var r;
+ var g;
+ var b;
switch (i) {
default:
case 6:
- case 0: r = v; g = n; b = wh; break;
- case 1: r = n; g = v; b = wh; break;
- case 2: r = wh; g = v; b = n; break;
- case 3: r = wh; g = n; b = v; break;
- case 4: r = n; g = wh; b = v; break;
- case 5: r = v; g = wh; b = n; break;
+ case 0: r = v; g = n; b = wh; break;
+ case 1: r = n; g = v; b = wh; break;
+ case 2: r = wh; g = v; b = n; break;
+ case 3: r = wh; g = n; b = v; break;
+ case 4: r = n; g = wh; b = v; break;
+ case 5: r = v; g = wh; b = n; break;
}
- /* eslint-enable max-statements-per-line,no-multi-spaces */
return [r * 255, g * 255, b * 255];
};
convert.cmyk.rgb = function (cmyk) {
- const c = cmyk[0] / 100;
- const m = cmyk[1] / 100;
- const y = cmyk[2] / 100;
- const k = cmyk[3] / 100;
-
- const r = 1 - Math.min(1, c * (1 - k) + k);
- const g = 1 - Math.min(1, m * (1 - k) + k);
- const b = 1 - Math.min(1, y * (1 - k) + k);
+ var c = cmyk[0] / 100;
+ var m = cmyk[1] / 100;
+ var y = cmyk[2] / 100;
+ var k = cmyk[3] / 100;
+ var r;
+ var g;
+ var b;
+
+ r = 1 - Math.min(1, c * (1 - k) + k);
+ g = 1 - Math.min(1, m * (1 - k) + k);
+ b = 1 - Math.min(1, y * (1 - k) + k);
return [r * 255, g * 255, b * 255];
};
convert.xyz.rgb = function (xyz) {
- const x = xyz[0] / 100;
- const y = xyz[1] / 100;
- const z = xyz[2] / 100;
- let r;
- let g;
- let b;
+ var x = xyz[0] / 100;
+ var y = xyz[1] / 100;
+ var z = xyz[2] / 100;
+ var r;
+ var g;
+ var b;
r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);
g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);
b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);
- // Assume sRGB
+ // assume sRGB
r = r > 0.0031308
- ? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)
+ ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)
: r * 12.92;
g = g > 0.0031308
- ? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)
+ ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)
: g * 12.92;
b = b > 0.0031308
- ? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)
+ ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)
: b * 12.92;
r = Math.min(Math.max(0, r), 1);
@@ -440,40 +458,43 @@ convert.xyz.rgb = function (xyz) {
};
convert.xyz.lab = function (xyz) {
- let x = xyz[0];
- let y = xyz[1];
- let z = xyz[2];
+ var x = xyz[0];
+ var y = xyz[1];
+ var z = xyz[2];
+ var l;
+ var a;
+ var b;
x /= 95.047;
y /= 100;
z /= 108.883;
- x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);
- y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);
- z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);
+ x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);
+ y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);
+ z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);
- const l = (116 * y) - 16;
- const a = 500 * (x - y);
- const b = 200 * (y - z);
+ l = (116 * y) - 16;
+ a = 500 * (x - y);
+ b = 200 * (y - z);
return [l, a, b];
};
convert.lab.xyz = function (lab) {
- const l = lab[0];
- const a = lab[1];
- const b = lab[2];
- let x;
- let y;
- let z;
+ var l = lab[0];
+ var a = lab[1];
+ var b = lab[2];
+ var x;
+ var y;
+ var z;
y = (l + 16) / 116;
x = a / 500 + y;
z = y - b / 200;
- const y2 = y ** 3;
- const x2 = x ** 3;
- const z2 = z ** 3;
+ var y2 = Math.pow(y, 3);
+ var x2 = Math.pow(x, 3);
+ var z2 = Math.pow(z, 3);
y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;
x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;
z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;
@@ -486,38 +507,45 @@ convert.lab.xyz = function (lab) {
};
convert.lab.lch = function (lab) {
- const l = lab[0];
- const a = lab[1];
- const b = lab[2];
- let h;
-
- const hr = Math.atan2(b, a);
+ var l = lab[0];
+ var a = lab[1];
+ var b = lab[2];
+ var hr;
+ var h;
+ var c;
+
+ hr = Math.atan2(b, a);
h = hr * 360 / 2 / Math.PI;
if (h < 0) {
h += 360;
}
- const c = Math.sqrt(a * a + b * b);
+ c = Math.sqrt(a * a + b * b);
return [l, c, h];
};
convert.lch.lab = function (lch) {
- const l = lch[0];
- const c = lch[1];
- const h = lch[2];
+ var l = lch[0];
+ var c = lch[1];
+ var h = lch[2];
+ var a;
+ var b;
+ var hr;
- const hr = h / 360 * 2 * Math.PI;
- const a = c * Math.cos(hr);
- const b = c * Math.sin(hr);
+ hr = h / 360 * 2 * Math.PI;
+ a = c * Math.cos(hr);
+ b = c * Math.sin(hr);
return [l, a, b];
};
-convert.rgb.ansi16 = function (args, saturation = null) {
- const [r, g, b] = args;
- let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization
+convert.rgb.ansi16 = function (args) {
+ var r = args[0];
+ var g = args[1];
+ var b = args[2];
+ var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization
value = Math.round(value / 50);
@@ -525,7 +553,7 @@ convert.rgb.ansi16 = function (args, saturation = null) {
return 30;
}
- let ansi = 30
+ var ansi = 30
+ ((Math.round(b / 255) << 2)
| (Math.round(g / 255) << 1)
| Math.round(r / 255));
@@ -538,17 +566,17 @@ convert.rgb.ansi16 = function (args, saturation = null) {
};
convert.hsv.ansi16 = function (args) {
- // Optimization here; we already know the value and don't need to get
+ // optimization here; we already know the value and don't need to get
// it converted for us.
return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);
};
convert.rgb.ansi256 = function (args) {
- const r = args[0];
- const g = args[1];
- const b = args[2];
+ var r = args[0];
+ var g = args[1];
+ var b = args[2];
- // We use the extended greyscale palette here, with the exception of
+ // we use the extended greyscale palette here, with the exception of
// black and white. normal palette only has 4 greyscale shades.
if (r === g && g === b) {
if (r < 8) {
@@ -562,7 +590,7 @@ convert.rgb.ansi256 = function (args) {
return Math.round(((r - 8) / 247) * 24) + 232;
}
- const ansi = 16
+ var ansi = 16
+ (36 * Math.round(r / 255 * 5))
+ (6 * Math.round(g / 255 * 5))
+ Math.round(b / 255 * 5);
@@ -571,9 +599,9 @@ convert.rgb.ansi256 = function (args) {
};
convert.ansi16.rgb = function (args) {
- let color = args % 10;
+ var color = args % 10;
- // Handle greyscale
+ // handle greyscale
if (color === 0 || color === 7) {
if (args > 50) {
color += 3.5;
@@ -584,71 +612,71 @@ convert.ansi16.rgb = function (args) {
return [color, color, color];
}
- const mult = (~~(args > 50) + 1) * 0.5;
- const r = ((color & 1) * mult) * 255;
- const g = (((color >> 1) & 1) * mult) * 255;
- const b = (((color >> 2) & 1) * mult) * 255;
+ var mult = (~~(args > 50) + 1) * 0.5;
+ var r = ((color & 1) * mult) * 255;
+ var g = (((color >> 1) & 1) * mult) * 255;
+ var b = (((color >> 2) & 1) * mult) * 255;
return [r, g, b];
};
convert.ansi256.rgb = function (args) {
- // Handle greyscale
+ // handle greyscale
if (args >= 232) {
- const c = (args - 232) * 10 + 8;
+ var c = (args - 232) * 10 + 8;
return [c, c, c];
}
args -= 16;
- let rem;
- const r = Math.floor(args / 36) / 5 * 255;
- const g = Math.floor((rem = args % 36) / 6) / 5 * 255;
- const b = (rem % 6) / 5 * 255;
+ var rem;
+ var r = Math.floor(args / 36) / 5 * 255;
+ var g = Math.floor((rem = args % 36) / 6) / 5 * 255;
+ var b = (rem % 6) / 5 * 255;
return [r, g, b];
};
convert.rgb.hex = function (args) {
- const integer = ((Math.round(args[0]) & 0xFF) << 16)
+ var integer = ((Math.round(args[0]) & 0xFF) << 16)
+ ((Math.round(args[1]) & 0xFF) << 8)
+ (Math.round(args[2]) & 0xFF);
- const string = integer.toString(16).toUpperCase();
+ var string = integer.toString(16).toUpperCase();
return '000000'.substring(string.length) + string;
};
convert.hex.rgb = function (args) {
- const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);
+ var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);
if (!match) {
return [0, 0, 0];
}
- let colorString = match[0];
+ var colorString = match[0];
if (match[0].length === 3) {
- colorString = colorString.split('').map(char => {
+ colorString = colorString.split('').map(function (char) {
return char + char;
}).join('');
}
- const integer = parseInt(colorString, 16);
- const r = (integer >> 16) & 0xFF;
- const g = (integer >> 8) & 0xFF;
- const b = integer & 0xFF;
+ var integer = parseInt(colorString, 16);
+ var r = (integer >> 16) & 0xFF;
+ var g = (integer >> 8) & 0xFF;
+ var b = integer & 0xFF;
return [r, g, b];
};
convert.rgb.hcg = function (rgb) {
- const r = rgb[0] / 255;
- const g = rgb[1] / 255;
- const b = rgb[2] / 255;
- const max = Math.max(Math.max(r, g), b);
- const min = Math.min(Math.min(r, g), b);
- const chroma = (max - min);
- let grayscale;
- let hue;
+ var r = rgb[0] / 255;
+ var g = rgb[1] / 255;
+ var b = rgb[2] / 255;
+ var max = Math.max(Math.max(r, g), b);
+ var min = Math.min(Math.min(r, g), b);
+ var chroma = (max - min);
+ var grayscale;
+ var hue;
if (chroma < 1) {
grayscale = min / (1 - chroma);
@@ -665,7 +693,7 @@ convert.rgb.hcg = function (rgb) {
if (max === g) {
hue = 2 + (b - r) / chroma;
} else {
- hue = 4 + (r - g) / chroma;
+ hue = 4 + (r - g) / chroma + 4;
}
hue /= 6;
@@ -675,12 +703,17 @@ convert.rgb.hcg = function (rgb) {
};
convert.hsl.hcg = function (hsl) {
- const s = hsl[1] / 100;
- const l = hsl[2] / 100;
+ var s = hsl[1] / 100;
+ var l = hsl[2] / 100;
+ var c = 1;
+ var f = 0;
- const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));
+ if (l < 0.5) {
+ c = 2.0 * s * l;
+ } else {
+ c = 2.0 * s * (1.0 - l);
+ }
- let f = 0;
if (c < 1.0) {
f = (l - 0.5 * c) / (1.0 - c);
}
@@ -689,11 +722,11 @@ convert.hsl.hcg = function (hsl) {
};
convert.hsv.hcg = function (hsv) {
- const s = hsv[1] / 100;
- const v = hsv[2] / 100;
+ var s = hsv[1] / 100;
+ var v = hsv[2] / 100;
- const c = s * v;
- let f = 0;
+ var c = s * v;
+ var f = 0;
if (c < 1.0) {
f = (v - c) / (1 - c);
@@ -703,21 +736,20 @@ convert.hsv.hcg = function (hsv) {
};
convert.hcg.rgb = function (hcg) {
- const h = hcg[0] / 360;
- const c = hcg[1] / 100;
- const g = hcg[2] / 100;
+ var h = hcg[0] / 360;
+ var c = hcg[1] / 100;
+ var g = hcg[2] / 100;
if (c === 0.0) {
return [g * 255, g * 255, g * 255];
}
- const pure = [0, 0, 0];
- const hi = (h % 1) * 6;
- const v = hi % 1;
- const w = 1 - v;
- let mg = 0;
+ var pure = [0, 0, 0];
+ var hi = (h % 1) * 6;
+ var v = hi % 1;
+ var w = 1 - v;
+ var mg = 0;
- /* eslint-disable max-statements-per-line */
switch (Math.floor(hi)) {
case 0:
pure[0] = 1; pure[1] = v; pure[2] = 0; break;
@@ -732,7 +764,6 @@ convert.hcg.rgb = function (hcg) {
default:
pure[0] = 1; pure[1] = 0; pure[2] = w;
}
- /* eslint-enable max-statements-per-line */
mg = (1.0 - c) * g;
@@ -744,11 +775,11 @@ convert.hcg.rgb = function (hcg) {
};
convert.hcg.hsv = function (hcg) {
- const c = hcg[1] / 100;
- const g = hcg[2] / 100;
+ var c = hcg[1] / 100;
+ var g = hcg[2] / 100;
- const v = c + g * (1.0 - c);
- let f = 0;
+ var v = c + g * (1.0 - c);
+ var f = 0;
if (v > 0.0) {
f = c / v;
@@ -758,11 +789,11 @@ convert.hcg.hsv = function (hcg) {
};
convert.hcg.hsl = function (hcg) {
- const c = hcg[1] / 100;
- const g = hcg[2] / 100;
+ var c = hcg[1] / 100;
+ var g = hcg[2] / 100;
- const l = g * (1.0 - c) + 0.5 * c;
- let s = 0;
+ var l = g * (1.0 - c) + 0.5 * c;
+ var s = 0;
if (l > 0.0 && l < 0.5) {
s = c / (2 * l);
@@ -775,18 +806,18 @@ convert.hcg.hsl = function (hcg) {
};
convert.hcg.hwb = function (hcg) {
- const c = hcg[1] / 100;
- const g = hcg[2] / 100;
- const v = c + g * (1.0 - c);
+ var c = hcg[1] / 100;
+ var g = hcg[2] / 100;
+ var v = c + g * (1.0 - c);
return [hcg[0], (v - c) * 100, (1 - v) * 100];
};
convert.hwb.hcg = function (hwb) {
- const w = hwb[1] / 100;
- const b = hwb[2] / 100;
- const v = 1 - b;
- const c = v - w;
- let g = 0;
+ var w = hwb[1] / 100;
+ var b = hwb[2] / 100;
+ var v = 1 - b;
+ var c = v - w;
+ var g = 0;
if (c < 1) {
g = (v - c) / (1 - c);
@@ -807,12 +838,10 @@ convert.gray.rgb = function (args) {
return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];
};
-convert.gray.hsl = function (args) {
+convert.gray.hsl = convert.gray.hsv = function (args) {
return [0, 0, args[0]];
};
-convert.gray.hsv = convert.gray.hsl;
-
convert.gray.hwb = function (gray) {
return [0, 100, gray[0]];
};
@@ -826,14 +855,14 @@ convert.gray.lab = function (gray) {
};
convert.gray.hex = function (gray) {
- const val = Math.round(gray[0] / 100 * 255) & 0xFF;
- const integer = (val << 16) + (val << 8) + val;
+ var val = Math.round(gray[0] / 100 * 255) & 0xFF;
+ var integer = (val << 16) + (val << 8) + val;
- const string = integer.toString(16).toUpperCase();
+ var string = integer.toString(16).toUpperCase();
return '000000'.substring(string.length) + string;
};
convert.rgb.gray = function (rgb) {
- const val = (rgb[0] + rgb[1] + rgb[2]) / 3;
+ var val = (rgb[0] + rgb[1] + rgb[2]) / 3;
return [val / 255 * 100];
};
diff --git a/node_modules/color-convert/index.js b/node_modules/color-convert/index.js
index b648e573..e65b5d77 100644
--- a/node_modules/color-convert/index.js
+++ b/node_modules/color-convert/index.js
@@ -1,25 +1,24 @@
-const conversions = require('./conversions');
-const route = require('./route');
+var conversions = require('./conversions');
+var route = require('./route');
-const convert = {};
+var convert = {};
-const models = Object.keys(conversions);
+var models = Object.keys(conversions);
function wrapRaw(fn) {
- const wrappedFn = function (...args) {
- const arg0 = args[0];
- if (arg0 === undefined || arg0 === null) {
- return arg0;
+ var wrappedFn = function (args) {
+ if (args === undefined || args === null) {
+ return args;
}
- if (arg0.length > 1) {
- args = arg0;
+ if (arguments.length > 1) {
+ args = Array.prototype.slice.call(arguments);
}
return fn(args);
};
- // Preserve .conversion property if there is one
+ // preserve .conversion property if there is one
if ('conversion' in fn) {
wrappedFn.conversion = fn.conversion;
}
@@ -28,24 +27,22 @@ function wrapRaw(fn) {
}
function wrapRounded(fn) {
- const wrappedFn = function (...args) {
- const arg0 = args[0];
-
- if (arg0 === undefined || arg0 === null) {
- return arg0;
+ var wrappedFn = function (args) {
+ if (args === undefined || args === null) {
+ return args;
}
- if (arg0.length > 1) {
- args = arg0;
+ if (arguments.length > 1) {
+ args = Array.prototype.slice.call(arguments);
}
- const result = fn(args);
+ var result = fn(args);
- // We're assuming the result is an array here.
+ // we're assuming the result is an array here.
// see notice in conversions.js; don't use box types
// in conversion functions.
if (typeof result === 'object') {
- for (let len = result.length, i = 0; i < len; i++) {
+ for (var len = result.length, i = 0; i < len; i++) {
result[i] = Math.round(result[i]);
}
}
@@ -53,7 +50,7 @@ function wrapRounded(fn) {
return result;
};
- // Preserve .conversion property if there is one
+ // preserve .conversion property if there is one
if ('conversion' in fn) {
wrappedFn.conversion = fn.conversion;
}
@@ -61,17 +58,17 @@ function wrapRounded(fn) {
return wrappedFn;
}
-models.forEach(fromModel => {
+models.forEach(function (fromModel) {
convert[fromModel] = {};
Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});
Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});
- const routes = route(fromModel);
- const routeModels = Object.keys(routes);
+ var routes = route(fromModel);
+ var routeModels = Object.keys(routes);
- routeModels.forEach(toModel => {
- const fn = routes[toModel];
+ routeModels.forEach(function (toModel) {
+ var fn = routes[toModel];
convert[fromModel][toModel] = wrapRounded(fn);
convert[fromModel][toModel].raw = wrapRaw(fn);
diff --git a/node_modules/color-convert/package.json b/node_modules/color-convert/package.json
index 6e48000c..dfbc4714 100644
--- a/node_modules/color-convert/package.json
+++ b/node_modules/color-convert/package.json
@@ -1,7 +1,7 @@
{
"name": "color-convert",
"description": "Plain color conversion functions",
- "version": "2.0.1",
+ "version": "1.9.3",
"author": "Heather Arthur <fayearthur@gmail.com>",
"license": "MIT",
"repository": "Qix-/color-convert",
@@ -9,9 +9,6 @@
"pretest": "xo",
"test": "node test/basic.js"
},
- "engines": {
- "node": ">=7.0.0"
- },
"keywords": [
"color",
"colour",
@@ -29,6 +26,7 @@
"files": [
"index.js",
"conversions.js",
+ "css-keywords.js",
"route.js"
],
"xo": {
@@ -39,10 +37,10 @@
}
},
"devDependencies": {
- "chalk": "^2.4.2",
- "xo": "^0.24.0"
+ "chalk": "1.1.1",
+ "xo": "0.11.2"
},
"dependencies": {
- "color-name": "~1.1.4"
+ "color-name": "1.1.3"
}
}
diff --git a/node_modules/color-convert/route.js b/node_modules/color-convert/route.js
index 1a08521b..0a1fdea6 100644
--- a/node_modules/color-convert/route.js
+++ b/node_modules/color-convert/route.js
@@ -1,7 +1,7 @@
-const conversions = require('./conversions');
+var conversions = require('./conversions');
/*
- This function routes a model to all other models.
+ this function routes a model to all other models.
all functions that are routed have a property `.conversion` attached
to the returned synthetic function. This property is an array
@@ -12,11 +12,11 @@ const conversions = require('./conversions');
*/
function buildGraph() {
- const graph = {};
+ var graph = {};
// https://jsperf.com/object-keys-vs-for-in-with-closure/3
- const models = Object.keys(conversions);
+ var models = Object.keys(conversions);
- for (let len = models.length, i = 0; i < len; i++) {
+ for (var len = models.length, i = 0; i < len; i++) {
graph[models[i]] = {
// http://jsperf.com/1-vs-infinity
// micro-opt, but this is simple.
@@ -30,18 +30,18 @@ function buildGraph() {
// https://en.wikipedia.org/wiki/Breadth-first_search
function deriveBFS(fromModel) {
- const graph = buildGraph();
- const queue = [fromModel]; // Unshift -> queue -> pop
+ var graph = buildGraph();
+ var queue = [fromModel]; // unshift -> queue -> pop
graph[fromModel].distance = 0;
while (queue.length) {
- const current = queue.pop();
- const adjacents = Object.keys(conversions[current]);
+ var current = queue.pop();
+ var adjacents = Object.keys(conversions[current]);
- for (let len = adjacents.length, i = 0; i < len; i++) {
- const adjacent = adjacents[i];
- const node = graph[adjacent];
+ for (var len = adjacents.length, i = 0; i < len; i++) {
+ var adjacent = adjacents[i];
+ var node = graph[adjacent];
if (node.distance === -1) {
node.distance = graph[current].distance + 1;
@@ -61,10 +61,10 @@ function link(from, to) {
}
function wrapConversion(toModel, graph) {
- const path = [graph[toModel].parent, toModel];
- let fn = conversions[graph[toModel].parent][toModel];
+ var path = [graph[toModel].parent, toModel];
+ var fn = conversions[graph[toModel].parent][toModel];
- let cur = graph[toModel].parent;
+ var cur = graph[toModel].parent;
while (graph[cur].parent) {
path.unshift(graph[cur].parent);
fn = link(conversions[graph[cur].parent][cur], fn);
@@ -76,16 +76,16 @@ function wrapConversion(toModel, graph) {
}
module.exports = function (fromModel) {
- const graph = deriveBFS(fromModel);
- const conversion = {};
+ var graph = deriveBFS(fromModel);
+ var conversion = {};
- const models = Object.keys(graph);
- for (let len = models.length, i = 0; i < len; i++) {
- const toModel = models[i];
- const node = graph[toModel];
+ var models = Object.keys(graph);
+ for (var len = models.length, i = 0; i < len; i++) {
+ var toModel = models[i];
+ var node = graph[toModel];
if (node.parent === null) {
- // No possible conversion, or this node is the source model.
+ // no possible conversion, or this node is the source model.
continue;
}
diff --git a/node_modules/chalk/node_modules/color-name/.eslintrc.json b/node_modules/color-name/.eslintrc.json
index c50c2504..c50c2504 100644
--- a/node_modules/chalk/node_modules/color-name/.eslintrc.json
+++ b/node_modules/color-name/.eslintrc.json
diff --git a/node_modules/chalk/node_modules/color-name/.npmignore b/node_modules/color-name/.npmignore
index f9f28164..f9f28164 100644
--- a/node_modules/chalk/node_modules/color-name/.npmignore
+++ b/node_modules/color-name/.npmignore
diff --git a/node_modules/color-name/package.json b/node_modules/color-name/package.json
index 782dd828..d061123e 100644
--- a/node_modules/color-name/package.json
+++ b/node_modules/color-name/package.json
@@ -1,28 +1,25 @@
-{
- "name": "color-name",
- "version": "1.1.4",
- "description": "A list of color names and its values",
- "main": "index.js",
- "files": [
- "index.js"
- ],
- "scripts": {
- "test": "node test.js"
- },
- "repository": {
- "type": "git",
- "url": "git@github.com:colorjs/color-name.git"
- },
- "keywords": [
- "color-name",
- "color",
- "color-keyword",
- "keyword"
- ],
- "author": "DY <dfcreative@gmail.com>",
- "license": "MIT",
- "bugs": {
- "url": "https://github.com/colorjs/color-name/issues"
- },
- "homepage": "https://github.com/colorjs/color-name"
-}
+{
+ "name": "color-name",
+ "version": "1.1.3",
+ "description": "A list of color names and its values",
+ "main": "index.js",
+ "scripts": {
+ "test": "node test.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git@github.com:dfcreative/color-name.git"
+ },
+ "keywords": [
+ "color-name",
+ "color",
+ "color-keyword",
+ "keyword"
+ ],
+ "author": "DY <dfcreative@gmail.com>",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/dfcreative/color-name/issues"
+ },
+ "homepage": "https://github.com/dfcreative/color-name"
+}
diff --git a/node_modules/chalk/node_modules/color-name/test.js b/node_modules/color-name/test.js
index 6e6bf30b..6e6bf30b 100644
--- a/node_modules/chalk/node_modules/color-name/test.js
+++ b/node_modules/color-name/test.js
diff --git a/node_modules/commander/CHANGELOG.md b/node_modules/commander/CHANGELOG.md
index 0b55881b..f00cb2b5 100644
--- a/node_modules/commander/CHANGELOG.md
+++ b/node_modules/commander/CHANGELOG.md
@@ -6,435 +6,431 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). (Format adopted after v3.0.0.)
<!-- markdownlint-disable MD024 -->
-<!-- markdownlint-disable MD004 -->
-## [7.2.0] (2021-03-26)
+## [4.1.1] (2020-02-02)
-### Added
-
-- TypeScript typing for `parent` property on `Command` ([#1475])
-- TypeScript typing for `.attributeName()` on `Option` ([#1483])
-- support information in package ([#1477])
-
-### Changed
+### Fixed
-- improvements to error messages, README, and tests
-- update dependencies
+* TypeScript definition for `.action()` should include Promise for async ([#1157])
-## [7.1.0] (2021-02-15)
+## [4.1.0] (2020-01-06)
### Added
-- support for named imports from ECMAScript modules ([#1440])
-- add `.cjs` to list of expected script file extensions ([#1449])
-- allow using option choices and variadic together ([#1454])
+* two routines to change how option values are handled, and eliminate name clashes with command properties ([#933] [#1102])
+ * see storeOptionsAsProperties and passCommandToAction in README
+* `.parseAsync` to use instead of `.parse` if supply async action handlers ([#806] [#1118])
### Fixed
-- replace use of deprecated `process.mainModule` ([#1448])
-- regression for legacy `command('*')` and call when command line includes options ([#1464])
-- regression for `on('command:*', ...)` and call when command line includes unknown options ([#1464])
-- display best error for combination of unknown command and unknown option (i.e. unknown command) ([#1464])
+* Remove trailing blanks from wrapped help text ([#1096])
### Changed
-- make TypeScript typings tests stricter ([#1453])
-- improvements to README and tests
+* update dependencies
+* extend security coverage for Commander 2.x to 2020-02-03
+* improvements to README
+* improvements to TypeScript definition documentation
+* move old versions out of main CHANGELOG
+* removed explicit use of `ts-node` in tests
+
+## [4.0.1] (2019-11-12)
+
+### Fixed
+
+* display help when requested, even if there are missing required options ([#1091])
-## [7.0.0] (2021-01-15)
+## [4.0.0] (2019-11-02)
### Added
-- `.enablePositionalOptions()` to let program and subcommand reuse same option ([#1427])
-- `.passThroughOptions()` to pass options through to other programs without needing `--` ([#1427])
-- `.allowExcessArguments(false)` to show an error message if there are too many command-arguments on command line for the action handler ([#1409])
-- `.configureOutput()` to modify use of stdout and stderr or customise display of errors ([#1387])
-- use `.addHelpText()` to add text before or after the built-in help, for just current command or also for all subcommands ([#1296])
-- enhance Option class ([#1331])
- - allow hiding options from help
- - allow restricting option arguments to a list of choices
- - allow setting how default value is shown in help
-- `.createOption()` to support subclassing of automatically created options (like `.createCommand()`) ([#1380])
-- refactor the code generating the help into a separate public Help class ([#1365])
- - support sorting subcommands and options in help
- - support specifying wrap width (columns)
- - allow subclassing Help class
- - allow configuring Help class without subclassing
+* automatically wrap and indent help descriptions for options and commands ([#1051])
+* `.exitOverride()` allows override of calls to `process.exit` for additional error handling and to keep program running ([#1040])
+* support for declaring required options with `.requiredOptions()` ([#1071])
+* GitHub Actions support ([#1027])
+* translation links in README
### Changed
-- *Breaking:* options are stored safely by default, not as properties on the command ([#1409])
- - this especially affects accessing options on program, use `program.opts()`
- - revert behaviour with `.storeOptionsAsProperties()`
-- *Breaking:* action handlers are passed options and command separately ([#1409])
-- deprecated callback parameter to `.help()` and `.outputHelp()` (removed from README) ([#1296])
-- *Breaking:* errors now displayed using `process.stderr.write()` instead of `console.error()`
-- deprecate `.on('--help')` (removed from README) ([#1296])
-- initialise the command description to empty string (previously undefined) ([#1365])
-- document and annotate deprecated routines ([#1349])
+* dev: switch tests from Sinon+Should to Jest with major rewrite of tests ([#1035])
+* call default subcommand even when there are unknown options ([#1047])
+* *Breaking* Commander is only officially supported on Node 8 and above, and requires Node 6 ([#1053])
### Fixed
-- wrapping bugs in help ([#1365])
- - first line of command description was wrapping two characters early
- - pad width calculation was not including help option and help command
- - pad width calculation was including hidden options and commands
-- improve backwards compatibility for custom command event listeners ([#1403])
-
-### Deleted
-
-- *Breaking:* `.passCommandToAction()` ([#1409])
- - no longer needed as action handler is passed options and command
-- *Breaking:* "extra arguments" parameter to action handler ([#1409])
- - if being used to detect excess arguments, there is now an error available by setting `.allowExcessArguments(false)`
+* *Breaking* keep command object out of program.args when action handler called ([#1048])
+ * also, action handler now passed array of unknown arguments
+* complain about unknown options when program argument supplied and action handler ([#1049])
+ * this changes parameters to `command:*` event to include unknown arguments
+* removed deprecated `customFds` option from call to `child_process.spawn` ([#1052])
+* rework TypeScript declarations to bring all types into imported namespace ([#1081])
### Migration Tips
-The biggest change is the parsed option values. Previously the options were stored by default as properties on the command object, and now the options are stored separately.
-
-If you wish to restore the old behaviour and get running quickly you can call `.storeOptionsAsProperties()`.
-To allow you to move to the new code patterns incrementally, the action handler will be passed the command _twice_,
-to match the new "options" and "command" parameters (see below).
+#### Testing for no arguments
-**program options**
-
-Use the `.opts()` method to access the options. This is available on any command but is used most with the program.
+If you were previously using code like:
```js
-program.option('-d, --debug');
-program.parse();
-// Old code before Commander 7
-if (program.debug) console.log(`Program name is ${program.name()}`);
+if (!program.args.length) ...
```
+a partial replacement is:
+
```js
-// New code
-const options = program.opts();
-if (options.debug) console.log(`Program name is ${program.name()}`);
+if (program.rawArgs.length < 3) ...
```
-**action handler**
+## [4.0.0-1] Prerelease (2019-10-08)
-The action handler gets passed a parameter for each command-argument you declared. Previously by default the next parameter was the command object with the options as properties. Now the next two parameters are instead the options and the command. If you
-only accessed the options there may be no code changes required.
+(Released in 4.0.0)
-```js
-program
- .command('compress <filename>')
- .option('-t, --trace')
- // Old code before Commander 7
- .action((filename, cmd)) => {
- if (cmd.trace) console.log(`Command name is ${cmd.name()}`);
- });
-```
+## [4.0.0-0] Prerelease (2019-10-01)
-```js
- // New code
- .action((filename, options, command)) => {
- if (options.trace) console.log(`Command name is ${command.name()}`);
- });
-```
+(Released in 4.0.0)
-If you already set `.storeOptionsAsProperties(false)` you may still need to adjust your code.
+## [2.20.1] (2019-09-29)
-```js
-program
- .command('compress <filename>')
- .storeOptionsAsProperties(false)
- .option('-t, --trace')
- // Old code before Commander 7
- .action((filename, command)) => {
- if (command.opts().trace) console.log(`Command name is ${command.name()}`);
- });
-```
+### Fixed
-```js
- // New code
- .action((filename, options, command)) => {
- if (command.opts().trace) console.log(`Command name is ${command.name()}`);
- });
-```
+* Improve tracking of executable subcommands.
-## [7.0.0-2] (2020-12-14)
+### Changed
-(Released in 7.0.0)
+* update development dependencies
-## [7.0.0-1] (2020-11-21)
+## [3.0.2] (2019-09-27)
-(Released in 7.0.0)
+### Fixed
-## [7.0.0-0] (2020-10-25)
+* Improve tracking of executable subcommands.
-(Released in 7.0.0)
+### Changed
-## [6.2.1] (2020-12-13)
+* update development dependencies
-### Fixed
+## [3.0.1] (2019-08-30)
-- some tests failed if directory path included a space ([1390])
+### Added
-## [6.2.0] (2020-10-25)
+* .name and .usage to README ([#1010])
+* Table of Contents to README ([#1010])
+* TypeScript definition for `executableFile` in CommandOptions ([#1028])
-### Added
+### Changed
+
+* consistently use `const` rather than `var` in README ([#1026])
-- added 'tsx' file extension for stand-alone executable subcommands ([#1368])
-- documented second parameter to `.description()` to describe command arguments ([#1353])
-- documentation of special cases with options taking varying numbers of option-arguments ([#1332])
-- documentation for terminology ([#1361])
-
### Fixed
-- add missing TypeScript definition for `.addHelpCommand()' ([#1375])
-- removed blank line after "Arguments:" in help, to match "Options:" and "Commands:" ([#1360])
+* help for sub commands with custom executableFile ([#1018])
+
+## [3.0.0] / 2019-08-08
+
+* Add option to specify executable file name ([#999])
+ * e.g. `.command('clone', 'clone description', { executableFile: 'myClone' })`
+* Change docs for `.command` to contrast action handler vs git-style executable. ([#938] [#990])
+* **Breaking** Change TypeScript to use overloaded function for `.command`. ([#938] [#990])
+* Change to use straight quotes around strings in error messages (like 'this' instead of `this') ([#915])
+* Add TypeScript "reference types" for node ([#974])
+* Add support for hyphen as an option argument in subcommands ([#697])
+* Add support for a short option flag and its value to be concatenated for action handler subcommands ([#599])
+ * e.g. `-p 80` can also be supplied as `-p80`
+* Add executable arguments to spawn in win32, for git-style executables ([#611])
+ * e.g. `node --harmony myCommand.js clone`
+* Add parent command as prefix of subcommand in help ([#980])
+* Add optional custom description to `.version` ([#963])
+ * e.g. `program.version('0.0.1', '-v, --vers', 'output the current version')`
+* Add `.helpOption(flags, description)` routine to customise help flags and description ([#963])
+ * e.g. `.helpOption('-e, --HELP', 'read more information')`
+* Fix behavior of --no-* options ([#795])
+ * can now define both `--foo` and `--no-foo`
+ * **Breaking** custom event listeners: `--no-foo` on cli now emits `option:no-foo` (previously `option:foo`)
+ * **Breaking** default value: defining `--no-foo` after defining `--foo` leaves the default value unchanged (previously set it to false)
+ * allow boolean default value, such as from environment ([#987])
+* Increment inspector port for spawned subcommands ([#991])
+ * e.g. `node --inspect myCommand.js clone`
-### Changed
+### Migration Tips
-- update dependencies
+The custom event for a negated option like `--no-foo` is `option:no-foo` (previously `option:foo`).
-## [6.1.0] (2020-08-28)
+```js
+program
+ .option('--no-foo')
+ .on('option:no-foo', () => {
+ console.log('removing foo');
+ });
+```
-### Added
+When using TypeScript, adding a command does not allow an explicit `undefined` for an unwanted executable description (e.g
+for a command with an action handler).
-- include URL to relevant section of README for error for potential conflict between Command properties and option values ([#1306])
-- `.combineFlagAndOptionalValue(false)` to ease upgrade path from older versions of Commander ([#1326])
-- allow disabling the built-in help option using `.helpOption(false)` ([#1325])
-- allow just some arguments in `argumentDescription` to `.description()` ([#1323])
+```js
+program
+ .command('action1', undefined, { noHelp: true }) // No longer valid
+ .command('action2', { noHelp: true }) // Correct
+```
-### Changed
+## 3.0.0-0 Prerelease / 2019-07-28
-- tidy async test and remove lint override ([#1312])
+(Released as 3.0.0)
-### Fixed
+## 2.20.0 / 2019-04-02
-- executable subcommand launching when script path not known ([#1322])
+* fix: resolve symbolic links completely when hunting for subcommands (#935)
+* Update index.d.ts (#930)
+* Update Readme.md (#924)
+* Remove --save option as it isn't required anymore (#918)
+* Add link to the license file (#900)
+* Added example of receiving args from options (#858)
+* Added missing semicolon (#882)
+* Add extension to .eslintrc (#876)
-## [6.0.0] (2020-07-21)
+## 2.19.0 / 2018-10-02
-### Added
+* Removed newline after Options and Commands headers (#864)
+* Bugfix - Error output (#862)
+* Fix to change default value to string (#856)
-- add support for variadic options ([#1250])
-- allow options to be added with just a short flag ([#1256])
- - *Breaking* the option property has same case as flag. e.g. flag `-n` accessed as `opts().n` (previously uppercase)
-- *Breaking* throw an error if there might be a clash between option name and a Command property, with advice on how to resolve ([#1275])
+## 2.18.0 / 2018-09-07
-### Fixed
+* Standardize help output (#853)
+* chmod 644 travis.yml (#851)
+* add support for execute typescript subcommand via ts-node (#849)
-- Options which contain -no- in the middle of the option flag should not be treated as negatable. ([#1301])
+## 2.17.1 / 2018-08-07
-## [6.0.0-0] (2020-06-20)
+* Fix bug in command emit (#844)
+
+## 2.17.0 / 2018-08-03
+
+* fixed newline output after help information (#833)
+* Fix to emit the action even without command (#778)
+* npm update (#823)
+
+## 2.16.0 / 2018-06-29
+
+* Remove Makefile and `test/run` (#821)
+* Make 'npm test' run on Windows (#820)
+* Add badge to display install size (#807)
+* chore: cache node_modules (#814)
+* chore: remove Node.js 4 (EOL), add Node.js 10 (#813)
+* fixed typo in readme (#812)
+* Fix types (#804)
+* Update eslint to resolve vulnerabilities in lodash (#799)
+* updated readme with custom event listeners. (#791)
+* fix tests (#794)
-(Released in 6.0.0)
+## 2.15.0 / 2018-03-07
-## [5.1.0] (2020-04-25)
+* Update downloads badge to point to graph of downloads over time instead of duplicating link to npm
+* Arguments description
-### Added
+## 2.14.1 / 2018-02-07
-- support for multiple command aliases, the first of which is shown in the auto-generated help ([#531], [#1236])
-- configuration support in `addCommand()` for `hidden` and `isDefault` ([#1232])
+* Fix typing of help function
-### Fixed
+## 2.14.0 / 2018-02-05
-- omit masked help flags from the displayed help ([#645], [#1247])
-- remove old short help flag when change help flags using `helpOption` ([#1248])
+* only register the option:version event once
+* Fixes issue #727: Passing empty string for option on command is set to undefined
+* enable eqeqeq rule
+* resolves #754 add linter configuration to project
+* resolves #560 respect custom name for version option
+* document how to override the version flag
+* document using options per command
-### Changed
+## 2.13.0 / 2018-01-09
-- remove use of `arguments` to improve auto-generated help in editors ([#1235])
-- rename `.command()` configuration `noHelp` to `hidden` (but not remove old support) ([#1232])
-- improvements to documentation
-- update dependencies
-- update tested versions of node
-- eliminate lint errors in TypeScript ([#1208])
+* Do not print default for --no-
+* remove trailing spaces in command help
+* Update CI's Node.js to LTS and latest version
+* typedefs: Command and Option types added to commander namespace
-## [5.0.0] (2020-03-14)
+## 2.12.2 / 2017-11-28
-### Added
+* fix: typings are not shipped
-* support for nested commands with action-handlers ([#1] [#764] [#1149])
-* `.addCommand()` for adding a separately configured command ([#764] [#1149])
-* allow a non-executable to be set as the default command ([#742] [#1149])
-* implicit help command when there are subcommands (previously only if executables) ([#1149])
-* customise implicit help command with `.addHelpCommand()` ([#1149])
-* display error message for unknown subcommand, by default ([#432] [#1088] [#1149])
-* display help for missing subcommand, by default ([#1088] [#1149])
-* combined short options as single argument may include boolean flags and value flag and value (e.g. `-a -b -p 80` can be written as `-abp80`) ([#1145])
-* `.parseOption()` includes short flag and long flag expansions ([#1145])
-* `.helpInformation()` returns help text as a string, previously a private routine ([#1169])
-* `.parse()` implicitly uses `process.argv` if arguments not specified ([#1172])
-* optionally specify where `.parse()` arguments "from", if not following node conventions ([#512] [#1172])
-* suggest help option along with unknown command error ([#1179])
-* TypeScript definition for `commands` property of `Command` ([#1184])
-* export `program` property ([#1195])
-* `createCommand` factory method to simplify subclassing ([#1191])
+## 2.12.1 / 2017-11-23
-### Fixed
+* Move @types/node to dev dependency
-* preserve argument order in subcommands ([#508] [#962] [#1138])
-* do not emit `command:*` for executable subcommands ([#809] [#1149])
-* action handler called whether or not there are non-option arguments ([#1062] [#1149])
-* combining option short flag and value in single argument now works for subcommands ([#1145])
-* only add implicit help command when it will not conflict with other uses of argument ([#1153] [#1149])
-* implicit help command works with command aliases ([#948] [#1149])
-* options are validated whether or not there is an action handler ([#1149])
+## 2.12.0 / 2017-11-22
-### Changed
+* add attributeName() method to Option objects
+* Documentation updated for options with --no prefix
+* typings: `outputHelp` takes a string as the first parameter
+* typings: use overloads
+* feat(typings): update to match js api
+* Print default value in option help
+* Fix translation error
+* Fail when using same command and alias (#491)
+* feat(typings): add help callback
+* fix bug when description is add after command with options (#662)
+* Format js code
+* Rename History.md to CHANGELOG.md (#668)
+* feat(typings): add typings to support TypeScript (#646)
+* use current node
-* *Breaking* `.args` contains command arguments with just recognised options removed ([#1032] [#1138])
-* *Breaking* display error if required argument for command is missing ([#995] [#1149])
-* tighten TypeScript definition of custom option processing function passed to `.option()` ([#1119])
-* *Breaking* `.allowUnknownOption()` ([#802] [#1138])
- * unknown options included in arguments passed to command action handler
- * unknown options included in `.args`
-* only recognised option short flags and long flags are expanded (e.g. `-ab` or `--foo=bar`) ([#1145])
-* *Breaking* `.parseOptions()` ([#1138])
- * `args` in returned result renamed `operands` and does not include anything after first unknown option
- * `unknown` in returned result has arguments after first unknown option including operands, not just options and values
-* *Breaking* `.on('command:*', callback)` and other command events passed (changed) results from `.parseOptions`, i.e. operands and unknown ([#1138])
-* refactor Option from prototype to class ([#1133])
-* refactor Command from prototype to class ([#1159])
-* changes to error handling ([#1165])
- * throw for author error, not just display message
- * preflight for variadic error
- * add tips to missing subcommand executable
-* TypeScript fluent return types changed to be more subclass friendly, return `this` rather than `Command` ([#1180])
-* `.parseAsync` returns `Promise<this>` to be consistent with `.parse()` ([#1180])
-* update dependencies
+## 2.11.0 / 2017-07-03
-### Removed
+* Fix help section order and padding (#652)
+* feature: support for signals to subcommands (#632)
+* Fixed #37, --help should not display first (#447)
+* Fix translation errors. (#570)
+* Add package-lock.json
+* Remove engines
+* Upgrade package version
+* Prefix events to prevent conflicts between commands and options (#494)
+* Removing dependency on graceful-readlink
+* Support setting name in #name function and make it chainable
+* Add .vscode directory to .gitignore (Visual Studio Code metadata)
+* Updated link to ruby commander in readme files
-* removed EventEmitter from TypeScript definition for Command, eliminating implicit peer dependency on `@types/node` ([#1146])
-* removed private function `normalize` (the functionality has been integrated into `parseOptions`) ([#1145])
-* `parseExpectedArgs` is now private ([#1149])
+## 2.10.0 / 2017-06-19
-### Migration Tips
+* Update .travis.yml. drop support for older node.js versions.
+* Fix require arguments in README.md
+* On SemVer you do not start from 0.0.1
+* Add missing semi colon in readme
+* Add save param to npm install
+* node v6 travis test
+* Update Readme_zh-CN.md
+* Allow literal '--' to be passed-through as an argument
+* Test subcommand alias help
+* link build badge to master branch
+* Support the alias of Git style sub-command
+* added keyword commander for better search result on npm
+* Fix Sub-Subcommands
+* test node.js stable
+* Fixes TypeError when a command has an option called `--description`
+* Update README.md to make it beginner friendly and elaborate on the difference between angled and square brackets.
+* Add chinese Readme file
+
+## 2.9.0 / 2015-10-13
+
+* Add option `isDefault` to set default subcommand #415 @Qix-
+* Add callback to allow filtering or post-processing of help text #434 @djulien
+* Fix `undefined` text in help information close #414 #416 @zhiyelee
+
+## 2.8.1 / 2015-04-22
+
+* Back out `support multiline description` Close #396 #397
+
+## 2.8.0 / 2015-04-07
+
+* Add `process.execArg` support, execution args like `--harmony` will be passed to sub-commands #387 @DigitalIO @zhiyelee
+* Fix bug in Git-style sub-commands #372 @zhiyelee
+* Allow commands to be hidden from help #383 @tonylukasavage
+* When git-style sub-commands are in use, yet none are called, display help #382 @claylo
+* Add ability to specify arguments syntax for top-level command #258 @rrthomas
+* Support multiline descriptions #208 @zxqfox
+
+## 2.7.1 / 2015-03-11
+
+* Revert #347 (fix collisions when option and first arg have same name) which causes a bug in #367.
+
+## 2.7.0 / 2015-03-09
+
+* Fix git-style bug when installed globally. Close #335 #349 @zhiyelee
+* Fix collisions when option and first arg have same name. Close #346 #347 @tonylukasavage
+* Add support for camelCase on `opts()`. Close #353 @nkzawa
+* Add node.js 0.12 and io.js to travis.yml
+* Allow RegEx options. #337 @palanik
+* Fixes exit code when sub-command failing. Close #260 #332 @pirelenito
+* git-style `bin` files in $PATH make sense. Close #196 #327 @zhiyelee
+
+## 2.6.0 / 2014-12-30
+
+* added `Command#allowUnknownOption` method. Close #138 #318 @doozr @zhiyelee
+* Add application description to the help msg. Close #112 @dalssoft
-If you use `.on('command:*')` or more complicated tests to detect an unrecognised subcommand, you may be able to delete the code and rely on the default behaviour.
+## 2.5.1 / 2014-12-15
-If you use `program.args` or more complicated tests to detect a missing subcommand, you may be able to delete the code and rely on the default behaviour.
+* fixed two bugs incurred by variadic arguments. Close #291 @Quentin01 #302 @zhiyelee
-If you use `.command('*')` to add a default command, you may be be able to switch to `isDefault:true` with a named command.
+## 2.5.0 / 2014-10-24
-If you want to continue combining short options with optional values as though they were boolean flags, set `combineFlagAndOptionalValue(false)`
-to expand `-fb` to `-f -b` rather than `-f b`.
+* add support for variadic arguments. Closes #277 @whitlockjc
-## [5.0.0-4] (2020-03-03)
+## 2.4.0 / 2014-10-17
-(Released in 5.0.0)
+* fixed a bug on executing the coercion function of subcommands option. Closes #270
+* added `Command.prototype.name` to retrieve command name. Closes #264 #266 @tonylukasavage
+* added `Command.prototype.opts` to retrieve all the options as a simple object of key-value pairs. Closes #262 @tonylukasavage
+* fixed a bug on subcommand name. Closes #248 @jonathandelgado
+* fixed function normalize doesn’t honor option terminator. Closes #216 @abbr
-## [5.0.0-3] (2020-02-20)
+## 2.3.0 / 2014-07-16
-(Released in 5.0.0)
+* add command alias'. Closes PR #210
+* fix: Typos. Closes #99
+* fix: Unused fs module. Closes #217
-## [5.0.0-2] (2020-02-10)
+## 2.2.0 / 2014-03-29
-(Released in 5.0.0)
+* add passing of previous option value
+* fix: support subcommands on windows. Closes #142
+* Now the defaultValue passed as the second argument of the coercion function.
-## [5.0.0-1] (2020-02-08)
+## 2.1.0 / 2013-11-21
-(Released in 5.0.0)
+* add: allow cflag style option params, unit test, fixes #174
-## [5.0.0-0] (2020-02-02)
+## 2.0.0 / 2013-07-18
-(Released in 5.0.0)
+* remove input methods (.prompt, .confirm, etc)
## Older versions
-* [4.x](./changelogs/CHANGELOG-4.md)
-* [3.x](./changelogs/CHANGELOG-3.md)
-* [2.x](./changelogs/CHANGELOG-2.md)
* [1.x](./changelogs/CHANGELOG-1.md)
* [0.x](./changelogs/CHANGELOG-0.md)
-[#1]: https://github.com/tj/commander.js/issues/1
-[#432]: https://github.com/tj/commander.js/issues/432
-[#508]: https://github.com/tj/commander.js/issues/508
-[#512]: https://github.com/tj/commander.js/issues/512
-[#531]: https://github.com/tj/commander.js/issues/531
-[#645]: https://github.com/tj/commander.js/issues/645
-[#742]: https://github.com/tj/commander.js/issues/742
-[#764]: https://github.com/tj/commander.js/issues/764
-[#802]: https://github.com/tj/commander.js/issues/802
-[#809]: https://github.com/tj/commander.js/issues/809
-[#948]: https://github.com/tj/commander.js/issues/948
-[#962]: https://github.com/tj/commander.js/issues/962
-[#995]: https://github.com/tj/commander.js/issues/995
-[#1032]: https://github.com/tj/commander.js/issues/1032
-[#1062]: https://github.com/tj/commander.js/pull/1062
-[#1088]: https://github.com/tj/commander.js/issues/1088
-[#1119]: https://github.com/tj/commander.js/pull/1119
-[#1133]: https://github.com/tj/commander.js/pull/1133
-[#1138]: https://github.com/tj/commander.js/pull/1138
-[#1145]: https://github.com/tj/commander.js/pull/1145
-[#1146]: https://github.com/tj/commander.js/pull/1146
-[#1149]: https://github.com/tj/commander.js/pull/1149
-[#1153]: https://github.com/tj/commander.js/issues/1153
-[#1159]: https://github.com/tj/commander.js/pull/1159
-[#1165]: https://github.com/tj/commander.js/pull/1165
-[#1169]: https://github.com/tj/commander.js/pull/1169
-[#1172]: https://github.com/tj/commander.js/pull/1172
-[#1179]: https://github.com/tj/commander.js/pull/1179
-[#1180]: https://github.com/tj/commander.js/pull/1180
-[#1184]: https://github.com/tj/commander.js/pull/1184
-[#1191]: https://github.com/tj/commander.js/pull/1191
-[#1195]: https://github.com/tj/commander.js/pull/1195
-[#1208]: https://github.com/tj/commander.js/pull/1208
-[#1232]: https://github.com/tj/commander.js/pull/1232
-[#1235]: https://github.com/tj/commander.js/pull/1235
-[#1236]: https://github.com/tj/commander.js/pull/1236
-[#1247]: https://github.com/tj/commander.js/pull/1247
-[#1248]: https://github.com/tj/commander.js/pull/1248
-[#1250]: https://github.com/tj/commander.js/pull/1250
-[#1256]: https://github.com/tj/commander.js/pull/1256
-[#1275]: https://github.com/tj/commander.js/pull/1275
-[#1296]: https://github.com/tj/commander.js/pull/1296
-[#1301]: https://github.com/tj/commander.js/issues/1301
-[#1306]: https://github.com/tj/commander.js/pull/1306
-[#1312]: https://github.com/tj/commander.js/pull/1312
-[#1322]: https://github.com/tj/commander.js/pull/1322
-[#1323]: https://github.com/tj/commander.js/pull/1323
-[#1325]: https://github.com/tj/commander.js/pull/1325
-[#1326]: https://github.com/tj/commander.js/pull/1326
-[#1331]: https://github.com/tj/commander.js/pull/1331
-[#1332]: https://github.com/tj/commander.js/pull/1332
-[#1349]: https://github.com/tj/commander.js/pull/1349
-[#1353]: https://github.com/tj/commander.js/pull/1353
-[#1360]: https://github.com/tj/commander.js/pull/1360
-[#1361]: https://github.com/tj/commander.js/pull/1361
-[#1365]: https://github.com/tj/commander.js/pull/1365
-[#1368]: https://github.com/tj/commander.js/pull/1368
-[#1375]: https://github.com/tj/commander.js/pull/1375
-[#1380]: https://github.com/tj/commander.js/pull/1380
-[#1387]: https://github.com/tj/commander.js/pull/1387
-[#1390]: https://github.com/tj/commander.js/pull/1390
-[#1403]: https://github.com/tj/commander.js/pull/1403
-[#1409]: https://github.com/tj/commander.js/pull/1409
-[#1427]: https://github.com/tj/commander.js/pull/1427
-[#1440]: https://github.com/tj/commander.js/pull/1440
-[#1448]: https://github.com/tj/commander.js/pull/1448
-[#1449]: https://github.com/tj/commander.js/pull/1449
-[#1453]: https://github.com/tj/commander.js/pull/1453
-[#1454]: https://github.com/tj/commander.js/pull/1454
-[#1464]: https://github.com/tj/commander.js/pull/1464
-[#1475]: https://github.com/tj/commander.js/pull/1475
-[#1477]: https://github.com/tj/commander.js/pull/1477
-[#1483]: https://github.com/tj/commander.js/pull/1483
+[#599]: https://github.com/tj/commander.js/issues/599
+[#611]: https://github.com/tj/commander.js/issues/611
+[#697]: https://github.com/tj/commander.js/issues/697
+[#795]: https://github.com/tj/commander.js/issues/795
+[#806]: https://github.com/tj/commander.js/issues/806
+[#915]: https://github.com/tj/commander.js/issues/915
+[#938]: https://github.com/tj/commander.js/issues/938
+[#963]: https://github.com/tj/commander.js/issues/963
+[#974]: https://github.com/tj/commander.js/issues/974
+[#980]: https://github.com/tj/commander.js/issues/980
+[#987]: https://github.com/tj/commander.js/issues/987
+[#990]: https://github.com/tj/commander.js/issues/990
+[#991]: https://github.com/tj/commander.js/issues/991
+[#993]: https://github.com/tj/commander.js/issues/993
+[#999]: https://github.com/tj/commander.js/issues/999
+[#1010]: https://github.com/tj/commander.js/pull/1010
+[#1018]: https://github.com/tj/commander.js/pull/1018
+[#1026]: https://github.com/tj/commander.js/pull/1026
+[#1027]: https://github.com/tj/commander.js/pull/1027
+[#1028]: https://github.com/tj/commander.js/pull/1028
+[#1035]: https://github.com/tj/commander.js/pull/1035
+[#1040]: https://github.com/tj/commander.js/pull/1040
+[#1047]: https://github.com/tj/commander.js/pull/1047
+[#1048]: https://github.com/tj/commander.js/pull/1048
+[#1049]: https://github.com/tj/commander.js/pull/1049
+[#1051]: https://github.com/tj/commander.js/pull/1051
+[#1052]: https://github.com/tj/commander.js/pull/1052
+[#1053]: https://github.com/tj/commander.js/pull/1053
+[#1071]: https://github.com/tj/commander.js/pull/1071
+[#1081]: https://github.com/tj/commander.js/pull/1081
+[#1091]: https://github.com/tj/commander.js/pull/1091
+[#1096]: https://github.com/tj/commander.js/pull/1096
+[#1102]: https://github.com/tj/commander.js/pull/1102
+[#1118]: https://github.com/tj/commander.js/pull/1118
+[#1157]: https://github.com/tj/commander.js/pull/1157
[Unreleased]: https://github.com/tj/commander.js/compare/master...develop
-[7.2.0]: https://github.com/tj/commander.js/compare/v7.1.0...v7.2.0
-[7.1.0]: https://github.com/tj/commander.js/compare/v7.0.0...v7.1.0
-[7.0.0]: https://github.com/tj/commander.js/compare/v6.2.1...v7.0.0
-[7.0.0-2]: https://github.com/tj/commander.js/compare/v7.0.0-1...v7.0.0-2
-[7.0.0-1]: https://github.com/tj/commander.js/compare/v7.0.0-0...v7.0.0-1
-[7.0.0-0]: https://github.com/tj/commander.js/compare/v6.2.0...v7.0.0-0
-[6.2.1]: https://github.com/tj/commander.js/compare/v6.2.0..v6.2.1
-[6.2.0]: https://github.com/tj/commander.js/compare/v6.1.0..v6.2.0
-[6.1.0]: https://github.com/tj/commander.js/compare/v6.0.0..v6.1.0
-[6.0.0]: https://github.com/tj/commander.js/compare/v5.1.0..v6.0.0
-[6.0.0-0]: https://github.com/tj/commander.js/compare/v5.1.0..v6.0.0-0
-[5.1.0]: https://github.com/tj/commander.js/compare/v5.0.0..v5.1.0
-[5.0.0]: https://github.com/tj/commander.js/compare/v4.1.1..v5.0.0
-[5.0.0-4]: https://github.com/tj/commander.js/compare/v5.0.0-3..v5.0.0-4
-[5.0.0-3]: https://github.com/tj/commander.js/compare/v5.0.0-2..v5.0.0-3
-[5.0.0-2]: https://github.com/tj/commander.js/compare/v5.0.0-1..v5.0.0-2
-[5.0.0-1]: https://github.com/tj/commander.js/compare/v5.0.0-0..v5.0.0-1
-[5.0.0-0]: https://github.com/tj/commander.js/compare/v4.1.1..v5.0.0-0
+[4.1.1]: https://github.com/tj/commander.js/compare/v4.0.0..v4.1.1
+[4.1.0]: https://github.com/tj/commander.js/compare/v4.0.1..v4.1.0
+[4.0.1]: https://github.com/tj/commander.js/compare/v4.0.0..v4.0.1
+[4.0.0]: https://github.com/tj/commander.js/compare/v3.0.2..v4.0.0
+[4.0.0-1]: https://github.com/tj/commander.js/compare/v4.0.0-0..v4.0.0-1
+[4.0.0-0]: https://github.com/tj/commander.js/compare/v3.0.2...v4.0.0-0
+[3.0.2]: https://github.com/tj/commander.js/compare/v3.0.1...v3.0.2
+[3.0.1]: https://github.com/tj/commander.js/compare/v3.0.0...v3.0.1
+[3.0.0]: https://github.com/tj/commander.js/compare/v2.20.1...v3.0.0
+[2.20.1]: https://github.com/tj/commander.js/compare/v2.20.0...v2.20.1
diff --git a/node_modules/commander/Readme.md b/node_modules/commander/Readme.md
index d2a88a7b..aa4f42b5 100644
--- a/node_modules/commander/Readme.md
+++ b/node_modules/commander/Readme.md
@@ -1,54 +1,46 @@
# Commander.js
-[![Build Status](https://github.com/tj/commander.js/workflows/build/badge.svg)](https://github.com/tj/commander.js/actions?query=workflow%3A%22build%22)
+[![Build Status](https://api.travis-ci.org/tj/commander.js.svg?branch=master)](http://travis-ci.org/tj/commander.js)
[![NPM Version](http://img.shields.io/npm/v/commander.svg?style=flat)](https://www.npmjs.org/package/commander)
[![NPM Downloads](https://img.shields.io/npm/dm/commander.svg?style=flat)](https://npmcharts.com/compare/commander?minimal=true)
[![Install Size](https://packagephobia.now.sh/badge?p=commander)](https://packagephobia.now.sh/result?p=commander)
-The complete solution for [node.js](http://nodejs.org) command-line interfaces.
+The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/commander-rb/commander).
Read this in other languages: English | [简体中文](./Readme_zh-CN.md)
- [Commander.js](#commanderjs)
- [Installation](#installation)
- - [Declaring _program_ variable](#declaring-program-variable)
+ - [Declaring program variable](#declaring-program-variable)
- [Options](#options)
- [Common option types, boolean and value](#common-option-types-boolean-and-value)
- [Default option value](#default-option-value)
- - [Other option types, negatable boolean and boolean|value](#other-option-types-negatable-boolean-and-booleanvalue)
+ - [Other option types, negatable boolean and flag|value](#other-option-types-negatable-boolean-and-flagvalue)
+ - [Custom option processing](#custom-option-processing)
- [Required option](#required-option)
- - [Variadic option](#variadic-option)
- [Version option](#version-option)
- - [More configuration](#more-configuration)
- - [Custom option processing](#custom-option-processing)
- [Commands](#commands)
- [Specify the argument syntax](#specify-the-argument-syntax)
- - [Action handler](#action-handler)
- - [Stand-alone executable (sub)commands](#stand-alone-executable-subcommands)
- - [Automated help](#automated-help)
+ - [Action handler (sub)commands](#action-handler-subcommands)
+ - [Git-style executable (sub)commands](#git-style-executable-subcommands)
+ - [Automated --help](#automated---help)
- [Custom help](#custom-help)
- - [Display help from code](#display-help-from-code)
- [.usage and .name](#usage-and-name)
+ - [.outputHelp(cb)](#outputhelpcb)
- [.helpOption(flags, description)](#helpoptionflags-description)
- - [.addHelpCommand()](#addhelpcommand)
- - [More configuration](#more-configuration-1)
+ - [.help(cb)](#helpcb)
- [Custom event listeners](#custom-event-listeners)
- [Bits and pieces](#bits-and-pieces)
- - [.parse() and .parseAsync()](#parse-and-parseasync)
- - [Parsing Configuration](#parsing-configuration)
- - [Legacy options as properties](#legacy-options-as-properties)
+ - [Avoiding option name clashes](#avoiding-option-name-clashes)
- [TypeScript](#typescript)
- - [createCommand()](#createcommand)
- - [Node options such as `--harmony`](#node-options-such-as---harmony)
- - [Debugging stand-alone executable subcommands](#debugging-stand-alone-executable-subcommands)
- - [Override exit and output handling](#override-exit-and-output-handling)
- - [Additional documentation](#additional-documentation)
+ - [Node options such as --harmony](#node-options-such-as---harmony)
+ - [Node debugging](#node-debugging)
+ - [Override exit handling](#override-exit-handling)
- [Examples](#examples)
+ - [License](#license)
- [Support](#support)
- [Commander for enterprise](#commander-for-enterprise)
-For information about terms used in this document see: [terminology](./docs/terminology.md)
-
## Installation
```bash
@@ -61,56 +53,33 @@ Commander exports a global object which is convenient for quick programs.
This is used in the examples in this README for brevity.
```js
-const { program } = require('commander');
+const program = require('commander');
program.version('0.0.1');
```
For larger programs which may use commander in multiple ways, including unit testing, it is better to create a local Command object to use.
-```js
-const { Command } = require('commander');
-const program = new Command();
-program.version('0.0.1');
-```
-
-For named imports in ECMAScript modules, import from `commander/esm.mjs`.
-
-```js
-// index.mjs
-import { Command } from 'commander/esm.mjs';
-const program = new Command();
-```
-
-And in TypeScript:
-
-```ts
-// index.ts
-import { Command } from 'commander';
-const program = new Command();
-```
-
+ ```js
+ const commander = require('commander');
+ const program = new commander.Command();
+ program.version('0.0.1');
+ ```
## Options
-Options are defined with the `.option()` method, also serving as documentation for the options. Each option can have a short flag (single character) and a long name, separated by a comma or space or vertical bar ('|').
-
-The parsed options can be accessed by calling `.opts()` on a `Command` object, and are passed to the action handler. Multi-word options such as "--template-engine" are camel-cased, becoming `program.opts().templateEngine` etc.
+Options are defined with the `.option()` method, also serving as documentation for the options. Each option can have a short flag (single character) and a long name, separated by a comma or space.
-Multiple short flags may optionally be combined in a single argument following the dash: boolean flags, followed by a single option taking a value (possibly followed by the value).
-For example `-a -b -p 80` may be written as `-ab -p80` or even `-abp80`.
+The options can be accessed as properties on the Command object. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc. Multiple short flags may be combined as a single arg, for example `-abc` is equivalent to `-a -b -c`.
-You can use `--` to indicate the end of the options, and any remaining arguments will be used without being interpreted.
-
-By default options on the command line are not positional, and can be specified before or after other arguments.
+See also optional new behaviour to [avoid name clashes](#avoiding-option-name-clashes).
### Common option types, boolean and value
-The two most used option types are a boolean option, and an option which takes its value
-from the following argument (declared with angle brackets like `--expect <value>`). Both are `undefined` unless specified on command line.
-
-Example file: [options-common.js](./examples/options-common.js)
+The two most used option types are a boolean flag, and an option which takes a value (declared using angle brackets). Both are `undefined` unless specified on command line.
```js
+const program = require('commander');
+
program
.option('-d, --debug', 'output extra debugging')
.option('-s, --small', 'small pizza size')
@@ -118,11 +87,10 @@ program
program.parse(process.argv);
-const options = program.opts();
-if (options.debug) console.log(options);
+if (program.debug) console.log(program.opts());
console.log('pizza details:');
-if (options.small) console.log('- small pizza size');
-if (options.pizzaType) console.log(`- ${options.pizzaType}`);
+if (program.small) console.log('- small pizza size');
+if (program.pizzaType) console.log(`- ${program.pizzaType}`);
```
```bash
@@ -141,21 +109,21 @@ pizza details:
- cheese
```
-`program.parse(arguments)` processes the arguments, leaving any args not consumed by the program options in the `program.args` array. The parameter is optional and defaults to `process.argv`.
+`program.parse(arguments)` processes the arguments, leaving any args not consumed by the options as the `program.args` array.
### Default option value
You can specify a default value for an option which takes a value.
-Example file: [options-defaults.js](./examples/options-defaults.js)
-
```js
+const program = require('commander');
+
program
.option('-c, --cheese <type>', 'add the specified type of cheese', 'blue');
-program.parse();
+program.parse(process.argv);
-console.log(`cheese: ${program.opts().cheese}`);
+console.log(`cheese: ${program.cheese}`);
```
```bash
@@ -165,26 +133,25 @@ $ pizza-options --cheese stilton
cheese: stilton
```
-### Other option types, negatable boolean and boolean|value
+### Other option types, negatable boolean and flag|value
-You can define a boolean option long name with a leading `no-` to set the option value to false when used.
+You can specify a boolean option long name with a leading `no-` to set the option value to false when used.
Defined alone this also makes the option true by default.
If you define `--foo` first, adding `--no-foo` does not change the default value from what it would
-otherwise be. You can specify a default boolean value for a boolean option and it can be overridden on command line.
-
-Example file: [options-negatable.js](./examples/options-negatable.js)
+otherwise be. You can specify a default boolean value for a boolean flag and it can be overridden on command line.
```js
+const program = require('commander');
+
program
.option('--no-sauce', 'Remove sauce')
.option('--cheese <flavour>', 'cheese flavour', 'mozzarella')
.option('--no-cheese', 'plain with no cheese')
- .parse();
+ .parse(process.argv);
-const options = program.opts();
-const sauceStr = options.sauce ? 'sauce' : 'no sauce';
-const cheeseStr = (options.cheese === false) ? 'no cheese' : `${options.cheese} cheese`;
+const sauceStr = program.sauce ? 'sauce' : 'no sauce';
+const cheeseStr = (program.cheese === false) ? 'no cheese' : `${program.cheese} cheese`;
console.log(`You ordered a pizza with ${sauceStr} and ${cheeseStr}`);
```
@@ -199,21 +166,19 @@ $ pizza-options --no-sauce --no-cheese
You ordered a pizza with no sauce and no cheese
```
-You can specify an option which may be used as a boolean option but may optionally take an option-argument
-(declared with square brackets like `--optional [value]`).
-
-Example file: [options-boolean-or-value.js](./examples/options-boolean-or-value.js)
+You can specify an option which functions as a flag but may also take a value (declared using square brackets).
```js
+const program = require('commander');
+
program
.option('-c, --cheese [type]', 'Add cheese with optional type');
program.parse(process.argv);
-const options = program.opts();
-if (options.cheese === undefined) console.log('no cheese');
-else if (options.cheese === true) console.log('add cheese');
-else console.log(`add cheese type ${options.cheese}`);
+if (program.cheese === undefined) console.log('no cheese');
+else if (program.cheese === true) console.log('add cheese');
+else console.log(`add cheese type ${program.cheese}`);
```
```bash
@@ -225,126 +190,21 @@ $ pizza-options --cheese mozzarella
add cheese type mozzarella
```
-For information about possible ambiguous cases, see [options taking varying arguments](./docs/options-taking-varying-arguments.md).
-
-### Required option
-
-You may specify a required (mandatory) option using `.requiredOption`. The option must have a value after parsing, usually specified on the command line, or perhaps from a default value (say from environment). The method is otherwise the same as `.option` in format, taking flags and description, and optional default value or custom processing.
-
-Example file: [options-required.js](./examples/options-required.js)
-
-```js
-program
- .requiredOption('-c, --cheese <type>', 'pizza must have cheese');
-
-program.parse();
-```
-
-```bash
-$ pizza
-error: required option '-c, --cheese <type>' not specified
-```
-
-### Variadic option
-
-You may make an option variadic by appending `...` to the value placeholder when declaring the option. On the command line you
-can then specify multiple option-arguments, and the parsed option value will be an array. The extra arguments
-are read until the first argument starting with a dash. The special argument `--` stops option processing entirely. If a value
-is specified in the same argument as the option then no further values are read.
-
-Example file: [options-variadic.js](./examples/options-variadic.js)
-
-```js
-program
- .option('-n, --number <numbers...>', 'specify numbers')
- .option('-l, --letter [letters...]', 'specify letters');
-
-program.parse();
-
-console.log('Options: ', program.opts());
-console.log('Remaining arguments: ', program.args);
-```
-
-```bash
-$ collect -n 1 2 3 --letter a b c
-Options: { number: [ '1', '2', '3' ], letter: [ 'a', 'b', 'c' ] }
-Remaining arguments: []
-$ collect --letter=A -n80 operand
-Options: { number: [ '80' ], letter: [ 'A' ] }
-Remaining arguments: [ 'operand' ]
-$ collect --letter -n 1 -n 2 3 -- operand
-Options: { number: [ '1', '2', '3' ], letter: true }
-Remaining arguments: [ 'operand' ]
-```
-
-For information about possible ambiguous cases, see [options taking varying arguments](./docs/options-taking-varying-arguments.md).
-
-### Version option
-
-The optional `version` method adds handling for displaying the command version. The default option flags are `-V` and `--version`, and when present the command prints the version number and exits.
-
-```js
-program.version('0.0.1');
-```
-
-```bash
-$ ./examples/pizza -V
-0.0.1
-```
-
-You may change the flags and description by passing additional parameters to the `version` method, using
-the same syntax for flags as the `option` method.
-
-```js
-program.version('0.0.1', '-v, --vers', 'output the current version');
-```
-
-### More configuration
-
-You can add most options using the `.option()` method, but there are some additional features available
-by constructing an `Option` explicitly for less common cases.
-
-Example file: [options-extra.js](./examples/options-extra.js)
-
-```js
-program
- .addOption(new Option('-s, --secret').hideHelp())
- .addOption(new Option('-t, --timeout <delay>', 'timeout in seconds').default(60, 'one minute'))
- .addOption(new Option('-d, --drink <size>', 'drink size').choices(['small', 'medium', 'large']));
-```
-
-```bash
-$ extra --help
-Usage: help [options]
-
-Options:
- -t, --timeout <delay> timeout in seconds (default: one minute)
- -d, --drink <size> drink cup size (choices: "small", "medium", "large")
- -h, --help display help for command
-
-$ extra --drink huge
-error: option '-d, --drink <size>' argument 'huge' is invalid. Allowed choices are small, medium, large.
-```
-
### Custom option processing
-You may specify a function to do custom processing of option-arguments. The callback function receives two parameters,
-the user specified option-argument and the previous value for the option. It returns the new value for the option.
-
-This allows you to coerce the option-argument to the desired type, or accumulate values, or do entirely custom processing.
+You may specify a function to do custom processing of option values. The callback function receives two parameters, the user specified value and the
+previous value for the option. It returns the new value for the option.
-You can optionally specify the default/starting value for the option after the function parameter.
+This allows you to coerce the option value to the desired type, or accumulate values, or do entirely custom processing.
-Example file: [options-custom-processing.js](./examples/options-custom-processing.js)
+You can optionally specify the default/starting value for the option after the function.
```js
+const program = require('commander');
+
function myParseInt(value, dummyPrevious) {
- // parseInt takes a string and a radix
- const parsedValue = parseInt(value, 10);
- if (isNaN(parsedValue)) {
- throw new commander.InvalidOptionArgumentError('Not a number.');
- }
- return parsedValue;
+ // parseInt takes a string and an optional radix
+ return parseInt(value);
}
function increaseVerbosity(dummyValue, previous) {
@@ -367,14 +227,13 @@ program
.option('-l, --list <items>', 'comma separated list', commaSeparatedList)
;
-program.parse();
+program.parse(process.argv);
-const options = program.opts();
-if (options.float !== undefined) console.log(`float: ${options.float}`);
-if (options.integer !== undefined) console.log(`integer: ${options.integer}`);
-if (options.verbose > 0) console.log(`verbosity: ${options.verbose}`);
-if (options.collect.length > 0) console.log(options.collect);
-if (options.list !== undefined) console.log(options.list);
+if (program.float !== undefined) console.log(`float: ${program.float}`);
+if (program.integer !== undefined) console.log(`integer: ${program.integer}`);
+if (program.verbose > 0) console.log(`verbosity: ${program.verbose}`);
+if (program.collect.length > 0) console.log(program.collect);
+if (program.list !== undefined) console.log(program.list);
```
```bash
@@ -390,13 +249,47 @@ $ custom --list x,y,z
[ 'x', 'y', 'z' ]
```
-## Commands
+### Required option
-You can specify (sub)commands using `.command()` or `.addCommand()`. There are two ways these can be implemented: using an action handler attached to the command, or as a stand-alone executable file (described in more detail later). The subcommands may be nested ([example](./examples/nestedCommands.js)).
+You may specify a required (mandatory) option using `.requiredOption`. The option must be specified on the command line, or by having a default value. The method is otherwise the same as `.option` in format, taking flags and description, and optional default value or custom processing.
-In the first parameter to `.command()` you specify the command name and any command-arguments. The arguments may be `<required>` or `[optional]`, and the last argument may also be `variadic...`.
+```js
+const program = require('commander');
+
+program
+ .requiredOption('-c, --cheese <type>', 'pizza must have cheese');
-You can use `.addCommand()` to add an already configured subcommand to the program.
+program.parse(process.argv);
+```
+
+```
+$ pizza
+error: required option '-c, --cheese <type>' not specified
+```
+
+### Version option
+
+The optional `version` method adds handling for displaying the command version. The default option flags are `-V` and `--version`, and when present the command prints the version number and exits.
+
+```js
+program.version('0.0.1');
+```
+
+```bash
+$ ./examples/pizza -V
+0.0.1
+```
+
+You may change the flags and description by passing additional parameters to the `version` method, using
+the same syntax for flags as the `option` method. The version flags can be named anything, but a long name is required.
+
+```js
+program.version('0.0.1', '-v, --vers', 'output the current version');
+```
+
+## Commands
+
+You can specify (sub)commands for your top-level command using `.command`. There are two ways these can be implemented: using an action handler attached to the command, or as a separate executable file (described in more detail later). In the first parameter to `.command` you specify the command name and any command arguments. The arguments may be `<required>` or `[optional]`, and the last argument may also be `variadic...`.
For example:
@@ -410,80 +303,78 @@ program
console.log('clone command called');
});
-// Command implemented using stand-alone executable file (description is second parameter to `.command`)
-// Returns `this` for adding more commands.
+// Command implemented using separate executable file (description is second parameter to `.command`)
+// Returns top-level command for adding more commands.
program
.command('start <service>', 'start named service')
.command('stop [service]', 'stop named service, or all if no name supplied');
-
-// Command prepared separately.
-// Returns `this` for adding more commands.
-program
- .addCommand(build.makeBuildCommand());
```
-Configuration options can be passed with the call to `.command()` and `.addCommand()`. Specifying `hidden: true` will
-remove the command from the generated help output. Specifying `isDefault: true` will run the subcommand if no other
-subcommand is specified ([example](./examples/defaultCommand.js)).
-
### Specify the argument syntax
-You use `.arguments` to specify the expected command-arguments for the top-level command, and for subcommands they are usually
-included in the `.command` call. Angled brackets (e.g. `<required>`) indicate required command-arguments.
-Square brackets (e.g. `[optional]`) indicate optional command-arguments.
-You can optionally describe the arguments in the help by supplying a hash as second parameter to `.description()`.
-
-Example file: [arguments.js](./examples/arguments.js)
+You use `.arguments` to specify the arguments for the top-level command, and for subcommands they are included in the `.command` call. Angled brackets (e.g. `<required>`) indicate required input. Square brackets (e.g. `[optional]`) indicate optional input.
```js
+const program = require('commander');
+
program
.version('0.1.0')
- .arguments('<username> [password]')
- .description('test command', {
- username: 'user to login',
- password: 'password for user, if required'
- })
- .action((username, password) => {
- console.log('username:', username);
- console.log('environment:', password || 'no password given');
+ .arguments('<cmd> [env]')
+ .action(function (cmd, env) {
+ cmdValue = cmd;
+ envValue = env;
});
+
+program.parse(process.argv);
+
+if (typeof cmdValue === 'undefined') {
+ console.error('no command given!');
+ process.exit(1);
+}
+console.log('command:', cmdValue);
+console.log('environment:', envValue || "no environment given");
```
The last argument of a command can be variadic, and only the last argument. To make an argument variadic you
append `...` to the argument name. For example:
```js
+const program = require('commander');
+
program
.version('0.1.0')
- .command('rmdir <dirs...>')
- .action(function (dirs) {
- dirs.forEach((dir) => {
- console.log('rmdir %s', dir);
- });
+ .command('rmdir <dir> [otherDirs...]')
+ .action(function (dir, otherDirs) {
+ console.log('rmdir %s', dir);
+ if (otherDirs) {
+ otherDirs.forEach(function (oDir) {
+ console.log('rmdir %s', oDir);
+ });
+ }
});
-```
-The variadic argument is passed to the action handler as an array.
+program.parse(process.argv);
+```
-### Action handler
+The variadic argument is passed to the action handler as an array. (And this also applies to `program.args`.)
-The action handler gets passed a parameter for each command-argument you declared, and two additional parameters
-which are the parsed options and the command object itself.
+### Action handler (sub)commands
-Example file: [thank.js](./examples/thank.js)
+You can add options to a command that uses an action handler.
+The action handler gets passed a parameter for each argument you declared, and one additional argument which is the
+command object itself. This command argument has the values for the command-specific options added as properties.
```js
+const program = require('commander');
+
program
- .arguments('<name>')
- .option('-t, --title <honorific>', 'title to use before name')
- .option('-d, --debug', 'display some debugging')
- .action((name, options, command) => {
- if (options.debug) {
- console.error('Called %s with options %o', command.name(), options);
- }
- const title = options.title ? `${options.title} ` : '';
- console.log(`Thank-you ${title}${name}`);
- });
+ .command('rm <dir>')
+ .option('-r, --recursive', 'Remove recursively')
+ .action(function (dir, cmdObj) {
+ console.log('remove ' + dir + (cmdObj.recursive ? ' recursively' : ''))
+ })
+
+program.parse(process.argv)
```
You may supply an `async` action handler, in which case you call `.parseAsync` rather than `.parse`.
@@ -499,114 +390,108 @@ async function main() {
}
```
-A command's options and arguments on the command line are validated when the command is used. Any unknown options or missing arguments will be reported as an error. You can suppress the unknown option checks with `.allowUnknownOption()`. By default it is not an error to
-pass more arguments than declared, but you can make this an error with `.allowExcessArguments(false)`.
+A command's options on the command line are validated when the command is used. Any unknown options will be reported as an error. However, if an action-based command does not define an action, then the options are not validated.
-### Stand-alone executable (sub)commands
+Configuration options can be passed with the call to `.command()`. Specifying `true` for `opts.noHelp` will remove the command from the generated help output.
-When `.command()` is invoked with a description argument, this tells Commander that you're going to use stand-alone executables for subcommands.
+### Git-style executable (sub)commands
+
+When `.command()` is invoked with a description argument, this tells commander that you're going to use separate executables for sub-commands, much like `git(1)` and other popular tools.
Commander will search the executables in the directory of the entry script (like `./examples/pm`) with the name `program-subcommand`, like `pm-install`, `pm-search`.
You can specify a custom name with the `executableFile` configuration option.
You handle the options for an executable (sub)command in the executable, and don't declare them at the top-level.
-Example file: [pm](./examples/pm)
-
```js
+// file: ./examples/pm
+const program = require('commander');
+
program
.version('0.1.0')
.command('install [name]', 'install one or more packages')
.command('search [query]', 'search with optional query')
- .command('update', 'update installed packages', { executableFile: 'myUpdateSubCommand' })
- .command('list', 'list packages installed', { isDefault: true });
-
-program.parse(process.argv);
+ .command('update', 'update installed packages', {executableFile: 'myUpdateSubCommand'})
+ .command('list', 'list packages installed', {isDefault: true})
+ .parse(process.argv);
```
-If the program is designed to be installed globally, make sure the executables have proper modes, like `755`.
+Configuration options can be passed with the call to `.command()`. Specifying `true` for `opts.noHelp` will remove the command from the generated help output. Specifying `true` for `opts.isDefault` will run the subcommand if no other subcommand is specified.
+Specifying a name with `executableFile` will override the default constructed name.
-## Automated help
+If the program is designed to be installed globally, make sure the executables have proper modes, like `755`.
-The help information is auto-generated based on the information commander already knows about your program. The default
-help option is `-h,--help`.
+## Automated --help
-Example file: [pizza](./examples/pizza)
+ The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free:
```bash
-$ node ./examples/pizza --help
+$ ./examples/pizza --help
Usage: pizza [options]
-An application for pizza ordering
+An application for pizzas ordering
Options:
+ -V, --version output the version number
-p, --peppers Add peppers
+ -P, --pineapple Add pineapple
+ -b, --bbq Add bbq sauce
-c, --cheese <type> Add the specified type of cheese (default: "marble")
-C, --no-cheese You do not want any cheese
- -h, --help display help for command
-```
-
-A `help` command is added by default if your command has subcommands. It can be used alone, or with a subcommand name to show
-further help for the subcommand. These are effectively the same if the `shell` program has implicit help:
-
-```bash
-shell help
-shell --help
-
-shell help spawn
-shell spawn --help
+ -h, --help output usage information
```
### Custom help
-You can add extra text to be displayed along with the built-in help.
-
-Example file: [custom-help](./examples/custom-help)
+ You can display arbitrary `-h, --help` information
+ by listening for "--help". Commander will automatically
+ exit once you are done so that the remainder of your program
+ does not execute causing undesired behaviors, for example
+ in the following executable "stuff" will not output when
+ `--help` is used.
```js
+#!/usr/bin/env node
+
+const program = require('commander');
+
program
- .option('-f, --foo', 'enable some foo');
+ .version('0.1.0')
+ .option('-f, --foo', 'enable some foo')
+ .option('-b, --bar', 'enable some bar')
+ .option('-B, --baz', 'enable some baz');
+
+// must be before .parse() since
+// node's emit() is immediate
+
+program.on('--help', function(){
+ console.log('')
+ console.log('Examples:');
+ console.log(' $ custom-help --help');
+ console.log(' $ custom-help -h');
+});
-program.addHelpText('after', `
+program.parse(process.argv);
-Example call:
- $ custom-help --help`);
+console.log('stuff');
```
-Yields the following help output:
+Yields the following help output when `node script-name.js -h` or `node script-name.js --help` are run:
```Text
Usage: custom-help [options]
Options:
- -f, --foo enable some foo
- -h, --help display help for command
+ -h, --help output usage information
+ -V, --version output the version number
+ -f, --foo enable some foo
+ -b, --bar enable some bar
+ -B, --baz enable some baz
-Example call:
+Examples:
$ custom-help --help
+ $ custom-help -h
```
-The positions in order displayed are:
-
-- `beforeAll`: add to the program for a global banner or header
-- `before`: display extra information before built-in help
-- `after`: display extra information after built-in help
-- `afterAll`: add to the program for a global footer (epilog)
-
-The positions "beforeAll" and "afterAll" apply to the command and all its subcommands.
-
-The second parameter can be a string, or a function returning a string. The function is passed a context object for your convenience. The properties are:
-
-- error: a boolean for whether the help is being displayed due to a usage error
-- command: the Command which is displaying the help
-
-### Display help from code
-
-`.help()`: display help information and exit immediately. You can optionally pass `{ error: true }` to display on stderr and exit with an error status.
-
-`.outputHelp()`: output help information without exiting. You can optionally pass `{ error: true }` to display on stderr.
-
-`.helpInformation()`: get the built-in command help information as a string for processing or displaying yourself.
-
### .usage and .name
These allow you to customise the usage description in the first line of the help. The name is otherwise
@@ -624,174 +509,128 @@ The help will start with:
Usage: my-command [global options] command
```
-### .helpOption(flags, description)
+### .outputHelp(cb)
-By default every command has a help option. Override the default help flags and description. Pass false to disable the built-in help option.
+Output help information without exiting.
+Optional callback cb allows post-processing of help text before it is displayed.
-```js
-program
- .helpOption('-e, --HELP', 'read more information');
-```
+If you want to display help by default (e.g. if no command was provided), you can use something like:
-### .addHelpCommand()
+```js
+const program = require('commander');
+const colors = require('colors');
-A help command is added by default if your command has subcommands. You can explicitly turn on or off the implicit help command with `.addHelpCommand()` and `.addHelpCommand(false)`.
+program
+ .version('0.1.0')
+ .command('getstream [url]', 'get stream URL')
+ .parse(process.argv);
-You can both turn on and customise the help command by supplying the name and description:
+if (!process.argv.slice(2).length) {
+ program.outputHelp(make_red);
+}
-```js
-program.addHelpCommand('assist [command]', 'show assistance');
+function make_red(txt) {
+ return colors.red(txt); //display the help text in red on the console
+}
```
-### More configuration
-
-The built-in help is formatted using the Help class.
-You can configure the Help behaviour by modifying data properties and methods using `.configureHelp()`, or by subclassing using `.createHelp()` if you prefer.
-
-The data properties are:
+### .helpOption(flags, description)
-- `helpWidth`: specify the wrap width, useful for unit tests
-- `sortSubcommands`: sort the subcommands alphabetically
-- `sortOptions`: sort the options alphabetically
+ Override the default help flags and description.
-There are methods getting the visible lists of arguments, options, and subcommands. There are methods for formatting the items in the lists, with each item having a _term_ and _description_. Take a look at `.formatHelp()` to see how they are used.
+```js
+program
+ .helpOption('-e, --HELP', 'read more information');
+```
-Example file: [configure-help.js](./examples/configure-help.js)
+### .help(cb)
-```
-program.configureHelp({
- sortSubcommands: true,
- subcommandTerm: (cmd) => cmd.name() // Just show the name, instead of short usage.
-});
-```
+ Output help information and exit immediately.
+ Optional callback cb allows post-processing of help text before it is displayed.
## Custom event listeners
-You can execute custom actions by listening to command and option events.
+ You can execute custom actions by listening to command and option events.
```js
program.on('option:verbose', function () {
- process.env.VERBOSE = this.opts().verbose;
+ process.env.VERBOSE = this.verbose;
});
-program.on('command:*', function (operands) {
- console.error(`error: unknown command '${operands[0]}'`);
- const availableCommands = program.commands.map(cmd => cmd.name());
- mySuggestBestMatch(operands[0], availableCommands);
- process.exitCode = 1;
+// error on unknown commands
+program.on('command:*', function () {
+ console.error('Invalid command: %s\nSee --help for a list of available commands.', program.args.join(' '));
+ process.exit(1);
});
```
## Bits and pieces
-### .parse() and .parseAsync()
-
-The first argument to `.parse` is the array of strings to parse. You may omit the parameter to implicitly use `process.argv`.
+### Avoiding option name clashes
-If the arguments follow different conventions than node you can pass a `from` option in the second parameter:
+The original and default behaviour is that the option values are stored
+as properties on the program, and the action handler is passed a
+command object with the options values stored as properties.
+This is very convenient to code, but the downside is possible clashes with
+existing properties of Command.
-- 'node': default, `argv[0]` is the application and `argv[1]` is the script being run, with user parameters after that
-- 'electron': `argv[1]` varies depending on whether the electron application is packaged
-- 'user': all of the arguments from the user
+There are two new routines to change the behaviour, and the default behaviour may change in the future:
-For example:
+- `storeOptionsAsProperties`: whether to store option values as properties on command object, or store separately (specify false) and access using `.opts()`
+- `passCommandToAction`: whether to pass command to action handler,
+or just the options (specify false)
```js
-program.parse(process.argv); // Explicit, node conventions
-program.parse(); // Implicit, and auto-detect electron
-program.parse(['-f', 'filename'], { from: 'user' });
-```
-
-### Parsing Configuration
-
-If the default parsing does not suit your needs, there are some behaviours to support other usage patterns.
-
-By default program options are recognised before and after subcommands. To only look for program options before subcommands, use `.enablePositionalOptions()`. This lets you use
-an option for a different purpose in subcommands.
-
-Example file: [positional-options.js](./examples/positional-options.js)
-
-With positional options, the `-b` is a program option in the first line and a subcommand option in the second line:
-
-```sh
-program -b subcommand
-program subcommand -b
-```
-
-By default options are recognised before and after command-arguments. To only process options that come
-before the command-arguments, use `.passThroughOptions()`. This lets you pass the arguments and following options through to another program
-without needing to use `--` to end the option processing.
-To use pass through options in a subcommand, the program needs to enable positional options.
-
-Example file: [pass-through-options.js](./examples/pass-through-options.js)
-
-With pass through options, the `--port=80` is a program option in the first line and passed through as a command-argument in the second line:
-
-```sh
-program --port=80 arg
-program arg --port=80
-```
-
-By default the option processing shows an error for an unknown option. To have an unknown option treated as an ordinary command-argument and continue looking for options, use `.allowUnknownOption()`. This lets you mix known and unknown options.
-
-By default the argument processing does not display an error for more command-arguments than expected.
-To display an error for excess arguments, use`.allowExcessArguments(false)`.
-
-### Legacy options as properties
+// file: ./examples/storeOptionsAsProperties.action.js
+program
+ .storeOptionsAsProperties(false)
+ .passCommandToAction(false);
-Before Commander 7, the option values were stored as properties on the command.
-This was convenient to code but the downside was possible clashes with
-existing properties of `Command`. You can revert to the old behaviour to run unmodified legacy code by using `.storeOptionsAsProperties()`.
+program
+ .name('my-program-name')
+ .option('-n,--name <name>');
-```js
program
- .storeOptionsAsProperties()
- .option('-d, --debug')
- .action((commandAndOptions) => {
- if (commandAndOptions.debug) {
- console.error(`Called ${commandAndOptions.name()}`);
- }
+ .command('show')
+ .option('-a,--action <action>')
+ .action((options) => {
+ console.log(options.action);
});
+
+program.parse(process.argv);
+
+const programOptions = program.opts();
+console.log(programOptions.name);
```
### TypeScript
-If you use `ts-node` and stand-alone executable subcommands written as `.ts` files, you need to call your program through node to get the subcommands called correctly. e.g.
+The Commander package includes its TypeScript Definition file, but also requires the node types which you need to install yourself. e.g.
```bash
-node -r ts-node/register pm.ts
+npm install commander
+npm install --save-dev @types/node
```
-### createCommand()
-
-This factory function creates a new command. It is exported and may be used instead of using `new`, like:
+If you use `ts-node` and git-style sub-commands written as `.ts` files, you need to call your program through node to get the sub-commands called correctly. e.g.
-```js
-const { createCommand } = require('commander');
-const program = createCommand();
+```bash
+node -r ts-node/register pm.ts
```
-`createCommand` is also a method of the Command object, and creates a new command rather than a subcommand. This gets used internally
-when creating subcommands using `.command()`, and you may override it to
-customise the new subcommand (example file [custom-command-class.js](./examples/custom-command-class.js)).
-
### Node options such as `--harmony`
You can enable `--harmony` option in two ways:
-- Use `#! /usr/bin/env node --harmony` in the subcommands scripts. (Note Windows does not support this pattern.)
-- Use the `--harmony` option when call the command, like `node --harmony examples/pm publish`. The `--harmony` option will be preserved when spawning subcommand process.
+- Use `#! /usr/bin/env node --harmony` in the sub-commands scripts. (Note Windows does not support this pattern.)
+- Use the `--harmony` option when call the command, like `node --harmony examples/pm publish`. The `--harmony` option will be preserved when spawning sub-command process.
-### Debugging stand-alone executable subcommands
+### Node debugging
-An executable subcommand is launched as a separate child process.
-
-If you are using the node inspector for [debugging](https://nodejs.org/en/docs/guides/debugging-getting-started/) executable subcommands using `node --inspect` et al,
+If you are using the node inspector for [debugging](https://nodejs.org/en/docs/guides/debugging-getting-started/) git-style executable (sub)commands using `node --inspect` et al,
the inspector port is incremented by 1 for the spawned subcommand.
-If you are using VSCode to debug executable subcommands you need to set the `"autoAttachChildProcesses": true` flag in your launch.json configuration.
-
-### Override exit and output handling
+### Override exit handling
By default Commander calls `process.exit` when it detects errors, or after displaying the help or version. You can override
this behaviour and optionally supply a callback. The default override throws a `CommanderError`.
@@ -799,7 +638,7 @@ this behaviour and optionally supply a callback. The default override throws a `
The override callback is passed a `CommanderError` with properties `exitCode` number, `code` string, and `message`. The default override behaviour is to throw the error, except for async handling of executable subcommand completion which carries on. The normal display of error messages or version or help
is not affected by the override which is called after the display.
-```js
+``` js
program.exitOverride();
try {
@@ -809,104 +648,61 @@ try {
}
```
-By default Commander is configured for a command-line application and writes to stdout and stderr.
-You can modify this behaviour for custom applications. In addition, you can modify the display of error messages.
-
-Example file: [configure-output.js](./examples/configure-output.js)
-
-
-```js
-function errorColor(str) {
- // Add ANSI escape codes to display text in red.
- return `\x1b[31m${str}\x1b[0m`;
-}
-
-program
- .configureOutput({
- // Visibly override write routines as example!
- writeOut: (str) => process.stdout.write(`[OUT] ${str}`),
- writeErr: (str) => process.stdout.write(`[ERR] ${str}`),
- // Highlight errors in color.
- outputError: (str, write) => write(errorColor(str))
- });
-```
-
-### Additional documentation
-
-There is more information available about:
-
-- [deprecated](./docs/deprecated.md) features still supported for backwards compatibility
-- [options taking varying arguments](./docs/options-taking-varying-arguments.md)
-
## Examples
-In a single command program, you might not need an action handler.
-
-Example file: [pizza](./examples/pizza)
-
-```js
-const { program } = require('commander');
-
-program
- .description('An application for pizza ordering')
- .option('-p, --peppers', 'Add peppers')
- .option('-c, --cheese <type>', 'Add the specified type of cheese', 'marble')
- .option('-C, --no-cheese', 'You do not want any cheese');
-
-program.parse();
-
-const options = program.opts();
-console.log('you ordered a pizza with:');
-if (options.peppers) console.log(' - peppers');
-const cheese = !options.cheese ? 'no' : options.cheese;
-console.log(' - %s cheese', cheese);
-```
-
-In a multi-command program, you will have action handlers for each command (or stand-alone executables for the commands).
-
-Example file: [deploy](./examples/deploy)
-
```js
-const { Command } = require('commander');
-const program = new Command();
+const program = require('commander');
program
- .version('0.0.1')
- .option('-c, --config <path>', 'set config path', './deploy.conf');
+ .version('0.1.0')
+ .option('-C, --chdir <path>', 'change the working directory')
+ .option('-c, --config <path>', 'set config path. defaults to ./deploy.conf')
+ .option('-T, --no-tests', 'ignore test hook');
program
.command('setup [env]')
.description('run setup commands for all envs')
- .option('-s, --setup_mode <mode>', 'Which setup mode to use', 'normal')
- .action((env, options) => {
+ .option("-s, --setup_mode [mode]", "Which setup mode to use")
+ .action(function(env, options){
+ const mode = options.setup_mode || "normal";
env = env || 'all';
- console.log('read config from %s', program.opts().config);
- console.log('setup for %s env(s) with %s mode', env, options.setup_mode);
+ console.log('setup for %s env(s) with %s mode', env, mode);
});
program
- .command('exec <script>')
+ .command('exec <cmd>')
.alias('ex')
.description('execute the given remote cmd')
- .option('-e, --exec_mode <mode>', 'Which exec mode to use', 'fast')
- .action((script, options) => {
- console.log('read config from %s', program.opts().config);
- console.log('exec "%s" using %s mode and config %s', script, options.exec_mode, program.opts().config);
- }).addHelpText('after', `
-Examples:
- $ deploy exec sequential
- $ deploy exec async`
- );
-
+ .option("-e, --exec_mode <mode>", "Which exec mode to use")
+ .action(function(cmd, options){
+ console.log('exec "%s" using %s mode', cmd, options.exec_mode);
+ }).on('--help', function() {
+ console.log('');
+ console.log('Examples:');
+ console.log('');
+ console.log(' $ deploy exec sequential');
+ console.log(' $ deploy exec async');
+ });
+
+program
+ .command('*')
+ .action(function(env){
+ console.log('deploying "%s"', env);
+ });
+
program.parse(process.argv);
```
-More samples can be found in the [examples](https://github.com/tj/commander.js/tree/master/examples) directory.
+More Demos can be found in the [examples](https://github.com/tj/commander.js/tree/master/examples) directory.
+
+## License
+
+[MIT](https://github.com/tj/commander.js/blob/master/LICENSE)
## Support
-The current version of Commander is fully supported on Long Term Support versions of node, and requires at least node v10.
-(For older versions of node, use an older version of Commander. Commander version 2.x has the widest support.)
+Commander 4.x is supported on Node 8 and above, and is likely to work with Node 6 but not tested.
+(For versions of Node below Node 6, use Commander 3.x or 2.x.)
The main forum for free and community support is the project [Issues](https://github.com/tj/commander.js/issues) on GitHub.
diff --git a/node_modules/commander/index.js b/node_modules/commander/index.js
index 985a8cfc..37d20cc5 100644
--- a/node_modules/commander/index.js
+++ b/node_modules/commander/index.js
@@ -2,499 +2,91 @@
* Module dependencies.
*/
-const EventEmitter = require('events').EventEmitter;
-const childProcess = require('child_process');
-const path = require('path');
-const fs = require('fs');
-
-// @ts-check
-
-// Although this is a class, methods are static in style to allow override using subclass or just functions.
-class Help {
- constructor() {
- this.helpWidth = undefined;
- this.sortSubcommands = false;
- this.sortOptions = false;
- }
-
- /**
- * Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one.
- *
- * @param {Command} cmd
- * @returns {Command[]}
- */
-
- visibleCommands(cmd) {
- const visibleCommands = cmd.commands.filter(cmd => !cmd._hidden);
- if (cmd._hasImplicitHelpCommand()) {
- // Create a command matching the implicit help command.
- const args = cmd._helpCommandnameAndArgs.split(/ +/);
- const helpCommand = cmd.createCommand(args.shift())
- .helpOption(false);
- helpCommand.description(cmd._helpCommandDescription);
- helpCommand._parseExpectedArgs(args);
- visibleCommands.push(helpCommand);
- }
- if (this.sortSubcommands) {
- visibleCommands.sort((a, b) => {
- return a.name().localeCompare(b.name());
- });
- }
- return visibleCommands;
- }
-
- /**
- * Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one.
- *
- * @param {Command} cmd
- * @returns {Option[]}
- */
-
- visibleOptions(cmd) {
- const visibleOptions = cmd.options.filter((option) => !option.hidden);
- // Implicit help
- const showShortHelpFlag = cmd._hasHelpOption && cmd._helpShortFlag && !cmd._findOption(cmd._helpShortFlag);
- const showLongHelpFlag = cmd._hasHelpOption && !cmd._findOption(cmd._helpLongFlag);
- if (showShortHelpFlag || showLongHelpFlag) {
- let helpOption;
- if (!showShortHelpFlag) {
- helpOption = cmd.createOption(cmd._helpLongFlag, cmd._helpDescription);
- } else if (!showLongHelpFlag) {
- helpOption = cmd.createOption(cmd._helpShortFlag, cmd._helpDescription);
- } else {
- helpOption = cmd.createOption(cmd._helpFlags, cmd._helpDescription);
- }
- visibleOptions.push(helpOption);
- }
- if (this.sortOptions) {
- const getSortKey = (option) => {
- // WYSIWYG for order displayed in help with short before long, no special handling for negated.
- return option.short ? option.short.replace(/^-/, '') : option.long.replace(/^--/, '');
- };
- visibleOptions.sort((a, b) => {
- return getSortKey(a).localeCompare(getSortKey(b));
- });
- }
- return visibleOptions;
- }
-
- /**
- * Get an array of the arguments which have descriptions.
- *
- * @param {Command} cmd
- * @returns {{ term: string, description:string }[]}
- */
-
- visibleArguments(cmd) {
- if (cmd._argsDescription && cmd._args.length) {
- return cmd._args.map((argument) => {
- return { term: argument.name, description: cmd._argsDescription[argument.name] || '' };
- }, 0);
- }
- return [];
- }
+var EventEmitter = require('events').EventEmitter;
+var spawn = require('child_process').spawn;
+var path = require('path');
+var dirname = path.dirname;
+var basename = path.basename;
+var fs = require('fs');
- /**
- * Get the command term to show in the list of subcommands.
- *
- * @param {Command} cmd
- * @returns {string}
- */
-
- subcommandTerm(cmd) {
- // Legacy. Ignores custom usage string, and nested commands.
- const args = cmd._args.map(arg => humanReadableArgName(arg)).join(' ');
- return cmd._name +
- (cmd._aliases[0] ? '|' + cmd._aliases[0] : '') +
- (cmd.options.length ? ' [options]' : '') + // simplistic check for non-help option
- (args ? ' ' + args : '');
- }
-
- /**
- * Get the option term to show in the list of options.
- *
- * @param {Option} option
- * @returns {string}
- */
-
- optionTerm(option) {
- return option.flags;
- }
-
- /**
- * Get the longest command term length.
- *
- * @param {Command} cmd
- * @param {Help} helper
- * @returns {number}
- */
-
- longestSubcommandTermLength(cmd, helper) {
- return helper.visibleCommands(cmd).reduce((max, command) => {
- return Math.max(max, helper.subcommandTerm(command).length);
- }, 0);
- };
-
- /**
- * Get the longest option term length.
- *
- * @param {Command} cmd
- * @param {Help} helper
- * @returns {number}
- */
-
- longestOptionTermLength(cmd, helper) {
- return helper.visibleOptions(cmd).reduce((max, option) => {
- return Math.max(max, helper.optionTerm(option).length);
- }, 0);
- };
-
- /**
- * Get the longest argument term length.
- *
- * @param {Command} cmd
- * @param {Help} helper
- * @returns {number}
- */
-
- longestArgumentTermLength(cmd, helper) {
- return helper.visibleArguments(cmd).reduce((max, argument) => {
- return Math.max(max, argument.term.length);
- }, 0);
- };
-
- /**
- * Get the command usage to be displayed at the top of the built-in help.
- *
- * @param {Command} cmd
- * @returns {string}
- */
-
- commandUsage(cmd) {
- // Usage
- let cmdName = cmd._name;
- if (cmd._aliases[0]) {
- cmdName = cmdName + '|' + cmd._aliases[0];
- }
- let parentCmdNames = '';
- for (let parentCmd = cmd.parent; parentCmd; parentCmd = parentCmd.parent) {
- parentCmdNames = parentCmd.name() + ' ' + parentCmdNames;
- }
- return parentCmdNames + cmdName + ' ' + cmd.usage();
- }
-
- /**
- * Get the description for the command.
- *
- * @param {Command} cmd
- * @returns {string}
- */
-
- commandDescription(cmd) {
- // @ts-ignore: overloaded return type
- return cmd.description();
- }
-
- /**
- * Get the command description to show in the list of subcommands.
- *
- * @param {Command} cmd
- * @returns {string}
- */
-
- subcommandDescription(cmd) {
- // @ts-ignore: overloaded return type
- return cmd.description();
- }
-
- /**
- * Get the option description to show in the list of options.
- *
- * @param {Option} option
- * @return {string}
- */
-
- optionDescription(option) {
- if (option.negate) {
- return option.description;
- }
- const extraInfo = [];
- if (option.argChoices) {
- extraInfo.push(
- // use stringify to match the display of the default value
- `choices: ${option.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`);
- }
- if (option.defaultValue !== undefined) {
- extraInfo.push(`default: ${option.defaultValueDescription || JSON.stringify(option.defaultValue)}`);
- }
- if (extraInfo.length > 0) {
- return `${option.description} (${extraInfo.join(', ')})`;
- }
- return option.description;
- };
-
- /**
- * Generate the built-in help text.
- *
- * @param {Command} cmd
- * @param {Help} helper
- * @returns {string}
- */
-
- formatHelp(cmd, helper) {
- const termWidth = helper.padWidth(cmd, helper);
- const helpWidth = helper.helpWidth || 80;
- const itemIndentWidth = 2;
- const itemSeparatorWidth = 2; // between term and description
- function formatItem(term, description) {
- if (description) {
- const fullText = `${term.padEnd(termWidth + itemSeparatorWidth)}${description}`;
- return helper.wrap(fullText, helpWidth - itemIndentWidth, termWidth + itemSeparatorWidth);
- }
- return term;
- };
- function formatList(textArray) {
- return textArray.join('\n').replace(/^/gm, ' '.repeat(itemIndentWidth));
- }
-
- // Usage
- let output = [`Usage: ${helper.commandUsage(cmd)}`, ''];
+/**
+ * Inherit `Command` from `EventEmitter.prototype`.
+ */
- // Description
- const commandDescription = helper.commandDescription(cmd);
- if (commandDescription.length > 0) {
- output = output.concat([commandDescription, '']);
- }
+require('util').inherits(Command, EventEmitter);
- // Arguments
- const argumentList = helper.visibleArguments(cmd).map((argument) => {
- return formatItem(argument.term, argument.description);
- });
- if (argumentList.length > 0) {
- output = output.concat(['Arguments:', formatList(argumentList), '']);
- }
+/**
+ * Expose the root command.
+ */
- // Options
- const optionList = helper.visibleOptions(cmd).map((option) => {
- return formatItem(helper.optionTerm(option), helper.optionDescription(option));
- });
- if (optionList.length > 0) {
- output = output.concat(['Options:', formatList(optionList), '']);
- }
+exports = module.exports = new Command();
- // Commands
- const commandList = helper.visibleCommands(cmd).map((cmd) => {
- return formatItem(helper.subcommandTerm(cmd), helper.subcommandDescription(cmd));
- });
- if (commandList.length > 0) {
- output = output.concat(['Commands:', formatList(commandList), '']);
- }
+/**
+ * Expose `Command`.
+ */
- return output.join('\n');
- }
+exports.Command = Command;
- /**
- * Calculate the pad width from the maximum term length.
- *
- * @param {Command} cmd
- * @param {Help} helper
- * @returns {number}
- */
+/**
+ * Expose `Option`.
+ */
- padWidth(cmd, helper) {
- return Math.max(
- helper.longestOptionTermLength(cmd, helper),
- helper.longestSubcommandTermLength(cmd, helper),
- helper.longestArgumentTermLength(cmd, helper)
- );
- };
+exports.Option = Option;
- /**
- * Wrap the given string to width characters per line, with lines after the first indented.
- * Do not wrap if insufficient room for wrapping (minColumnWidth), or string is manually formatted.
- *
- * @param {string} str
- * @param {number} width
- * @param {number} indent
- * @param {number} [minColumnWidth=40]
- * @return {string}
- *
- */
+/**
+ * Initialize a new `Option` with the given `flags` and `description`.
+ *
+ * @param {String} flags
+ * @param {String} description
+ * @api public
+ */
- wrap(str, width, indent, minColumnWidth = 40) {
- // Detect manually wrapped and indented strings by searching for line breaks
- // followed by multiple spaces/tabs.
- if (str.match(/[\n]\s+/)) return str;
- // Do not wrap if not enough room for a wrapped column of text (as could end up with a word per line).
- const columnWidth = width - indent;
- if (columnWidth < minColumnWidth) return str;
-
- const leadingStr = str.substr(0, indent);
- const columnText = str.substr(indent);
-
- const indentString = ' '.repeat(indent);
- const regex = new RegExp('.{1,' + (columnWidth - 1) + '}([\\s\u200B]|$)|[^\\s\u200B]+?([\\s\u200B]|$)', 'g');
- const lines = columnText.match(regex) || [];
- return leadingStr + lines.map((line, i) => {
- if (line.slice(-1) === '\n') {
- line = line.slice(0, line.length - 1);
- }
- return ((i > 0) ? indentString : '') + line.trimRight();
- }).join('\n');
- }
+function Option(flags, description) {
+ this.flags = flags;
+ this.required = flags.indexOf('<') >= 0; // A value must be supplied when the option is specified.
+ this.optional = flags.indexOf('[') >= 0; // A value is optional when the option is specified.
+ this.mandatory = false; // The option must have a value after parsing, which usually means it must be specified on command line.
+ this.negate = flags.indexOf('-no-') !== -1;
+ flags = flags.split(/[ ,|]+/);
+ if (flags.length > 1 && !/^[[<]/.test(flags[1])) this.short = flags.shift();
+ this.long = flags.shift();
+ this.description = description || '';
}
-class Option {
- /**
- * Initialize a new `Option` with the given `flags` and `description`.
- *
- * @param {string} flags
- * @param {string} [description]
- */
-
- constructor(flags, description) {
- this.flags = flags;
- this.description = description || '';
-
- this.required = flags.includes('<'); // A value must be supplied when the option is specified.
- this.optional = flags.includes('['); // A value is optional when the option is specified.
- // variadic test ignores <value,...> et al which might be used to describe custom splitting of single argument
- this.variadic = /\w\.\.\.[>\]]$/.test(flags); // The option can take multiple values.
- this.mandatory = false; // The option must have a value after parsing, which usually means it must be specified on command line.
- const optionFlags = _parseOptionFlags(flags);
- this.short = optionFlags.shortFlag;
- this.long = optionFlags.longFlag;
- this.negate = false;
- if (this.long) {
- this.negate = this.long.startsWith('--no-');
- }
- this.defaultValue = undefined;
- this.defaultValueDescription = undefined;
- this.parseArg = undefined;
- this.hidden = false;
- this.argChoices = undefined;
- }
-
- /**
- * Set the default value, and optionally supply the description to be displayed in the help.
- *
- * @param {any} value
- * @param {string} [description]
- * @return {Option}
- */
-
- default(value, description) {
- this.defaultValue = value;
- this.defaultValueDescription = description;
- return this;
- };
-
- /**
- * Set the custom handler for processing CLI option arguments into option values.
- *
- * @param {Function} [fn]
- * @return {Option}
- */
-
- argParser(fn) {
- this.parseArg = fn;
- return this;
- };
-
- /**
- * Whether the option is mandatory and must have a value after parsing.
- *
- * @param {boolean} [mandatory=true]
- * @return {Option}
- */
-
- makeOptionMandatory(mandatory = true) {
- this.mandatory = !!mandatory;
- return this;
- };
-
- /**
- * Hide option in help.
- *
- * @param {boolean} [hide=true]
- * @return {Option}
- */
-
- hideHelp(hide = true) {
- this.hidden = !!hide;
- return this;
- };
-
- /**
- * @api private
- */
-
- _concatValue(value, previous) {
- if (previous === this.defaultValue || !Array.isArray(previous)) {
- return [value];
- }
-
- return previous.concat(value);
- }
-
- /**
- * Only allow option value to be one of choices.
- *
- * @param {string[]} values
- * @return {Option}
- */
-
- choices(values) {
- this.argChoices = values;
- this.parseArg = (arg, previous) => {
- if (!values.includes(arg)) {
- throw new InvalidOptionArgumentError(`Allowed choices are ${values.join(', ')}.`);
- }
- if (this.variadic) {
- return this._concatValue(arg, previous);
- }
- return arg;
- };
- return this;
- };
-
- /**
- * Return option name.
- *
- * @return {string}
- */
+/**
+ * Return option name.
+ *
+ * @return {String}
+ * @api private
+ */
- name() {
- if (this.long) {
- return this.long.replace(/^--/, '');
- }
- return this.short.replace(/^-/, '');
- };
+Option.prototype.name = function() {
+ return this.long.replace(/^--/, '');
+};
- /**
- * Return option name, in a camelcase format that can be used
- * as a object attribute key.
- *
- * @return {string}
- * @api private
- */
+/**
+ * Return option name, in a camelcase format that can be used
+ * as a object attribute key.
+ *
+ * @return {String}
+ * @api private
+ */
- attributeName() {
- return camelcase(this.name().replace(/^no-/, ''));
- };
+Option.prototype.attributeName = function() {
+ return camelcase(this.name().replace(/^no-/, ''));
+};
- /**
- * Check if `arg` matches the short or long flag.
- *
- * @param {string} arg
- * @return {boolean}
- * @api private
- */
+/**
+ * Check if `arg` matches the short or long flag.
+ *
+ * @param {String} arg
+ * @return {Boolean}
+ * @api private
+ */
- is(arg) {
- return this.short === arg || this.long === arg;
- };
-}
+Option.prototype.is = function(arg) {
+ return this.short === arg || this.long === arg;
+};
/**
* CommanderError class
@@ -503,9 +95,9 @@ class Option {
class CommanderError extends Error {
/**
* Constructs the CommanderError class
- * @param {number} exitCode suggested exit code which could be used with process.exit
- * @param {string} code an id string representing the error
- * @param {string} message human-readable description of the error
+ * @param {Number} exitCode suggested exit code which could be used with process.exit
+ * @param {String} code an id string representing the error
+ * @param {String} message human-readable description of the error
* @constructor
*/
constructor(exitCode, code, message) {
@@ -515,1619 +107,1470 @@ class CommanderError extends Error {
this.name = this.constructor.name;
this.code = code;
this.exitCode = exitCode;
- this.nestedError = undefined;
}
}
+exports.CommanderError = CommanderError;
+
/**
- * InvalidOptionArgumentError class
- * @class
+ * Initialize a new `Command`.
+ *
+ * @param {String} [name]
+ * @api public
*/
-class InvalidOptionArgumentError extends CommanderError {
- /**
- * Constructs the InvalidOptionArgumentError class
- * @param {string} [message] explanation of why argument is invalid
- * @constructor
- */
- constructor(message) {
- super(1, 'commander.invalidOptionArgument', message);
- // properly capture stack trace in Node.js
- Error.captureStackTrace(this, this.constructor);
- this.name = this.constructor.name;
- }
-}
-class Command extends EventEmitter {
- /**
- * Initialize a new `Command`.
- *
- * @param {string} [name]
- */
+function Command(name) {
+ this.commands = [];
+ this.options = [];
+ this._execs = new Set();
+ this._allowUnknownOption = false;
+ this._args = [];
+ this._name = name || '';
+ this._optionValues = {};
+ this._storeOptionsAsProperties = true; // backwards compatible by default
+ this._passCommandToAction = true; // backwards compatible by default
+ this._actionResults = [];
+
+ this._helpFlags = '-h, --help';
+ this._helpDescription = 'output usage information';
+ this._helpShortFlag = '-h';
+ this._helpLongFlag = '--help';
+}
- constructor(name) {
- super();
- this.commands = [];
- this.options = [];
- this.parent = null;
- this._allowUnknownOption = false;
- this._allowExcessArguments = true;
- this._args = [];
- this.rawArgs = null;
- this._scriptPath = null;
- this._name = name || '';
- this._optionValues = {};
- this._storeOptionsAsProperties = false;
- this._actionResults = [];
- this._actionHandler = null;
- this._executableHandler = false;
- this._executableFile = null; // custom name for executable
- this._defaultCommandName = null;
- this._exitCallback = null;
- this._aliases = [];
- this._combineFlagAndOptionalValue = true;
- this._description = '';
- this._argsDescription = undefined;
- this._enablePositionalOptions = false;
- this._passThroughOptions = false;
-
- // see .configureOutput() for docs
- this._outputConfiguration = {
- writeOut: (str) => process.stdout.write(str),
- writeErr: (str) => process.stderr.write(str),
- getOutHelpWidth: () => process.stdout.isTTY ? process.stdout.columns : undefined,
- getErrHelpWidth: () => process.stderr.isTTY ? process.stderr.columns : undefined,
- outputError: (str, write) => write(str)
- };
+/**
+ * Define a command.
+ *
+ * There are two styles of command: pay attention to where to put the description.
+ *
+ * Examples:
+ *
+ * // Command implemented using action handler (description is supplied separately to `.command`)
+ * program
+ * .command('clone <source> [destination]')
+ * .description('clone a repository into a newly created directory')
+ * .action((source, destination) => {
+ * console.log('clone command called');
+ * });
+ *
+ * // Command implemented using separate executable file (description is second parameter to `.command`)
+ * program
+ * .command('start <service>', 'start named service')
+ * .command('stop [service]', 'stop named service, or all if no name supplied');
+ *
+ * @param {string} nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`
+ * @param {Object|string} [actionOptsOrExecDesc] - configuration options (for action), or description (for executable)
+ * @param {Object} [execOpts] - configuration options (for executable)
+ * @return {Command} returns new command for action handler, or top-level command for executable command
+ * @api public
+ */
- this._hidden = false;
- this._hasHelpOption = true;
- this._helpFlags = '-h, --help';
- this._helpDescription = 'display help for command';
- this._helpShortFlag = '-h';
- this._helpLongFlag = '--help';
- this._addImplicitHelpCommand = undefined; // Deliberately undefined, not decided whether true or false
- this._helpCommandName = 'help';
- this._helpCommandnameAndArgs = 'help [command]';
- this._helpCommandDescription = 'display help for command';
- this._helpConfiguration = {};
+Command.prototype.command = function(nameAndArgs, actionOptsOrExecDesc, execOpts) {
+ var desc = actionOptsOrExecDesc;
+ var opts = execOpts;
+ if (typeof desc === 'object' && desc !== null) {
+ opts = desc;
+ desc = null;
+ }
+ opts = opts || {};
+ var args = nameAndArgs.split(/ +/);
+ var cmd = new Command(args.shift());
+
+ if (desc) {
+ cmd.description(desc);
+ this.executables = true;
+ this._execs.add(cmd._name);
+ if (opts.isDefault) this.defaultExecutable = cmd._name;
}
+ cmd._noHelp = !!opts.noHelp;
+ cmd._helpFlags = this._helpFlags;
+ cmd._helpDescription = this._helpDescription;
+ cmd._helpShortFlag = this._helpShortFlag;
+ cmd._helpLongFlag = this._helpLongFlag;
+ cmd._exitCallback = this._exitCallback;
+ cmd._storeOptionsAsProperties = this._storeOptionsAsProperties;
+ cmd._passCommandToAction = this._passCommandToAction;
+
+ cmd._executableFile = opts.executableFile; // Custom name for executable file
+ this.commands.push(cmd);
+ cmd.parseExpectedArgs(args);
+ cmd.parent = this;
+
+ if (desc) return this;
+ return cmd;
+};
- /**
- * Define a command.
- *
- * There are two styles of command: pay attention to where to put the description.
- *
- * Examples:
- *
- * // Command implemented using action handler (description is supplied separately to `.command`)
- * program
- * .command('clone <source> [destination]')
- * .description('clone a repository into a newly created directory')
- * .action((source, destination) => {
- * console.log('clone command called');
- * });
- *
- * // Command implemented using separate executable file (description is second parameter to `.command`)
- * program
- * .command('start <service>', 'start named service')
- * .command('stop [service]', 'stop named service, or all if no name supplied');
- *
- * @param {string} nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`
- * @param {Object|string} [actionOptsOrExecDesc] - configuration options (for action), or description (for executable)
- * @param {Object} [execOpts] - configuration options (for executable)
- * @return {Command} returns new command for action handler, or `this` for executable command
- */
+/**
+ * Define argument syntax for the top-level command.
+ *
+ * @api public
+ */
- command(nameAndArgs, actionOptsOrExecDesc, execOpts) {
- let desc = actionOptsOrExecDesc;
- let opts = execOpts;
- if (typeof desc === 'object' && desc !== null) {
- opts = desc;
- desc = null;
- }
- opts = opts || {};
- const args = nameAndArgs.split(/ +/);
- const cmd = this.createCommand(args.shift());
+Command.prototype.arguments = function(desc) {
+ return this.parseExpectedArgs(desc.split(/ +/));
+};
- if (desc) {
- cmd.description(desc);
- cmd._executableHandler = true;
- }
- if (opts.isDefault) this._defaultCommandName = cmd._name;
-
- cmd._outputConfiguration = this._outputConfiguration;
-
- cmd._hidden = !!(opts.noHelp || opts.hidden); // noHelp is deprecated old name for hidden
- cmd._hasHelpOption = this._hasHelpOption;
- cmd._helpFlags = this._helpFlags;
- cmd._helpDescription = this._helpDescription;
- cmd._helpShortFlag = this._helpShortFlag;
- cmd._helpLongFlag = this._helpLongFlag;
- cmd._helpCommandName = this._helpCommandName;
- cmd._helpCommandnameAndArgs = this._helpCommandnameAndArgs;
- cmd._helpCommandDescription = this._helpCommandDescription;
- cmd._helpConfiguration = this._helpConfiguration;
- cmd._exitCallback = this._exitCallback;
- cmd._storeOptionsAsProperties = this._storeOptionsAsProperties;
- cmd._combineFlagAndOptionalValue = this._combineFlagAndOptionalValue;
- cmd._allowExcessArguments = this._allowExcessArguments;
- cmd._enablePositionalOptions = this._enablePositionalOptions;
-
- cmd._executableFile = opts.executableFile || null; // Custom name for executable file, set missing to null to match constructor
- this.commands.push(cmd);
- cmd._parseExpectedArgs(args);
- cmd.parent = this;
-
- if (desc) return this;
- return cmd;
- };
+/**
+ * Add an implicit `help [cmd]` subcommand
+ * which invokes `--help` for the given command.
+ *
+ * @api private
+ */
- /**
- * Factory routine to create a new unattached command.
- *
- * See .command() for creating an attached subcommand, which uses this routine to
- * create the command. You can override createCommand to customise subcommands.
- *
- * @param {string} [name]
- * @return {Command} new command
- */
+Command.prototype.addImplicitHelpCommand = function() {
+ this.command('help [cmd]', 'display help for [cmd]');
+};
- createCommand(name) {
- return new Command(name);
- };
+/**
+ * Parse expected `args`.
+ *
+ * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`.
+ *
+ * @param {Array} args
+ * @return {Command} for chaining
+ * @api public
+ */
- /**
- * You can customise the help with a subclass of Help by overriding createHelp,
- * or by overriding Help properties using configureHelp().
- *
- * @return {Help}
- */
+Command.prototype.parseExpectedArgs = function(args) {
+ if (!args.length) return;
+ var self = this;
+ args.forEach(function(arg) {
+ var argDetails = {
+ required: false,
+ name: '',
+ variadic: false
+ };
- createHelp() {
- return Object.assign(new Help(), this.configureHelp());
- };
+ switch (arg[0]) {
+ case '<':
+ argDetails.required = true;
+ argDetails.name = arg.slice(1, -1);
+ break;
+ case '[':
+ argDetails.name = arg.slice(1, -1);
+ break;
+ }
- /**
- * You can customise the help by overriding Help properties using configureHelp(),
- * or with a subclass of Help by overriding createHelp().
- *
- * @param {Object} [configuration] - configuration options
- * @return {Command|Object} `this` command for chaining, or stored configuration
- */
+ if (argDetails.name.length > 3 && argDetails.name.slice(-3) === '...') {
+ argDetails.variadic = true;
+ argDetails.name = argDetails.name.slice(0, -3);
+ }
+ if (argDetails.name) {
+ self._args.push(argDetails);
+ }
+ });
+ return this;
+};
- configureHelp(configuration) {
- if (configuration === undefined) return this._helpConfiguration;
+/**
+ * Register callback to use as replacement for calling process.exit.
+ *
+ * @param {Function} [fn] optional callback which will be passed a CommanderError, defaults to throwing
+ * @return {Command} for chaining
+ * @api public
+ */
- this._helpConfiguration = configuration;
- return this;
+Command.prototype.exitOverride = function(fn) {
+ if (fn) {
+ this._exitCallback = fn;
+ } else {
+ this._exitCallback = function(err) {
+ if (err.code !== 'commander.executeSubCommandAsync') {
+ throw err;
+ } else {
+ // Async callback from spawn events, not useful to throw.
+ }
+ };
}
+ return this;
+};
- /**
- * The default output goes to stdout and stderr. You can customise this for special
- * applications. You can also customise the display of errors by overriding outputError.
- *
- * The configuration properties are all functions:
- *
- * // functions to change where being written, stdout and stderr
- * writeOut(str)
- * writeErr(str)
- * // matching functions to specify width for wrapping help
- * getOutHelpWidth()
- * getErrHelpWidth()
- * // functions based on what is being written out
- * outputError(str, write) // used for displaying errors, and not used for displaying help
- *
- * @param {Object} [configuration] - configuration options
- * @return {Command|Object} `this` command for chaining, or stored configuration
- */
-
- configureOutput(configuration) {
- if (configuration === undefined) return this._outputConfiguration;
+/**
+ * Call process.exit, and _exitCallback if defined.
+ *
+ * @param {Number} exitCode exit code for using with process.exit
+ * @param {String} code an id string representing the error
+ * @param {String} message human-readable description of the error
+ * @return never
+ * @api private
+ */
- Object.assign(this._outputConfiguration, configuration);
- return this;
+Command.prototype._exit = function(exitCode, code, message) {
+ if (this._exitCallback) {
+ this._exitCallback(new CommanderError(exitCode, code, message));
+ // Expecting this line is not reached.
}
+ process.exit(exitCode);
+};
- /**
- * Add a prepared subcommand.
- *
- * See .command() for creating an attached subcommand which inherits settings from its parent.
- *
- * @param {Command} cmd - new subcommand
- * @param {Object} [opts] - configuration options
- * @return {Command} `this` command for chaining
- */
+/**
+ * Register callback `fn` for the command.
+ *
+ * Examples:
+ *
+ * program
+ * .command('help')
+ * .description('display verbose help')
+ * .action(function() {
+ * // output help here
+ * });
+ *
+ * @param {Function} fn
+ * @return {Command} for chaining
+ * @api public
+ */
- addCommand(cmd, opts) {
- if (!cmd._name) throw new Error('Command passed to .addCommand() must have a name');
+Command.prototype.action = function(fn) {
+ var self = this;
+ var listener = function(args, unknown) {
+ // Parse any so-far unknown options
+ args = args || [];
+ unknown = unknown || [];
- // To keep things simple, block automatic name generation for deeply nested executables.
- // Fail fast and detect when adding rather than later when parsing.
- function checkExplicitNames(commandArray) {
- commandArray.forEach((cmd) => {
- if (cmd._executableHandler && !cmd._executableFile) {
- throw new Error(`Must specify executableFile for deeply nested executable: ${cmd.name()}`);
- }
- checkExplicitNames(cmd.commands);
- });
- }
- checkExplicitNames(cmd.commands);
+ var parsed = self.parseOptions(unknown);
- opts = opts || {};
- if (opts.isDefault) this._defaultCommandName = cmd._name;
- if (opts.noHelp || opts.hidden) cmd._hidden = true; // modifying passed command due to existing implementation
+ // Output help if necessary
+ outputHelpIfRequested(self, parsed.unknown);
+ self._checkForMissingMandatoryOptions();
- this.commands.push(cmd);
- cmd.parent = this;
- return this;
- };
+ // If there are still any unknown options, then we simply
+ // die, unless someone asked for help, in which case we give it
+ // to them, and then we die.
+ if (parsed.unknown.length > 0) {
+ self.unknownOption(parsed.unknown[0]);
+ }
- /**
- * Define argument syntax for the command.
- */
+ // Leftover arguments need to be pushed back. Fixes issue #56
+ if (parsed.args.length) args = parsed.args.concat(args);
- arguments(desc) {
- return this._parseExpectedArgs(desc.split(/ +/));
- };
+ self._args.forEach(function(arg, i) {
+ if (arg.required && args[i] == null) {
+ self.missingArgument(arg.name);
+ } else if (arg.variadic) {
+ if (i !== self._args.length - 1) {
+ self.variadicArgNotLast(arg.name);
+ }
- /**
- * Override default decision whether to add implicit help command.
- *
- * addHelpCommand() // force on
- * addHelpCommand(false); // force off
- * addHelpCommand('help [cmd]', 'display help for [cmd]'); // force on with custom details
- *
- * @return {Command} `this` command for chaining
- */
+ args[i] = args.splice(i);
+ }
+ });
- addHelpCommand(enableOrNameAndArgs, description) {
- if (enableOrNameAndArgs === false) {
- this._addImplicitHelpCommand = false;
+ // The .action callback takes an extra parameter which is the command itself.
+ var expectedArgsCount = self._args.length;
+ var actionArgs = args.slice(0, expectedArgsCount);
+ if (self._passCommandToAction) {
+ actionArgs[expectedArgsCount] = self;
} else {
- this._addImplicitHelpCommand = true;
- if (typeof enableOrNameAndArgs === 'string') {
- this._helpCommandName = enableOrNameAndArgs.split(' ')[0];
- this._helpCommandnameAndArgs = enableOrNameAndArgs;
- }
- this._helpCommandDescription = description || this._helpCommandDescription;
+ actionArgs[expectedArgsCount] = self.opts();
+ }
+ // Add the extra arguments so available too.
+ if (args.length > expectedArgsCount) {
+ actionArgs.push(args.slice(expectedArgsCount));
}
- return this;
- };
-
- /**
- * @return {boolean}
- * @api private
- */
- _hasImplicitHelpCommand() {
- if (this._addImplicitHelpCommand === undefined) {
- return this.commands.length && !this._actionHandler && !this._findCommand('help');
+ const actionResult = fn.apply(self, actionArgs);
+ // Remember result in case it is async. Assume parseAsync getting called on root.
+ let rootCommand = self;
+ while (rootCommand.parent) {
+ rootCommand = rootCommand.parent;
}
- return this._addImplicitHelpCommand;
+ rootCommand._actionResults.push(actionResult);
};
+ var parent = this.parent || this;
+ var name = parent === this ? '*' : this._name;
+ parent.on('command:' + name, listener);
+ if (this._alias) parent.on('command:' + this._alias, listener);
+ return this;
+};
- /**
- * Parse expected `args`.
- *
- * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`.
- *
- * @param {Array} args
- * @return {Command} `this` command for chaining
- * @api private
- */
+/**
+ * Internal implementation shared by .option() and .requiredOption()
+ *
+ * @param {Object} config
+ * @param {String} flags
+ * @param {String} description
+ * @param {Function|*} [fn] - custom option processing function or default vaue
+ * @param {*} [defaultValue]
+ * @return {Command} for chaining
+ * @api private
+ */
- _parseExpectedArgs(args) {
- if (!args.length) return;
- args.forEach((arg) => {
- const argDetails = {
- required: false,
- name: '',
- variadic: false
+Command.prototype._optionEx = function(config, flags, description, fn, defaultValue) {
+ var self = this,
+ option = new Option(flags, description),
+ oname = option.name(),
+ name = option.attributeName();
+ option.mandatory = !!config.mandatory;
+
+ // default as 3rd arg
+ if (typeof fn !== 'function') {
+ if (fn instanceof RegExp) {
+ // This is a bit simplistic (especially no error messages), and probably better handled by caller using custom option processing.
+ // No longer documented in README, but still present for backwards compatibility.
+ var regex = fn;
+ fn = function(val, def) {
+ var m = regex.exec(val);
+ return m ? m[0] : def;
};
-
- switch (arg[0]) {
- case '<':
- argDetails.required = true;
- argDetails.name = arg.slice(1, -1);
- break;
- case '[':
- argDetails.name = arg.slice(1, -1);
- break;
- }
-
- if (argDetails.name.length > 3 && argDetails.name.slice(-3) === '...') {
- argDetails.variadic = true;
- argDetails.name = argDetails.name.slice(0, -3);
- }
- if (argDetails.name) {
- this._args.push(argDetails);
- }
- });
- this._args.forEach((arg, i) => {
- if (arg.variadic && i < this._args.length - 1) {
- throw new Error(`only the last argument can be variadic '${arg.name}'`);
- }
- });
- return this;
- };
-
- /**
- * Register callback to use as replacement for calling process.exit.
- *
- * @param {Function} [fn] optional callback which will be passed a CommanderError, defaults to throwing
- * @return {Command} `this` command for chaining
- */
-
- exitOverride(fn) {
- if (fn) {
- this._exitCallback = fn;
} else {
- this._exitCallback = (err) => {
- if (err.code !== 'commander.executeSubCommandAsync') {
- throw err;
- } else {
- // Async callback from spawn events, not useful to throw.
- }
- };
+ defaultValue = fn;
+ fn = null;
}
- return this;
- };
-
- /**
- * Call process.exit, and _exitCallback if defined.
- *
- * @param {number} exitCode exit code for using with process.exit
- * @param {string} code an id string representing the error
- * @param {string} message human-readable description of the error
- * @return never
- * @api private
- */
+ }
- _exit(exitCode, code, message) {
- if (this._exitCallback) {
- this._exitCallback(new CommanderError(exitCode, code, message));
- // Expecting this line is not reached.
+ // preassign default value for --no-*, [optional], <required>, or plain flag if boolean value
+ if (option.negate || option.optional || option.required || typeof defaultValue === 'boolean') {
+ // when --no-foo we make sure default is true, unless a --foo option is already defined
+ if (option.negate) {
+ const positiveLongFlag = option.long.replace(/^--no-/, '--');
+ defaultValue = self.optionFor(positiveLongFlag) ? self._getOptionValue(name) : true;
}
- process.exit(exitCode);
- };
+ // preassign only if we have a default
+ if (defaultValue !== undefined) {
+ self._setOptionValue(name, defaultValue);
+ option.defaultValue = defaultValue;
+ }
+ }
- /**
- * Register callback `fn` for the command.
- *
- * Examples:
- *
- * program
- * .command('help')
- * .description('display verbose help')
- * .action(function() {
- * // output help here
- * });
- *
- * @param {Function} fn
- * @return {Command} `this` command for chaining
- */
+ // register the option
+ this.options.push(option);
- action(fn) {
- const listener = (args) => {
- // The .action callback takes an extra parameter which is the command or options.
- const expectedArgsCount = this._args.length;
- const actionArgs = args.slice(0, expectedArgsCount);
- if (this._storeOptionsAsProperties) {
- actionArgs[expectedArgsCount] = this; // backwards compatible "options"
- } else {
- actionArgs[expectedArgsCount] = this.opts();
- }
- actionArgs.push(this);
+ // when it's passed assign the value
+ // and conditionally invoke the callback
+ this.on('option:' + oname, function(val) {
+ // coercion
+ if (val !== null && fn) {
+ val = fn(val, self._getOptionValue(name) === undefined ? defaultValue : self._getOptionValue(name));
+ }
- const actionResult = fn.apply(this, actionArgs);
- // Remember result in case it is async. Assume parseAsync getting called on root.
- let rootCommand = this;
- while (rootCommand.parent) {
- rootCommand = rootCommand.parent;
+ // unassigned or boolean value
+ if (typeof self._getOptionValue(name) === 'boolean' || typeof self._getOptionValue(name) === 'undefined') {
+ // if no value, negate false, and we have a default, then use it!
+ if (val == null) {
+ self._setOptionValue(name, option.negate
+ ? false
+ : defaultValue || true);
+ } else {
+ self._setOptionValue(name, val);
}
- rootCommand._actionResults.push(actionResult);
- };
- this._actionHandler = listener;
- return this;
- };
+ } else if (val !== null) {
+ // reassign
+ self._setOptionValue(name, option.negate ? false : val);
+ }
+ });
- /**
- * Factory routine to create a new unattached option.
- *
- * See .option() for creating an attached option, which uses this routine to
- * create the option. You can override createOption to return a custom option.
- *
- * @param {string} flags
- * @param {string} [description]
- * @return {Option} new option
- */
+ return this;
+};
- createOption(flags, description) {
- return new Option(flags, description);
- };
+/**
+ * Define option with `flags`, `description` and optional
+ * coercion `fn`.
+ *
+ * The `flags` string should contain both the short and long flags,
+ * separated by comma, a pipe or space. The following are all valid
+ * all will output this way when `--help` is used.
+ *
+ * "-p, --pepper"
+ * "-p|--pepper"
+ * "-p --pepper"
+ *
+ * Examples:
+ *
+ * // simple boolean defaulting to undefined
+ * program.option('-p, --pepper', 'add pepper');
+ *
+ * program.pepper
+ * // => undefined
+ *
+ * --pepper
+ * program.pepper
+ * // => true
+ *
+ * // simple boolean defaulting to true (unless non-negated option is also defined)
+ * program.option('-C, --no-cheese', 'remove cheese');
+ *
+ * program.cheese
+ * // => true
+ *
+ * --no-cheese
+ * program.cheese
+ * // => false
+ *
+ * // required argument
+ * program.option('-C, --chdir <path>', 'change the working directory');
+ *
+ * --chdir /tmp
+ * program.chdir
+ * // => "/tmp"
+ *
+ * // optional argument
+ * program.option('-c, --cheese [type]', 'add cheese [marble]');
+ *
+ * @param {String} flags
+ * @param {String} description
+ * @param {Function|*} [fn] - custom option processing function or default vaue
+ * @param {*} [defaultValue]
+ * @return {Command} for chaining
+ * @api public
+ */
- /**
- * Add an option.
- *
- * @param {Option} option
- * @return {Command} `this` command for chaining
- */
- addOption(option) {
- const oname = option.name();
- const name = option.attributeName();
-
- let defaultValue = option.defaultValue;
-
- // preassign default value for --no-*, [optional], <required>, or plain flag if boolean value
- if (option.negate || option.optional || option.required || typeof defaultValue === 'boolean') {
- // when --no-foo we make sure default is true, unless a --foo option is already defined
- if (option.negate) {
- const positiveLongFlag = option.long.replace(/^--no-/, '--');
- defaultValue = this._findOption(positiveLongFlag) ? this._getOptionValue(name) : true;
- }
- // preassign only if we have a default
- if (defaultValue !== undefined) {
- this._setOptionValue(name, defaultValue);
- }
- }
+Command.prototype.option = function(flags, description, fn, defaultValue) {
+ return this._optionEx({}, flags, description, fn, defaultValue);
+};
- // register the option
- this.options.push(option);
-
- // when it's passed assign the value
- // and conditionally invoke the callback
- this.on('option:' + oname, (val) => {
- const oldValue = this._getOptionValue(name);
-
- // custom processing
- if (val !== null && option.parseArg) {
- try {
- val = option.parseArg(val, oldValue === undefined ? defaultValue : oldValue);
- } catch (err) {
- if (err.code === 'commander.invalidOptionArgument') {
- const message = `error: option '${option.flags}' argument '${val}' is invalid. ${err.message}`;
- this._displayError(err.exitCode, err.code, message);
- }
- throw err;
- }
- } else if (val !== null && option.variadic) {
- val = option._concatValue(val, oldValue);
- }
+/*
+ * Add a required option which must have a value after parsing. This usually means
+ * the option must be specified on the command line. (Otherwise the same as .option().)
+ *
+ * The `flags` string should contain both the short and long flags, separated by comma, a pipe or space.
+ *
+ * @param {String} flags
+ * @param {String} description
+ * @param {Function|*} [fn] - custom option processing function or default vaue
+ * @param {*} [defaultValue]
+ * @return {Command} for chaining
+ * @api public
+ */
- // unassigned or boolean value
- if (typeof oldValue === 'boolean' || typeof oldValue === 'undefined') {
- // if no value, negate false, and we have a default, then use it!
- if (val == null) {
- this._setOptionValue(name, option.negate
- ? false
- : defaultValue || true);
- } else {
- this._setOptionValue(name, val);
- }
- } else if (val !== null) {
- // reassign
- this._setOptionValue(name, option.negate ? false : val);
- }
- });
+Command.prototype.requiredOption = function(flags, description, fn, defaultValue) {
+ return this._optionEx({ mandatory: true }, flags, description, fn, defaultValue);
+};
- return this;
- }
+/**
+ * Allow unknown options on the command line.
+ *
+ * @param {Boolean} arg if `true` or omitted, no error will be thrown
+ * for unknown options.
+ * @api public
+ */
+Command.prototype.allowUnknownOption = function(arg) {
+ this._allowUnknownOption = arguments.length === 0 || arg;
+ return this;
+};
- /**
- * Internal implementation shared by .option() and .requiredOption()
- *
- * @api private
- */
- _optionEx(config, flags, description, fn, defaultValue) {
- const option = this.createOption(flags, description);
- option.makeOptionMandatory(!!config.mandatory);
- if (typeof fn === 'function') {
- option.default(defaultValue).argParser(fn);
- } else if (fn instanceof RegExp) {
- // deprecated
- const regex = fn;
- fn = (val, def) => {
- const m = regex.exec(val);
- return m ? m[0] : def;
- };
- option.default(defaultValue).argParser(fn);
- } else {
- option.default(fn);
- }
+/**
+ * Whether to store option values as properties on command object,
+ * or store separately (specify false). In both cases the option values can be accessed using .opts().
+ *
+ * @param {boolean} value
+ * @return {Command} Command for chaining
+ * @api public
+ */
- return this.addOption(option);
+Command.prototype.storeOptionsAsProperties = function(value) {
+ this._storeOptionsAsProperties = (value === undefined) || value;
+ if (this.options.length) {
+ // This is for programmer, not end user.
+ console.error('Commander usage error: call storeOptionsAsProperties before adding options');
}
+ return this;
+};
- /**
- * Define option with `flags`, `description` and optional
- * coercion `fn`.
- *
- * The `flags` string contains the short and/or long flags,
- * separated by comma, a pipe or space. The following are all valid
- * all will output this way when `--help` is used.
- *
- * "-p, --pepper"
- * "-p|--pepper"
- * "-p --pepper"
- *
- * Examples:
- *
- * // simple boolean defaulting to undefined
- * program.option('-p, --pepper', 'add pepper');
- *
- * program.pepper
- * // => undefined
- *
- * --pepper
- * program.pepper
- * // => true
- *
- * // simple boolean defaulting to true (unless non-negated option is also defined)
- * program.option('-C, --no-cheese', 'remove cheese');
- *
- * program.cheese
- * // => true
- *
- * --no-cheese
- * program.cheese
- * // => false
- *
- * // required argument
- * program.option('-C, --chdir <path>', 'change the working directory');
- *
- * --chdir /tmp
- * program.chdir
- * // => "/tmp"
- *
- * // optional argument
- * program.option('-c, --cheese [type]', 'add cheese [marble]');
- *
- * @param {string} flags
- * @param {string} [description]
- * @param {Function|*} [fn] - custom option processing function or default value
- * @param {*} [defaultValue]
- * @return {Command} `this` command for chaining
- */
-
- option(flags, description, fn, defaultValue) {
- return this._optionEx({}, flags, description, fn, defaultValue);
- };
-
- /**
- * Add a required option which must have a value after parsing. This usually means
- * the option must be specified on the command line. (Otherwise the same as .option().)
- *
- * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space.
+/**
+ * Whether to pass command to action handler,
+ * or just the options (specify false).
*
- * @param {string} flags
- * @param {string} [description]
- * @param {Function|*} [fn] - custom option processing function or default value
- * @param {*} [defaultValue]
- * @return {Command} `this` command for chaining
+ * @param {boolean} value
+ * @return {Command} Command for chaining
+ * @api public
*/
- requiredOption(flags, description, fn, defaultValue) {
- return this._optionEx({ mandatory: true }, flags, description, fn, defaultValue);
- };
+Command.prototype.passCommandToAction = function(value) {
+ this._passCommandToAction = (value === undefined) || value;
+ return this;
+};
- /**
- * Alter parsing of short flags with optional values.
- *
- * Examples:
- *
- * // for `.option('-f,--flag [value]'):
- * .combineFlagAndOptionalValue(true) // `-f80` is treated like `--flag=80`, this is the default behaviour
- * .combineFlagAndOptionalValue(false) // `-fb` is treated like `-f -b`
- *
- * @param {Boolean} [combine=true] - if `true` or omitted, an optional value can be specified directly after the flag.
- */
- combineFlagAndOptionalValue(combine = true) {
- this._combineFlagAndOptionalValue = !!combine;
- return this;
- };
+/**
+ * Store option value
+ *
+ * @param {String} key
+ * @param {Object} value
+ * @api private
+ */
- /**
- * Allow unknown options on the command line.
- *
- * @param {Boolean} [allowUnknown=true] - if `true` or omitted, no error will be thrown
- * for unknown options.
- */
- allowUnknownOption(allowUnknown = true) {
- this._allowUnknownOption = !!allowUnknown;
- return this;
- };
+Command.prototype._setOptionValue = function(key, value) {
+ if (this._storeOptionsAsProperties) {
+ this[key] = value;
+ } else {
+ this._optionValues[key] = value;
+ }
+};
- /**
- * Allow excess command-arguments on the command line. Pass false to make excess arguments an error.
- *
- * @param {Boolean} [allowExcess=true] - if `true` or omitted, no error will be thrown
- * for excess arguments.
- */
- allowExcessArguments(allowExcess = true) {
- this._allowExcessArguments = !!allowExcess;
- return this;
- };
+/**
+ * Retrieve option value
+ *
+ * @param {String} key
+ * @return {Object} value
+ * @api private
+ */
- /**
- * Enable positional options. Positional means global options are specified before subcommands which lets
- * subcommands reuse the same option names, and also enables subcommands to turn on passThroughOptions.
- * The default behaviour is non-positional and global options may appear anywhere on the command line.
- *
- * @param {Boolean} [positional=true]
- */
- enablePositionalOptions(positional = true) {
- this._enablePositionalOptions = !!positional;
- return this;
- };
+Command.prototype._getOptionValue = function(key) {
+ if (this._storeOptionsAsProperties) {
+ return this[key];
+ }
+ return this._optionValues[key];
+};
- /**
- * Pass through options that come after command-arguments rather than treat them as command-options,
- * so actual command-options come before command-arguments. Turning this on for a subcommand requires
- * positional options to have been enabled on the program (parent commands).
- * The default behaviour is non-positional and options may appear before or after command-arguments.
- *
- * @param {Boolean} [passThrough=true]
- * for unknown options.
- */
- passThroughOptions(passThrough = true) {
- this._passThroughOptions = !!passThrough;
- if (!!this.parent && passThrough && !this.parent._enablePositionalOptions) {
- throw new Error('passThroughOptions can not be used without turning on enablePositionalOptions for parent command(s)');
- }
- return this;
- };
+/**
+ * Parse `argv`, setting options and invoking commands when defined.
+ *
+ * @param {Array} argv
+ * @return {Command} for chaining
+ * @api public
+ */
- /**
- * Whether to store option values as properties on command object,
- * or store separately (specify false). In both cases the option values can be accessed using .opts().
- *
- * @param {boolean} [storeAsProperties=true]
- * @return {Command} `this` command for chaining
- */
-
- storeOptionsAsProperties(storeAsProperties = true) {
- this._storeOptionsAsProperties = !!storeAsProperties;
- if (this.options.length) {
- throw new Error('call .storeOptionsAsProperties() before adding options');
- }
- return this;
- };
+Command.prototype.parse = function(argv) {
+ // implicit help
+ if (this.executables) this.addImplicitHelpCommand();
- /**
- * Store option value
- *
- * @param {string} key
- * @param {Object} value
- * @api private
- */
+ // store raw args
+ this.rawArgs = argv;
- _setOptionValue(key, value) {
- if (this._storeOptionsAsProperties) {
- this[key] = value;
- } else {
- this._optionValues[key] = value;
- }
- };
+ // guess name
+ this._name = this._name || basename(argv[1], '.js');
- /**
- * Retrieve option value
- *
- * @param {string} key
- * @return {Object} value
- * @api private
- */
+ // github-style sub-commands with no sub-command
+ if (this.executables && argv.length < 3 && !this.defaultExecutable) {
+ // this user needs help
+ argv.push(this._helpLongFlag);
+ }
- _getOptionValue(key) {
- if (this._storeOptionsAsProperties) {
- return this[key];
- }
- return this._optionValues[key];
- };
+ // process argv
+ var normalized = this.normalize(argv.slice(2));
+ var parsed = this.parseOptions(normalized);
+ var args = this.args = parsed.args;
- /**
- * Parse `argv`, setting options and invoking commands when defined.
- *
- * The default expectation is that the arguments are from node and have the application as argv[0]
- * and the script being run in argv[1], with user parameters after that.
- *
- * Examples:
- *
- * program.parse(process.argv);
- * program.parse(); // implicitly use process.argv and auto-detect node vs electron conventions
- * program.parse(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]
- *
- * @param {string[]} [argv] - optional, defaults to process.argv
- * @param {Object} [parseOptions] - optionally specify style of options with from: node/user/electron
- * @param {string} [parseOptions.from] - where the args are from: 'node', 'user', 'electron'
- * @return {Command} `this` command for chaining
- */
+ var result = this.parseArgs(this.args, parsed.unknown);
- parse(argv, parseOptions) {
- if (argv !== undefined && !Array.isArray(argv)) {
- throw new Error('first parameter to parse must be array or undefined');
- }
- parseOptions = parseOptions || {};
-
- // Default to using process.argv
- if (argv === undefined) {
- argv = process.argv;
- // @ts-ignore: unknown property
- if (process.versions && process.versions.electron) {
- parseOptions.from = 'electron';
- }
- }
- this.rawArgs = argv.slice();
-
- // make it a little easier for callers by supporting various argv conventions
- let userArgs;
- switch (parseOptions.from) {
- case undefined:
- case 'node':
- this._scriptPath = argv[1];
- userArgs = argv.slice(2);
- break;
- case 'electron':
- // @ts-ignore: unknown property
- if (process.defaultApp) {
- this._scriptPath = argv[1];
- userArgs = argv.slice(2);
- } else {
- userArgs = argv.slice(1);
- }
- break;
- case 'user':
- userArgs = argv.slice(0);
- break;
- default:
- throw new Error(`unexpected parse option { from: '${parseOptions.from}' }`);
- }
- if (!this._scriptPath && require.main) {
- this._scriptPath = require.main.filename;
- }
+ if (args[0] === 'help' && args.length === 1) this.help();
- // Guess name, used in usage in help.
- this._name = this._name || (this._scriptPath && path.basename(this._scriptPath, path.extname(this._scriptPath)));
+ // Note for future: we could return early if we found an action handler in parseArgs, as none of following code needed?
- // Let's go!
- this._parseCommand([], userArgs);
+ // <cmd> --help
+ if (args[0] === 'help') {
+ args[0] = args[1];
+ args[1] = this._helpLongFlag;
+ } else {
+ // If calling through to executable subcommand we could check for help flags before failing,
+ // but a somewhat unlikely case since program options not passed to executable subcommands.
+ // Wait for reports to see if check needed and what usage pattern is.
+ this._checkForMissingMandatoryOptions();
+ }
- return this;
- };
+ // executable sub-commands
+ // (Debugging note for future: args[0] is not right if an action has been called)
+ var name = result.args[0];
+ var subCommand = null;
- /**
- * Parse `argv`, setting options and invoking commands when defined.
- *
- * Use parseAsync instead of parse if any of your action handlers are async. Returns a Promise.
- *
- * The default expectation is that the arguments are from node and have the application as argv[0]
- * and the script being run in argv[1], with user parameters after that.
- *
- * Examples:
- *
- * program.parseAsync(process.argv);
- * program.parseAsync(); // implicitly use process.argv and auto-detect node vs electron conventions
- * program.parseAsync(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]
- *
- * @param {string[]} [argv]
- * @param {Object} [parseOptions]
- * @param {string} parseOptions.from - where the args are from: 'node', 'user', 'electron'
- * @return {Promise}
- */
+ // Look for subcommand
+ if (name) {
+ subCommand = this.commands.find(function(command) {
+ return command._name === name;
+ });
+ }
- parseAsync(argv, parseOptions) {
- this.parse(argv, parseOptions);
- return Promise.all(this._actionResults).then(() => this);
- };
+ // Look for alias
+ if (!subCommand && name) {
+ subCommand = this.commands.find(function(command) {
+ return command.alias() === name;
+ });
+ if (subCommand) {
+ name = subCommand._name;
+ args[0] = name;
+ }
+ }
- /**
- * Execute a sub-command executable.
- *
- * @api private
- */
+ // Look for default subcommand
+ if (!subCommand && this.defaultExecutable) {
+ name = this.defaultExecutable;
+ args.unshift(name);
+ subCommand = this.commands.find(function(command) {
+ return command._name === name;
+ });
+ }
- _executeSubCommand(subcommand, args) {
- args = args.slice();
- let launchWithNode = false; // Use node for source targets so do not need to get permissions correct, and on Windows.
- const sourceExt = ['.js', '.ts', '.tsx', '.mjs', '.cjs'];
+ if (this._execs.has(name)) {
+ return this.executeSubCommand(argv, args, parsed.unknown, subCommand ? subCommand._executableFile : undefined);
+ }
- // Not checking for help first. Unlikely to have mandatory and executable, and can't robustly test for help flags in external command.
- this._checkForMissingMandatoryOptions();
+ return result;
+};
- // Want the entry script as the reference for command name and directory for searching for other files.
- let scriptPath = this._scriptPath;
- // Fallback in case not set, due to how Command created or called.
- if (!scriptPath && require.main) {
- scriptPath = require.main.filename;
- }
+/**
+ * Parse `argv`, setting options and invoking commands when defined.
+ *
+ * Use parseAsync instead of parse if any of your action handlers are async. Returns a Promise.
+ *
+ * @param {Array} argv
+ * @return {Promise}
+ * @api public
+ */
+Command.prototype.parseAsync = function(argv) {
+ this.parse(argv);
+ return Promise.all(this._actionResults);
+};
- let baseDir;
- try {
- const resolvedLink = fs.realpathSync(scriptPath);
- baseDir = path.dirname(resolvedLink);
- } catch (e) {
- baseDir = '.'; // dummy, probably not going to find executable!
- }
+/**
+ * Execute a sub-command executable.
+ *
+ * @param {Array} argv
+ * @param {Array} args
+ * @param {Array} unknown
+ * @param {String} executableFile
+ * @api private
+ */
- // name of the subcommand, like `pm-install`
- let bin = path.basename(scriptPath, path.extname(scriptPath)) + '-' + subcommand._name;
- if (subcommand._executableFile) {
- bin = subcommand._executableFile;
- }
+Command.prototype.executeSubCommand = function(argv, args, unknown, executableFile) {
+ args = args.concat(unknown);
- const localBin = path.join(baseDir, bin);
- if (fs.existsSync(localBin)) {
- // prefer local `./<bin>` to bin in the $PATH
- bin = localBin;
- } else {
- // Look for source files.
- sourceExt.forEach((ext) => {
- if (fs.existsSync(`${localBin}${ext}`)) {
- bin = `${localBin}${ext}`;
- }
- });
- }
- launchWithNode = sourceExt.includes(path.extname(bin));
+ if (!args.length) this.help();
- let proc;
- if (process.platform !== 'win32') {
- if (launchWithNode) {
- args.unshift(bin);
- // add executable arguments to spawn
- args = incrementNodeInspectorPort(process.execArgv).concat(args);
+ var isExplicitJS = false; // Whether to use node to launch "executable"
- proc = childProcess.spawn(process.argv[0], args, { stdio: 'inherit' });
- } else {
- proc = childProcess.spawn(bin, args, { stdio: 'inherit' });
- }
- } else {
+ // executable
+ var pm = argv[1];
+ // name of the subcommand, like `pm-install`
+ var bin = basename(pm, path.extname(pm)) + '-' + args[0];
+ if (executableFile != null) {
+ bin = executableFile;
+ // Check for same extensions as we scan for below so get consistent launch behaviour.
+ var executableExt = path.extname(executableFile);
+ isExplicitJS = executableExt === '.js' || executableExt === '.ts' || executableExt === '.mjs';
+ }
+
+ // In case of globally installed, get the base dir where executable
+ // subcommand file should be located at
+ var baseDir;
+
+ var resolvedLink = fs.realpathSync(pm);
+
+ baseDir = dirname(resolvedLink);
+
+ // prefer local `./<bin>` to bin in the $PATH
+ var localBin = path.join(baseDir, bin);
+
+ // whether bin file is a js script with explicit `.js` or `.ts` extension
+ if (exists(localBin + '.js')) {
+ bin = localBin + '.js';
+ isExplicitJS = true;
+ } else if (exists(localBin + '.ts')) {
+ bin = localBin + '.ts';
+ isExplicitJS = true;
+ } else if (exists(localBin + '.mjs')) {
+ bin = localBin + '.mjs';
+ isExplicitJS = true;
+ } else if (exists(localBin)) {
+ bin = localBin;
+ }
+
+ args = args.slice(1);
+
+ var proc;
+ if (process.platform !== 'win32') {
+ if (isExplicitJS) {
args.unshift(bin);
// add executable arguments to spawn
args = incrementNodeInspectorPort(process.execArgv).concat(args);
- proc = childProcess.spawn(process.execPath, args, { stdio: 'inherit' });
+
+ proc = spawn(process.argv[0], args, { stdio: 'inherit' });
+ } else {
+ proc = spawn(bin, args, { stdio: 'inherit' });
}
+ } else {
+ args.unshift(bin);
+ // add executable arguments to spawn
+ args = incrementNodeInspectorPort(process.execArgv).concat(args);
+ proc = spawn(process.execPath, args, { stdio: 'inherit' });
+ }
- const signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP'];
- signals.forEach((signal) => {
- // @ts-ignore
- process.on(signal, () => {
- if (proc.killed === false && proc.exitCode === null) {
- proc.kill(signal);
- }
- });
+ var signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP'];
+ signals.forEach(function(signal) {
+ process.on(signal, function() {
+ if (proc.killed === false && proc.exitCode === null) {
+ proc.kill(signal);
+ }
});
+ });
- // By default terminate process when spawned process terminates.
- // Suppressing the exit if exitCallback defined is a bit messy and of limited use, but does allow process to stay running!
- const exitCallback = this._exitCallback;
+ // By default terminate process when spawned process terminates.
+ // Suppressing the exit if exitCallback defined is a bit messy and of limited use, but does allow process to stay running!
+ const exitCallback = this._exitCallback;
+ if (!exitCallback) {
+ proc.on('close', process.exit.bind(process));
+ } else {
+ proc.on('close', () => {
+ exitCallback(new CommanderError(process.exitCode || 0, 'commander.executeSubCommandAsync', '(close)'));
+ });
+ }
+ proc.on('error', function(err) {
+ if (err.code === 'ENOENT') {
+ console.error('error: %s(1) does not exist, try --help', bin);
+ } else if (err.code === 'EACCES') {
+ console.error('error: %s(1) not executable. try chmod or run with root', bin);
+ }
if (!exitCallback) {
- proc.on('close', process.exit.bind(process));
+ process.exit(1);
} else {
- proc.on('close', () => {
- exitCallback(new CommanderError(process.exitCode || 0, 'commander.executeSubCommandAsync', '(close)'));
- });
+ const wrappedError = new CommanderError(1, 'commander.executeSubCommandAsync', '(error)');
+ wrappedError.nestedError = err;
+ exitCallback(wrappedError);
}
- proc.on('error', (err) => {
- // @ts-ignore
- if (err.code === 'ENOENT') {
- const executableMissing = `'${bin}' does not exist
- - if '${subcommand._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
- - if the default executable name is not suitable, use the executableFile option to supply a custom name`;
- throw new Error(executableMissing);
- // @ts-ignore
- } else if (err.code === 'EACCES') {
- throw new Error(`'${bin}' not executable`);
- }
- if (!exitCallback) {
- process.exit(1);
- } else {
- const wrappedError = new CommanderError(1, 'commander.executeSubCommandAsync', '(error)');
- wrappedError.nestedError = err;
- exitCallback(wrappedError);
- }
- });
+ });
- // Store the reference to the child process
- this.runningCommand = proc;
- };
+ // Store the reference to the child process
+ this.runningCommand = proc;
+};
- /**
- * @api private
- */
- _dispatchSubcommand(commandName, operands, unknown) {
- const subCommand = this._findCommand(commandName);
- if (!subCommand) this.help({ error: true });
+/**
+ * Normalize `args`, splitting joined short flags. For example
+ * the arg "-abc" is equivalent to "-a -b -c".
+ * This also normalizes equal sign and splits "--abc=def" into "--abc def".
+ *
+ * @param {Array} args
+ * @return {Array}
+ * @api private
+ */
- if (subCommand._executableHandler) {
- this._executeSubCommand(subCommand, operands.concat(unknown));
- } else {
- subCommand._parseCommand(operands, unknown);
+Command.prototype.normalize = function(args) {
+ var ret = [],
+ arg,
+ lastOpt,
+ index,
+ short,
+ opt;
+
+ for (var i = 0, len = args.length; i < len; ++i) {
+ arg = args[i];
+ if (i > 0) {
+ lastOpt = this.optionFor(args[i - 1]);
}
- };
- /**
- * Process arguments in context of this command.
- *
- * @api private
- */
-
- _parseCommand(operands, unknown) {
- const parsed = this.parseOptions(unknown);
- operands = operands.concat(parsed.operands);
- unknown = parsed.unknown;
- this.args = operands.concat(unknown);
-
- if (operands && this._findCommand(operands[0])) {
- this._dispatchSubcommand(operands[0], operands.slice(1), unknown);
- } else if (this._hasImplicitHelpCommand() && operands[0] === this._helpCommandName) {
- if (operands.length === 1) {
- this.help();
+ if (arg === '--') {
+ // Honor option terminator
+ ret = ret.concat(args.slice(i));
+ break;
+ } else if (lastOpt && lastOpt.required) {
+ ret.push(arg);
+ } else if (arg.length > 2 && arg[0] === '-' && arg[1] !== '-') {
+ short = arg.slice(0, 2);
+ opt = this.optionFor(short);
+ if (opt && (opt.required || opt.optional)) {
+ ret.push(short);
+ ret.push(arg.slice(2));
} else {
- this._dispatchSubcommand(operands[1], [], [this._helpLongFlag]);
+ arg.slice(1).split('').forEach(function(c) {
+ ret.push('-' + c);
+ });
}
- } else if (this._defaultCommandName) {
- outputHelpIfRequested(this, unknown); // Run the help for default command from parent rather than passing to default command
- this._dispatchSubcommand(this._defaultCommandName, operands, unknown);
+ } else if (/^--/.test(arg) && ~(index = arg.indexOf('='))) {
+ ret.push(arg.slice(0, index), arg.slice(index + 1));
} else {
- if (this.commands.length && this.args.length === 0 && !this._actionHandler && !this._defaultCommandName) {
- // probably missing subcommand and no handler, user needs help
- this.help({ error: true });
- }
+ ret.push(arg);
+ }
+ }
- outputHelpIfRequested(this, parsed.unknown);
- this._checkForMissingMandatoryOptions();
+ return ret;
+};
- // We do not always call this check to avoid masking a "better" error, like unknown command.
- const checkForUnknownOptions = () => {
- if (parsed.unknown.length > 0) {
- this.unknownOption(parsed.unknown[0]);
- }
- };
+/**
+ * Parse command `args`.
+ *
+ * When listener(s) are available those
+ * callbacks are invoked, otherwise the "*"
+ * event is emitted and those actions are invoked.
+ *
+ * @param {Array} args
+ * @return {Command} for chaining
+ * @api private
+ */
- const commandEvent = `command:${this.name()}`;
- if (this._actionHandler) {
- checkForUnknownOptions();
- // Check expected arguments and collect variadic together.
- const args = this.args.slice();
- this._args.forEach((arg, i) => {
- if (arg.required && args[i] == null) {
- this.missingArgument(arg.name);
- } else if (arg.variadic) {
- args[i] = args.splice(i);
- args.length = Math.min(i + 1, args.length);
- }
- });
- if (args.length > this._args.length) {
- this._excessArguments(args);
- }
+Command.prototype.parseArgs = function(args, unknown) {
+ var name;
- this._actionHandler(args);
- if (this.parent) this.parent.emit(commandEvent, operands, unknown); // legacy
- } else if (this.parent && this.parent.listenerCount(commandEvent)) {
- checkForUnknownOptions();
- this.parent.emit(commandEvent, operands, unknown); // legacy
- } else if (operands.length) {
- if (this._findCommand('*')) { // legacy default command
- this._dispatchSubcommand('*', operands, unknown);
- } else if (this.listenerCount('command:*')) {
- // skip option check, emit event for possible misspelling suggestion
- this.emit('command:*', operands, unknown);
- } else if (this.commands.length) {
- this.unknownCommand();
- } else {
- checkForUnknownOptions();
- }
- } else if (this.commands.length) {
- // This command has subcommands and nothing hooked up at this level, so display help.
- this.help({ error: true });
- } else {
- checkForUnknownOptions();
- // fall through for caller to handle after calling .parse()
- }
+ if (args.length) {
+ name = args[0];
+ if (this.listeners('command:' + name).length) {
+ this.emit('command:' + args.shift(), args, unknown);
+ } else {
+ this.emit('command:*', args, unknown);
}
- };
+ } else {
+ outputHelpIfRequested(this, unknown);
- /**
- * Find matching command.
- *
- * @api private
- */
- _findCommand(name) {
- if (!name) return undefined;
- return this.commands.find(cmd => cmd._name === name || cmd._aliases.includes(name));
- };
-
- /**
- * Return an option matching `arg` if any.
- *
- * @param {string} arg
- * @return {Option}
- * @api private
- */
+ // If there were no args and we have unknown options,
+ // then they are extraneous and we need to error.
+ if (unknown.length > 0 && !this.defaultExecutable) {
+ this.unknownOption(unknown[0]);
+ }
+ if (this.commands.length === 0 &&
+ this._args.filter(function(a) { return a.required; }).length === 0) {
+ this.emit('command:*');
+ }
+ }
- _findOption(arg) {
- return this.options.find(option => option.is(arg));
- };
+ return this;
+};
- /**
- * Display an error message if a mandatory option does not have a value.
- * Lazy calling after checking for help flags from leaf subcommand.
- *
- * @api private
- */
+/**
+ * Return an option matching `arg` if any.
+ *
+ * @param {String} arg
+ * @return {Option}
+ * @api private
+ */
- _checkForMissingMandatoryOptions() {
- // Walk up hierarchy so can call in subcommand after checking for displaying help.
- for (let cmd = this; cmd; cmd = cmd.parent) {
- cmd.options.forEach((anOption) => {
- if (anOption.mandatory && (cmd._getOptionValue(anOption.attributeName()) === undefined)) {
- cmd.missingMandatoryOptionValue(anOption);
- }
- });
+Command.prototype.optionFor = function(arg) {
+ for (var i = 0, len = this.options.length; i < len; ++i) {
+ if (this.options[i].is(arg)) {
+ return this.options[i];
}
- };
+ }
+};
- /**
- * Parse options from `argv` removing known options,
- * and return argv split into operands and unknown arguments.
- *
- * Examples:
- *
- * argv => operands, unknown
- * --known kkk op => [op], []
- * op --known kkk => [op], []
- * sub --unknown uuu op => [sub], [--unknown uuu op]
- * sub -- --unknown uuu op => [sub --unknown uuu op], []
- *
- * @param {String[]} argv
- * @return {{operands: String[], unknown: String[]}}
- */
+/**
+ * Display an error message if a mandatory option does not have a value.
+ *
+ * @api private
+ */
- parseOptions(argv) {
- const operands = []; // operands, not options or values
- const unknown = []; // first unknown option and remaining unknown args
- let dest = operands;
- const args = argv.slice();
+Command.prototype._checkForMissingMandatoryOptions = function() {
+ // Walk up hierarchy so can call from action handler after checking for displaying help.
+ for (var cmd = this; cmd; cmd = cmd.parent) {
+ cmd.options.forEach((anOption) => {
+ if (anOption.mandatory && (cmd._getOptionValue(anOption.attributeName()) === undefined)) {
+ cmd.missingMandatoryOptionValue(anOption);
+ }
+ });
+ }
+};
- function maybeOption(arg) {
- return arg.length > 1 && arg[0] === '-';
- }
+/**
+ * Parse options from `argv` returning `argv`
+ * void of these options.
+ *
+ * @param {Array} argv
+ * @return {{args: Array, unknown: Array}}
+ * @api public
+ */
- // parse options
- let activeVariadicOption = null;
- while (args.length) {
- const arg = args.shift();
+Command.prototype.parseOptions = function(argv) {
+ var args = [],
+ len = argv.length,
+ literal,
+ option,
+ arg;
- // literal
- if (arg === '--') {
- if (dest === unknown) dest.push(arg);
- dest.push(...args);
- break;
- }
+ var unknownOptions = [];
- if (activeVariadicOption && !maybeOption(arg)) {
- this.emit(`option:${activeVariadicOption.name()}`, arg);
- continue;
- }
- activeVariadicOption = null;
-
- if (maybeOption(arg)) {
- const option = this._findOption(arg);
- // recognised option, call listener to assign value with possible custom processing
- if (option) {
- if (option.required) {
- const value = args.shift();
- if (value === undefined) this.optionMissingArgument(option);
- this.emit(`option:${option.name()}`, value);
- } else if (option.optional) {
- let value = null;
- // historical behaviour is optional value is following arg unless an option
- if (args.length > 0 && !maybeOption(args[0])) {
- value = args.shift();
- }
- this.emit(`option:${option.name()}`, value);
- } else { // boolean flag
- this.emit(`option:${option.name()}`);
- }
- activeVariadicOption = option.variadic ? option : null;
- continue;
- }
- }
+ // parse options
+ for (var i = 0; i < len; ++i) {
+ arg = argv[i];
- // Look for combo options following single dash, eat first one if known.
- if (arg.length > 2 && arg[0] === '-' && arg[1] !== '-') {
- const option = this._findOption(`-${arg[1]}`);
- if (option) {
- if (option.required || (option.optional && this._combineFlagAndOptionalValue)) {
- // option with value following in same argument
- this.emit(`option:${option.name()}`, arg.slice(2));
- } else {
- // boolean option, emit and put back remainder of arg for further processing
- this.emit(`option:${option.name()}`);
- args.unshift(`-${arg.slice(2)}`);
- }
- continue;
- }
- }
+ // literal args after --
+ if (literal) {
+ args.push(arg);
+ continue;
+ }
+
+ if (arg === '--') {
+ literal = true;
+ continue;
+ }
- // Look for known long flag with value, like --foo=bar
- if (/^--[^=]+=/.test(arg)) {
- const index = arg.indexOf('=');
- const option = this._findOption(arg.slice(0, index));
- if (option && (option.required || option.optional)) {
- this.emit(`option:${option.name()}`, arg.slice(index + 1));
- continue;
+ // find matching Option
+ option = this.optionFor(arg);
+
+ // option is defined
+ if (option) {
+ // requires arg
+ if (option.required) {
+ arg = argv[++i];
+ if (arg == null) return this.optionMissingArgument(option);
+ this.emit('option:' + option.name(), arg);
+ // optional arg
+ } else if (option.optional) {
+ arg = argv[i + 1];
+ if (arg == null || (arg[0] === '-' && arg !== '-')) {
+ arg = null;
+ } else {
+ ++i;
}
+ this.emit('option:' + option.name(), arg);
+ // flag
+ } else {
+ this.emit('option:' + option.name());
}
+ continue;
+ }
- // Not a recognised option by this command.
- // Might be a command-argument, or subcommand option, or unknown option, or help command or option.
+ // looks like an option
+ if (arg.length > 1 && arg[0] === '-') {
+ unknownOptions.push(arg);
- // An unknown option means further arguments also classified as unknown so can be reprocessed by subcommands.
- if (maybeOption(arg)) {
- dest = unknown;
+ // If the next argument looks like it might be
+ // an argument for this option, we pass it on.
+ // If it isn't, then it'll simply be ignored
+ if ((i + 1) < argv.length && (argv[i + 1][0] !== '-' || argv[i + 1] === '-')) {
+ unknownOptions.push(argv[++i]);
}
+ continue;
+ }
- // If using positionalOptions, stop processing our options at subcommand.
- if ((this._enablePositionalOptions || this._passThroughOptions) && operands.length === 0 && unknown.length === 0) {
- if (this._findCommand(arg)) {
- operands.push(arg);
- if (args.length > 0) unknown.push(...args);
- break;
- } else if (arg === this._helpCommandName && this._hasImplicitHelpCommand()) {
- operands.push(arg);
- if (args.length > 0) operands.push(...args);
- break;
- } else if (this._defaultCommandName) {
- unknown.push(arg);
- if (args.length > 0) unknown.push(...args);
- break;
- }
- }
+ // arg
+ args.push(arg);
+ }
- // If using passThroughOptions, stop processing options at first command-argument.
- if (this._passThroughOptions) {
- dest.push(arg);
- if (args.length > 0) dest.push(...args);
- break;
- }
+ return { args: args, unknown: unknownOptions };
+};
- // add arg
- dest.push(arg);
+/**
+ * Return an object containing options as key-value pairs
+ *
+ * @return {Object}
+ * @api public
+ */
+Command.prototype.opts = function() {
+ if (this._storeOptionsAsProperties) {
+ // Preserve original behaviour so backwards compatible when still using properties
+ var result = {},
+ len = this.options.length;
+
+ for (var i = 0; i < len; i++) {
+ var key = this.options[i].attributeName();
+ result[key] = key === this._versionOptionName ? this._version : this[key];
}
+ return result;
+ }
- return { operands, unknown };
- };
+ return this._optionValues;
+};
- /**
- * Return an object containing options as key-value pairs
- *
- * @return {Object}
- */
- opts() {
- if (this._storeOptionsAsProperties) {
- // Preserve original behaviour so backwards compatible when still using properties
- const result = {};
- const len = this.options.length;
-
- for (let i = 0; i < len; i++) {
- const key = this.options[i].attributeName();
- result[key] = key === this._versionOptionName ? this._version : this[key];
- }
- return result;
- }
+/**
+ * Argument `name` is missing.
+ *
+ * @param {String} name
+ * @api private
+ */
- return this._optionValues;
- };
+Command.prototype.missingArgument = function(name) {
+ const message = `error: missing required argument '${name}'`;
+ console.error(message);
+ this._exit(1, 'commander.missingArgument', message);
+};
- /**
- * Internal bottleneck for handling of parsing errors.
- *
- * @api private
- */
- _displayError(exitCode, code, message) {
- this._outputConfiguration.outputError(`${message}\n`, this._outputConfiguration.writeErr);
- this._exit(exitCode, code, message);
+/**
+ * `Option` is missing an argument, but received `flag` or nothing.
+ *
+ * @param {Option} option
+ * @param {String} [flag]
+ * @api private
+ */
+
+Command.prototype.optionMissingArgument = function(option, flag) {
+ let message;
+ if (flag) {
+ message = `error: option '${option.flags}' argument missing, got '${flag}'`;
+ } else {
+ message = `error: option '${option.flags}' argument missing`;
}
+ console.error(message);
+ this._exit(1, 'commander.optionMissingArgument', message);
+};
- /**
- * Argument `name` is missing.
- *
- * @param {string} name
- * @api private
- */
+/**
+ * `Option` does not have a value, and is a mandatory option.
+ *
+ * @param {Option} option
+ * @api private
+ */
- missingArgument(name) {
- const message = `error: missing required argument '${name}'`;
- this._displayError(1, 'commander.missingArgument', message);
- };
+Command.prototype.missingMandatoryOptionValue = function(option) {
+ const message = `error: required option '${option.flags}' not specified`;
+ console.error(message);
+ this._exit(1, 'commander.missingMandatoryOptionValue', message);
+};
- /**
- * `Option` is missing an argument.
- *
- * @param {Option} option
- * @api private
- */
+/**
+ * Unknown option `flag`.
+ *
+ * @param {String} flag
+ * @api private
+ */
- optionMissingArgument(option) {
- const message = `error: option '${option.flags}' argument missing`;
- this._displayError(1, 'commander.optionMissingArgument', message);
- };
+Command.prototype.unknownOption = function(flag) {
+ if (this._allowUnknownOption) return;
+ const message = `error: unknown option '${flag}'`;
+ console.error(message);
+ this._exit(1, 'commander.unknownOption', message);
+};
- /**
- * `Option` does not have a value, and is a mandatory option.
- *
- * @param {Option} option
- * @api private
- */
+/**
+ * Variadic argument with `name` is not the last argument as required.
+ *
+ * @param {String} name
+ * @api private
+ */
- missingMandatoryOptionValue(option) {
- const message = `error: required option '${option.flags}' not specified`;
- this._displayError(1, 'commander.missingMandatoryOptionValue', message);
- };
+Command.prototype.variadicArgNotLast = function(name) {
+ const message = `error: variadic arguments must be last '${name}'`;
+ console.error(message);
+ this._exit(1, 'commander.variadicArgNotLast', message);
+};
- /**
- * Unknown option `flag`.
- *
- * @param {string} flag
- * @api private
- */
+/**
+ * Set the program version to `str`.
+ *
+ * This method auto-registers the "-V, --version" flag
+ * which will print the version number when passed.
+ *
+ * You can optionally supply the flags and description to override the defaults.
+ *
+ * @param {String} str
+ * @param {String} [flags]
+ * @param {String} [description]
+ * @return {Command} for chaining
+ * @api public
+ */
- unknownOption(flag) {
- if (this._allowUnknownOption) return;
- const message = `error: unknown option '${flag}'`;
- this._displayError(1, 'commander.unknownOption', message);
- };
+Command.prototype.version = function(str, flags, description) {
+ if (arguments.length === 0) return this._version;
+ this._version = str;
+ flags = flags || '-V, --version';
+ description = description || 'output the version number';
+ var versionOption = new Option(flags, description);
+ this._versionOptionName = versionOption.long.substr(2) || 'version';
+ this.options.push(versionOption);
+ var self = this;
+ this.on('option:' + this._versionOptionName, function() {
+ process.stdout.write(str + '\n');
+ self._exit(0, 'commander.version', str);
+ });
+ return this;
+};
- /**
- * Excess arguments, more than expected.
- *
- * @param {string[]} receivedArgs
- * @api private
- */
+/**
+ * Set the description to `str`.
+ *
+ * @param {String} str
+ * @param {Object} [argsDescription]
+ * @return {String|Command}
+ * @api public
+ */
- _excessArguments(receivedArgs) {
- if (this._allowExcessArguments) return;
+Command.prototype.description = function(str, argsDescription) {
+ if (arguments.length === 0) return this._description;
+ this._description = str;
+ this._argsDescription = argsDescription;
+ return this;
+};
- const expected = this._args.length;
- const s = (expected === 1) ? '' : 's';
- const forSubcommand = this.parent ? ` for '${this.name()}'` : '';
- const message = `error: too many arguments${forSubcommand}. Expected ${expected} argument${s} but got ${receivedArgs.length}.`;
- this._displayError(1, 'commander.excessArguments', message);
- };
+/**
+ * Set an alias for the command
+ *
+ * @param {String} alias
+ * @return {String|Command}
+ * @api public
+ */
- /**
- * Unknown command.
- *
- * @api private
- */
+Command.prototype.alias = function(alias) {
+ var command = this;
+ if (this.commands.length !== 0) {
+ command = this.commands[this.commands.length - 1];
+ }
- unknownCommand() {
- const partCommands = [this.name()];
- for (let parentCmd = this.parent; parentCmd; parentCmd = parentCmd.parent) {
- partCommands.unshift(parentCmd.name());
- }
- const fullCommand = partCommands.join(' ');
- const message = `error: unknown command '${this.args[0]}'.` +
- (this._hasHelpOption ? ` See '${fullCommand} ${this._helpLongFlag}'.` : '');
- this._displayError(1, 'commander.unknownCommand', message);
- };
+ if (arguments.length === 0) return command._alias;
- /**
- * Set the program version to `str`.
- *
- * This method auto-registers the "-V, --version" flag
- * which will print the version number when passed.
- *
- * You can optionally supply the flags and description to override the defaults.
- *
- * @param {string} str
- * @param {string} [flags]
- * @param {string} [description]
- * @return {this | string} `this` command for chaining, or version string if no arguments
- */
+ if (alias === command._name) throw new Error('Command alias can\'t be the same as its name');
- version(str, flags, description) {
- if (str === undefined) return this._version;
- this._version = str;
- flags = flags || '-V, --version';
- description = description || 'output the version number';
- const versionOption = this.createOption(flags, description);
- this._versionOptionName = versionOption.attributeName();
- this.options.push(versionOption);
- this.on('option:' + versionOption.name(), () => {
- this._outputConfiguration.writeOut(`${str}\n`);
- this._exit(0, 'commander.version', str);
- });
- return this;
- };
+ command._alias = alias;
+ return this;
+};
- /**
- * Set the description to `str`.
- *
- * @param {string} [str]
- * @param {Object} [argsDescription]
- * @return {string|Command}
- */
- description(str, argsDescription) {
- if (str === undefined && argsDescription === undefined) return this._description;
- this._description = str;
- this._argsDescription = argsDescription;
- return this;
- };
+/**
+ * Set / get the command usage `str`.
+ *
+ * @param {String} [str]
+ * @return {String|Command}
+ * @api public
+ */
- /**
- * Set an alias for the command.
- *
- * You may call more than once to add multiple aliases. Only the first alias is shown in the auto-generated help.
- *
- * @param {string} [alias]
- * @return {string|Command}
- */
+Command.prototype.usage = function(str) {
+ var args = this._args.map(function(arg) {
+ return humanReadableArgName(arg);
+ });
- alias(alias) {
- if (alias === undefined) return this._aliases[0]; // just return first, for backwards compatibility
+ var usage = '[options]' +
+ (this.commands.length ? ' [command]' : '') +
+ (this._args.length ? ' ' + args.join(' ') : '');
- let command = this;
- if (this.commands.length !== 0 && this.commands[this.commands.length - 1]._executableHandler) {
- // assume adding alias for last added executable subcommand, rather than this
- command = this.commands[this.commands.length - 1];
- }
+ if (arguments.length === 0) return this._usage || usage;
+ this._usage = str;
- if (alias === command._name) throw new Error('Command alias can\'t be the same as its name');
+ return this;
+};
- command._aliases.push(alias);
- return this;
- };
+/**
+ * Get or set the name of the command
+ *
+ * @param {String} [str]
+ * @return {String|Command}
+ * @api public
+ */
- /**
- * Set aliases for the command.
- *
- * Only the first alias is shown in the auto-generated help.
- *
- * @param {string[]} [aliases]
- * @return {string[]|Command}
- */
+Command.prototype.name = function(str) {
+ if (arguments.length === 0) return this._name;
+ this._name = str;
+ return this;
+};
- aliases(aliases) {
- // Getter for the array of aliases is the main reason for having aliases() in addition to alias().
- if (aliases === undefined) return this._aliases;
+/**
+ * Return prepared commands.
+ *
+ * @return {Array}
+ * @api private
+ */
- aliases.forEach((alias) => this.alias(alias));
- return this;
- };
+Command.prototype.prepareCommands = function() {
+ return this.commands.filter(function(cmd) {
+ return !cmd._noHelp;
+ }).map(function(cmd) {
+ var args = cmd._args.map(function(arg) {
+ return humanReadableArgName(arg);
+ }).join(' ');
+
+ return [
+ cmd._name +
+ (cmd._alias ? '|' + cmd._alias : '') +
+ (cmd.options.length ? ' [options]' : '') +
+ (args ? ' ' + args : ''),
+ cmd._description
+ ];
+ });
+};
- /**
- * Set / get the command usage `str`.
- *
- * @param {string} [str]
- * @return {String|Command}
- */
+/**
+ * Return the largest command length.
+ *
+ * @return {Number}
+ * @api private
+ */
- usage(str) {
- if (str === undefined) {
- if (this._usage) return this._usage;
+Command.prototype.largestCommandLength = function() {
+ var commands = this.prepareCommands();
+ return commands.reduce(function(max, command) {
+ return Math.max(max, command[0].length);
+ }, 0);
+};
- const args = this._args.map((arg) => {
- return humanReadableArgName(arg);
- });
- return [].concat(
- (this.options.length || this._hasHelpOption ? '[options]' : []),
- (this.commands.length ? '[command]' : []),
- (this._args.length ? args : [])
- ).join(' ');
- }
+/**
+ * Return the largest option length.
+ *
+ * @return {Number}
+ * @api private
+ */
- this._usage = str;
- return this;
- };
+Command.prototype.largestOptionLength = function() {
+ var options = [].slice.call(this.options);
+ options.push({
+ flags: this._helpFlags
+ });
- /**
- * Get or set the name of the command
- *
- * @param {string} [str]
- * @return {string|Command}
- */
+ return options.reduce(function(max, option) {
+ return Math.max(max, option.flags.length);
+ }, 0);
+};
- name(str) {
- if (str === undefined) return this._name;
- this._name = str;
- return this;
- };
+/**
+ * Return the largest arg length.
+ *
+ * @return {Number}
+ * @api private
+ */
- /**
- * Return program help documentation.
- *
- * @param {{ error: boolean }} [contextOptions] - pass {error:true} to wrap for stderr instead of stdout
- * @return {string}
- */
+Command.prototype.largestArgLength = function() {
+ return this._args.reduce(function(max, arg) {
+ return Math.max(max, arg.name.length);
+ }, 0);
+};
- helpInformation(contextOptions) {
- const helper = this.createHelp();
- if (helper.helpWidth === undefined) {
- helper.helpWidth = (contextOptions && contextOptions.error) ? this._outputConfiguration.getErrHelpWidth() : this._outputConfiguration.getOutHelpWidth();
- }
- return helper.formatHelp(this, helper);
- };
+/**
+ * Return the pad width.
+ *
+ * @return {Number}
+ * @api private
+ */
- /**
- * @api private
- */
+Command.prototype.padWidth = function() {
+ var width = this.largestOptionLength();
+ if (this._argsDescription && this._args.length) {
+ if (this.largestArgLength() > width) {
+ width = this.largestArgLength();
+ }
+ }
- _getHelpContext(contextOptions) {
- contextOptions = contextOptions || {};
- const context = { error: !!contextOptions.error };
- let write;
- if (context.error) {
- write = (arg) => this._outputConfiguration.writeErr(arg);
- } else {
- write = (arg) => this._outputConfiguration.writeOut(arg);
+ if (this.commands && this.commands.length) {
+ if (this.largestCommandLength() > width) {
+ width = this.largestCommandLength();
}
- context.write = contextOptions.write || write;
- context.command = this;
- return context;
}
- /**
- * Output help information for this command.
- *
- * Outputs built-in help, and custom text added using `.addHelpText()`.
- *
- * @param {{ error: boolean } | Function} [contextOptions] - pass {error:true} to write to stderr instead of stdout
- */
+ return width;
+};
- outputHelp(contextOptions) {
- let deprecatedCallback;
- if (typeof contextOptions === 'function') {
- deprecatedCallback = contextOptions;
- contextOptions = undefined;
- }
- const context = this._getHelpContext(contextOptions);
+/**
+ * Return help for options.
+ *
+ * @return {String}
+ * @api private
+ */
- const groupListeners = [];
- let command = this;
- while (command) {
- groupListeners.push(command); // ordered from current command to root
- command = command.parent;
- }
+Command.prototype.optionHelp = function() {
+ var width = this.padWidth();
- groupListeners.slice().reverse().forEach(command => command.emit('beforeAllHelp', context));
- this.emit('beforeHelp', context);
+ var columns = process.stdout.columns || 80;
+ var descriptionWidth = columns - width - 4;
- let helpInformation = this.helpInformation(context);
- if (deprecatedCallback) {
- helpInformation = deprecatedCallback(helpInformation);
- if (typeof helpInformation !== 'string' && !Buffer.isBuffer(helpInformation)) {
- throw new Error('outputHelp callback must return a string or a Buffer');
- }
- }
- context.write(helpInformation);
+ // Append the help information
+ return this.options.map(function(option) {
+ const fullDesc = option.description +
+ ((!option.negate && option.defaultValue !== undefined) ? ' (default: ' + JSON.stringify(option.defaultValue) + ')' : '');
+ return pad(option.flags, width) + ' ' + optionalWrap(fullDesc, descriptionWidth, width + 2);
+ }).concat([pad(this._helpFlags, width) + ' ' + optionalWrap(this._helpDescription, descriptionWidth, width + 2)])
+ .join('\n');
+};
- this.emit(this._helpLongFlag); // deprecated
- this.emit('afterHelp', context);
- groupListeners.forEach(command => command.emit('afterAllHelp', context));
- };
+/**
+ * Return command help documentation.
+ *
+ * @return {String}
+ * @api private
+ */
- /**
- * You can pass in flags and a description to override the help
- * flags and help description for your command. Pass in false to
- * disable the built-in help option.
- *
- * @param {string | boolean} [flags]
- * @param {string} [description]
- * @return {Command} `this` command for chaining
- */
+Command.prototype.commandHelp = function() {
+ if (!this.commands.length) return '';
- helpOption(flags, description) {
- if (typeof flags === 'boolean') {
- this._hasHelpOption = flags;
- return this;
- }
- this._helpFlags = flags || this._helpFlags;
- this._helpDescription = description || this._helpDescription;
+ var commands = this.prepareCommands();
+ var width = this.padWidth();
- const helpFlags = _parseOptionFlags(this._helpFlags);
- this._helpShortFlag = helpFlags.shortFlag;
- this._helpLongFlag = helpFlags.longFlag;
+ var columns = process.stdout.columns || 80;
+ var descriptionWidth = columns - width - 4;
- return this;
- };
+ return [
+ 'Commands:',
+ commands.map(function(cmd) {
+ var desc = cmd[1] ? ' ' + cmd[1] : '';
+ return (desc ? pad(cmd[0], width) : cmd[0]) + optionalWrap(desc, descriptionWidth, width + 2);
+ }).join('\n').replace(/^/gm, ' '),
+ ''
+ ].join('\n');
+};
- /**
- * Output help information and exit.
- *
- * Outputs built-in help, and custom text added using `.addHelpText()`.
- *
- * @param {{ error: boolean }} [contextOptions] - pass {error:true} to write to stderr instead of stdout
- */
+/**
+ * Return program help documentation.
+ *
+ * @return {String}
+ * @api private
+ */
- help(contextOptions) {
- this.outputHelp(contextOptions);
- let exitCode = process.exitCode || 0;
- if (exitCode === 0 && contextOptions && typeof contextOptions !== 'function' && contextOptions.error) {
- exitCode = 1;
+Command.prototype.helpInformation = function() {
+ var desc = [];
+ if (this._description) {
+ desc = [
+ this._description,
+ ''
+ ];
+
+ var argsDescription = this._argsDescription;
+ if (argsDescription && this._args.length) {
+ var width = this.padWidth();
+ var columns = process.stdout.columns || 80;
+ var descriptionWidth = columns - width - 5;
+ desc.push('Arguments:');
+ desc.push('');
+ this._args.forEach(function(arg) {
+ desc.push(' ' + pad(arg.name, width) + ' ' + wrap(argsDescription[arg.name], descriptionWidth, width + 4));
+ });
+ desc.push('');
}
- // message: do not have all displayed text available so only passing placeholder.
- this._exit(exitCode, 'commander.help', '(outputHelp)');
- };
+ }
- /**
- * Add additional text to be displayed with the built-in help.
- *
- * Position is 'before' or 'after' to affect just this command,
- * and 'beforeAll' or 'afterAll' to affect this command and all its subcommands.
- *
- * @param {string} position - before or after built-in help
- * @param {string | Function} text - string to add, or a function returning a string
- * @return {Command} `this` command for chaining
- */
- addHelpText(position, text) {
- const allowedValues = ['beforeAll', 'before', 'after', 'afterAll'];
- if (!allowedValues.includes(position)) {
- throw new Error(`Unexpected value for position to addHelpText.
-Expecting one of '${allowedValues.join("', '")}'`);
- }
- const helpEvent = `${position}Help`;
- this.on(helpEvent, (context) => {
- let helpStr;
- if (typeof text === 'function') {
- helpStr = text({ error: context.error, command: context.command });
- } else {
- helpStr = text;
- }
- // Ignore falsy value when nothing to output.
- if (helpStr) {
- context.write(`${helpStr}\n`);
- }
- });
- return this;
+ var cmdName = this._name;
+ if (this._alias) {
+ cmdName = cmdName + '|' + this._alias;
+ }
+ var parentCmdNames = '';
+ for (var parentCmd = this.parent; parentCmd; parentCmd = parentCmd.parent) {
+ parentCmdNames = parentCmd.name() + ' ' + parentCmdNames;
}
+ var usage = [
+ 'Usage: ' + parentCmdNames + cmdName + ' ' + this.usage(),
+ ''
+ ];
+
+ var cmds = [];
+ var commandHelp = this.commandHelp();
+ if (commandHelp) cmds = [commandHelp];
+
+ var options = [
+ 'Options:',
+ '' + this.optionHelp().replace(/^/gm, ' '),
+ ''
+ ];
+
+ return usage
+ .concat(desc)
+ .concat(options)
+ .concat(cmds)
+ .join('\n');
};
/**
- * Expose the root command.
+ * Output help information for this command.
+ *
+ * When listener(s) are available for the helpLongFlag
+ * those callbacks are invoked.
+ *
+ * @api public
*/
-exports = module.exports = new Command();
-exports.program = exports; // More explicit access to global command.
+Command.prototype.outputHelp = function(cb) {
+ if (!cb) {
+ cb = function(passthru) {
+ return passthru;
+ };
+ }
+ const cbOutput = cb(this.helpInformation());
+ if (typeof cbOutput !== 'string' && !Buffer.isBuffer(cbOutput)) {
+ throw new Error('outputHelp callback must return a string or a Buffer');
+ }
+ process.stdout.write(cbOutput);
+ this.emit(this._helpLongFlag);
+};
/**
- * Expose classes
+ * You can pass in flags and a description to override the help
+ * flags and help description for your command.
+ *
+ * @param {String} [flags]
+ * @param {String} [description]
+ * @return {Command}
+ * @api public
*/
-exports.Command = Command;
-exports.Option = Option;
-exports.CommanderError = CommanderError;
-exports.InvalidOptionArgumentError = InvalidOptionArgumentError;
-exports.Help = Help;
+Command.prototype.helpOption = function(flags, description) {
+ this._helpFlags = flags || this._helpFlags;
+ this._helpDescription = description || this._helpDescription;
+
+ var splitFlags = this._helpFlags.split(/[ ,|]+/);
+
+ if (splitFlags.length > 1) this._helpShortFlag = splitFlags.shift();
+
+ this._helpLongFlag = splitFlags.shift();
+
+ return this;
+};
+
+/**
+ * Output help information and exit.
+ *
+ * @param {Function} [cb]
+ * @api public
+ */
+
+Command.prototype.help = function(cb) {
+ this.outputHelp(cb);
+ // exitCode: preserving original behaviour which was calling process.exit()
+ // message: do not have all displayed text available so only passing placeholder.
+ this._exit(process.exitCode || 0, 'commander.help', '(outputHelp)');
+};
/**
* Camel-case the given `flag`
*
- * @param {string} flag
- * @return {string}
+ * @param {String} flag
+ * @return {String}
* @api private
*/
function camelcase(flag) {
- return flag.split('-').reduce((str, word) => {
+ return flag.split('-').reduce(function(str, word) {
return str + word[0].toUpperCase() + word.slice(1);
});
}
/**
+ * Pad `str` to `width`.
+ *
+ * @param {String} str
+ * @param {Number} width
+ * @return {String}
+ * @api private
+ */
+
+function pad(str, width) {
+ var len = Math.max(0, width - str.length);
+ return str + Array(len + 1).join(' ');
+}
+
+/**
+ * Wraps the given string with line breaks at the specified width while breaking
+ * words and indenting every but the first line on the left.
+ *
+ * @param {String} str
+ * @param {Number} width
+ * @param {Number} indent
+ * @return {String}
+ * @api private
+ */
+function wrap(str, width, indent) {
+ var regex = new RegExp('.{1,' + (width - 1) + '}([\\s\u200B]|$)|[^\\s\u200B]+?([\\s\u200B]|$)', 'g');
+ var lines = str.match(regex) || [];
+ return lines.map(function(line, i) {
+ if (line.slice(-1) === '\n') {
+ line = line.slice(0, line.length - 1);
+ }
+ return ((i > 0 && indent) ? Array(indent + 1).join(' ') : '') + line.trimRight();
+ }).join('\n');
+}
+
+/**
+ * Optionally wrap the given str to a max width of width characters per line
+ * while indenting with indent spaces. Do not wrap if insufficient width or
+ * string is manually formatted.
+ *
+ * @param {String} str
+ * @param {Number} width
+ * @param {Number} indent
+ * @return {String}
+ * @api private
+ */
+function optionalWrap(str, width, indent) {
+ // Detect manually wrapped and indented strings by searching for line breaks
+ // followed by multiple spaces/tabs.
+ if (str.match(/[\n]\s+/)) return str;
+ // Do not wrap to narrow columns (or can end up with a word per line).
+ const minWidth = 40;
+ if (width < minWidth) return str;
+
+ return wrap(str, width, indent);
+}
+
+/**
* Output help information if help flags specified
*
* @param {Command} cmd - command to output help for
- * @param {Array} args - array of options to search for help flags
+ * @param {Array} options - array of options to search for -h or --help
* @api private
*/
-function outputHelpIfRequested(cmd, args) {
- const helpOption = cmd._hasHelpOption && args.find(arg => arg === cmd._helpLongFlag || arg === cmd._helpShortFlag);
- if (helpOption) {
- cmd.outputHelp();
- // (Do not have all displayed text available so only passing placeholder.)
- cmd._exit(0, 'commander.helpDisplayed', '(outputHelp)');
+function outputHelpIfRequested(cmd, options) {
+ options = options || [];
+
+ for (var i = 0; i < options.length; i++) {
+ if (options[i] === cmd._helpLongFlag || options[i] === cmd._helpShortFlag) {
+ cmd.outputHelp();
+ // (Do not have all displayed text available so only passing placeholder.)
+ cmd._exit(0, 'commander.helpDisplayed', '(outputHelp)');
+ }
}
}
@@ -2135,38 +1578,27 @@ function outputHelpIfRequested(cmd, args) {
* Takes an argument and returns its human readable equivalent for help usage.
*
* @param {Object} arg
- * @return {string}
+ * @return {String}
* @api private
*/
function humanReadableArgName(arg) {
- const nameOutput = arg.name + (arg.variadic === true ? '...' : '');
+ var nameOutput = arg.name + (arg.variadic === true ? '...' : '');
return arg.required
? '<' + nameOutput + '>'
: '[' + nameOutput + ']';
}
-/**
- * Parse the short and long flag out of something like '-m,--mixed <value>'
- *
- * @api private
- */
-
-function _parseOptionFlags(flags) {
- let shortFlag;
- let longFlag;
- // Use original very loose parsing to maintain backwards compatibility for now,
- // which allowed for example unintended `-sw, --short-word` [sic].
- const flagParts = flags.split(/[ |,]+/);
- if (flagParts.length > 1 && !/^[[<]/.test(flagParts[1])) shortFlag = flagParts.shift();
- longFlag = flagParts.shift();
- // Add support for lone short flag without significantly changing parsing!
- if (!shortFlag && /^-[^-]$/.test(longFlag)) {
- shortFlag = longFlag;
- longFlag = undefined;
+// for versions before node v0.8 when there weren't `fs.existsSync`
+function exists(file) {
+ try {
+ if (fs.statSync(file).isFile()) {
+ return true;
+ }
+ } catch (e) {
+ return false;
}
- return { shortFlag, longFlag };
}
/**
@@ -2183,35 +1615,35 @@ function incrementNodeInspectorPort(args) {
// --inspect-brk[=[host:]port]
// --inspect-port=[host:]port
return args.map((arg) => {
- if (!arg.startsWith('--inspect')) {
- return arg;
- }
- let debugOption;
- let debugHost = '127.0.0.1';
- let debugPort = '9229';
- let match;
- if ((match = arg.match(/^(--inspect(-brk)?)$/)) !== null) {
- // e.g. --inspect
- debugOption = match[1];
- } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/)) !== null) {
- debugOption = match[1];
- if (/^\d+$/.test(match[3])) {
- // e.g. --inspect=1234
- debugPort = match[3];
- } else {
- // e.g. --inspect=localhost
+ var result = arg;
+ if (arg.indexOf('--inspect') === 0) {
+ var debugOption;
+ var debugHost = '127.0.0.1';
+ var debugPort = '9229';
+ var match;
+ if ((match = arg.match(/^(--inspect(-brk)?)$/)) !== null) {
+ // e.g. --inspect
+ debugOption = match[1];
+ } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/)) !== null) {
+ debugOption = match[1];
+ if (/^\d+$/.test(match[3])) {
+ // e.g. --inspect=1234
+ debugPort = match[3];
+ } else {
+ // e.g. --inspect=localhost
+ debugHost = match[3];
+ }
+ } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/)) !== null) {
+ // e.g. --inspect=localhost:1234
+ debugOption = match[1];
debugHost = match[3];
+ debugPort = match[4];
}
- } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/)) !== null) {
- // e.g. --inspect=localhost:1234
- debugOption = match[1];
- debugHost = match[3];
- debugPort = match[4];
- }
- if (debugOption && debugPort !== '0') {
- return `${debugOption}=${debugHost}:${parseInt(debugPort) + 1}`;
+ if (debugOption && debugPort !== '0') {
+ result = `${debugOption}=${debugHost}:${parseInt(debugPort) + 1}`;
+ }
}
- return arg;
+ return result;
});
}
diff --git a/node_modules/commander/package.json b/node_modules/commander/package.json
index ca153e59..e4781e5b 100644
--- a/node_modules/commander/package.json
+++ b/node_modules/commander/package.json
@@ -1,16 +1,12 @@
{
"name": "commander",
- "version": "7.2.0",
+ "version": "4.1.1",
"description": "the complete solution for node.js command-line programs",
"keywords": [
"commander",
"command",
"option",
- "parser",
- "cli",
- "argument",
- "args",
- "argv"
+ "parser"
],
"author": "TJ Holowaychuk <tj@vision-media.ca>",
"license": "MIT",
@@ -19,50 +15,27 @@
"url": "https://github.com/tj/commander.js.git"
},
"scripts": {
- "lint": "eslint index.js esm.mjs \"tests/**/*.js\"",
- "typescript-lint": "eslint typings/*.ts tests/*.ts",
+ "lint": "eslint index.js \"tests/**/*.js\"",
"test": "jest && npm run test-typings",
- "test-esm": "node --experimental-modules ./tests/esm-imports-test.mjs",
- "test-typings": "tsd",
- "typescript-checkJS": "tsc --allowJS --checkJS index.js --noEmit",
- "test-all": "npm run test && npm run lint && npm run typescript-lint && npm run typescript-checkJS && npm run test-esm"
+ "test-typings": "tsc -p tsconfig.json"
},
- "main": "./index.js",
+ "main": "index",
"files": [
"index.js",
- "esm.mjs",
- "typings/index.d.ts",
- "package-support.json"
+ "typings/index.d.ts"
],
- "type": "commonjs",
"dependencies": {},
"devDependencies": {
- "@types/jest": "^26.0.20",
- "@types/node": "^14.14.20",
- "@typescript-eslint/eslint-plugin": "^4.12.0",
- "@typescript-eslint/parser": "^4.12.0",
- "eslint": "^7.17.0",
- "eslint-config-standard": "^16.0.2",
- "eslint-plugin-jest": "^24.1.3",
- "jest": "^26.6.3",
- "standard": "^16.0.3",
- "ts-jest": "^26.5.1",
- "tsd": "^0.14.0",
- "typescript": "^4.1.2"
- },
- "types": "typings/index.d.ts",
- "jest": {
- "testEnvironment": "node",
- "collectCoverage": true,
- "transform": {
- "^.+\\.tsx?$": "ts-jest"
- },
- "testPathIgnorePatterns": [
- "/node_modules/"
- ]
+ "@types/jest": "^24.0.23",
+ "@types/node": "^12.12.11",
+ "eslint": "^6.7.0",
+ "eslint-plugin-jest": "^22.21.0",
+ "jest": "^24.8.0",
+ "standard": "^14.3.1",
+ "typescript": "^3.7.2"
},
+ "typings": "typings/index.d.ts",
"engines": {
- "node": ">= 10"
- },
- "support": true
+ "node": ">= 6"
+ }
}
diff --git a/node_modules/commander/typings/index.d.ts b/node_modules/commander/typings/index.d.ts
index ee40d899..082a3a3c 100644
--- a/node_modules/commander/typings/index.d.ts
+++ b/node_modules/commander/typings/index.d.ts
@@ -1,9 +1,7 @@
// Type definitions for commander
// Original definitions by: Alan Agius <https://github.com/alan-agius4>, Marcelo Dezem <https://github.com/mdezem>, vvakame <https://github.com/vvakame>, Jules Randolph <https://github.com/sveinburne>
-// Using method rather than property for method-signature-style, to document method overloads separately. Allow either.
-/* eslint-disable @typescript-eslint/method-signature-style */
-/* eslint-disable @typescript-eslint/no-explicit-any */
+///<reference types="node" />
declare namespace commander {
@@ -13,174 +11,41 @@ declare namespace commander {
message: string;
nestedError?: string;
}
- type CommanderErrorConstructor = new (exitCode: number, code: string, message: string) => CommanderError;
-
- // eslint-disable-next-line @typescript-eslint/no-empty-interface
- interface InvalidOptionArgumentError extends CommanderError {
- }
- type InvalidOptionArgumentErrorConstructor = new (message: string) => InvalidOptionArgumentError;
+ type CommanderErrorConstructor = { new (exitCode: number, code: string, message: string): CommanderError };
interface Option {
flags: string;
- description: string;
-
required: boolean; // A value must be supplied when the option is specified.
optional: boolean; // A value is optional when the option is specified.
- variadic: boolean;
mandatory: boolean; // The option must have a value after parsing, which usually means it must be specified on command line.
- optionFlags: string;
+ bool: boolean;
short?: string;
- long?: string;
- negate: boolean;
- defaultValue?: any;
- defaultValueDescription?: string;
- parseArg?: <T>(value: string, previous: T) => T;
- hidden: boolean;
- argChoices?: string[];
-
- /**
- * Set the default value, and optionally supply the description to be displayed in the help.
- */
- default(value: any, description?: string): this;
-
- /**
- * Calculate the full description, including defaultValue etc.
- */
- fullDescription(): string;
-
- /**
- * Set the custom handler for processing CLI option arguments into option values.
- */
- argParser<T>(fn: (value: string, previous: T) => T): this;
-
- /**
- * Whether the option is mandatory and must have a value after parsing.
- */
- makeOptionMandatory(mandatory?: boolean): this;
-
- /**
- * Hide option in help.
- */
- hideHelp(hide?: boolean): this;
-
- /**
- * Validation of option argument failed.
- * Intended for use from custom argument processing functions.
- */
- argumentRejected(messsage: string): never;
-
- /**
- * Only allow option value to be one of choices.
- */
- choices(values: string[]): this;
-
- /**
- * Return option name.
- */
- name(): string;
-
- /**
- * Return option name, in a camelcase format that can be used
- * as a object attribute key.
- */
- attributeName(): string;
- }
- type OptionConstructor = new (flags: string, description?: string) => Option;
-
- interface Help {
- /** output helpWidth, long lines are wrapped to fit */
- helpWidth?: number;
- sortSubcommands: boolean;
- sortOptions: boolean;
-
- /** Get the command term to show in the list of subcommands. */
- subcommandTerm(cmd: Command): string;
- /** Get the command description to show in the list of subcommands. */
- subcommandDescription(cmd: Command): string;
- /** Get the option term to show in the list of options. */
- optionTerm(option: Option): string;
- /** Get the option description to show in the list of options. */
- optionDescription(option: Option): string;
-
- /** Get the command usage to be displayed at the top of the built-in help. */
- commandUsage(cmd: Command): string;
- /** Get the description for the command. */
- commandDescription(cmd: Command): string;
-
- /** Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one. */
- visibleCommands(cmd: Command): Command[];
- /** Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one. */
- visibleOptions(cmd: Command): Option[];
- /** Get an array of the arguments which have descriptions. */
- visibleArguments(cmd: Command): Array<{ term: string; description: string}>;
-
- /** Get the longest command term length. */
- longestSubcommandTermLength(cmd: Command, helper: Help): number;
- /** Get the longest option term length. */
- longestOptionTermLength(cmd: Command, helper: Help): number;
- /** Get the longest argument term length. */
- longestArgumentTermLength(cmd: Command, helper: Help): number;
- /** Calculate the pad width from the maximum term length. */
- padWidth(cmd: Command, helper: Help): number;
-
- /**
- * Wrap the given string to width characters per line, with lines after the first indented.
- * Do not wrap if insufficient room for wrapping (minColumnWidth), or string is manually formatted.
- */
- wrap(str: string, width: number, indent: number, minColumnWidth?: number): string;
-
- /** Generate the built-in help text. */
- formatHelp(cmd: Command, helper: Help): string;
- }
- type HelpConstructor = new () => Help;
- type HelpConfiguration = Partial<Help>;
-
- interface ParseOptions {
- from: 'node' | 'electron' | 'user';
- }
- interface HelpContext { // optional parameter for .help() and .outputHelp()
- error: boolean;
- }
- interface AddHelpTextContext { // passed to text function used with .addHelpText()
- error: boolean;
- command: Command;
- }
- interface OutputConfiguration {
- writeOut?(str: string): void;
- writeErr?(str: string): void;
- getOutHelpWidth?(): number;
- getErrHelpWidth?(): number;
- outputError?(str: string, write: (str: string) => void): void;
-
+ long: string;
+ description: string;
}
+ type OptionConstructor = { new (flags: string, description?: string): Option };
- type AddHelpTextPosition = 'beforeAll' | 'before' | 'after' | 'afterAll';
+ interface Command extends NodeJS.EventEmitter {
+ [key: string]: any; // options as properties
- interface OptionValues {
- [key: string]: any;
- }
-
- interface Command {
args: string[];
- commands: Command[];
- parent: Command | null;
/**
- * Set the program version to `str`.
+ * Set the program version to `str`.
*
* This method auto-registers the "-V, --version" flag
* which will print the version number when passed.
- *
+ *
* You can optionally supply the flags and description to override the defaults.
*/
- version(str: string, flags?: string, description?: string): this;
+ version(str: string, flags?: string, description?: string): Command;
/**
* Define a command, implemented using an action handler.
- *
+ *
* @remarks
* The command description is supplied using `.description`, not as a parameter to `.command`.
- *
+ *
* @example
* ```ts
* program
@@ -190,104 +55,52 @@ declare namespace commander {
* console.log('clone command called');
* });
* ```
- *
+ *
* @param nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`
* @param opts - configuration options
* @returns new command
*/
- command(nameAndArgs: string, opts?: CommandOptions): ReturnType<this['createCommand']>;
+ command(nameAndArgs: string, opts?: CommandOptions): Command;
/**
* Define a command, implemented in a separate executable file.
- *
+ *
* @remarks
* The command description is supplied as the second parameter to `.command`.
- *
+ *
* @example
* ```ts
* program
* .command('start <service>', 'start named service')
- * .command('stop [service]', 'stop named service, or all if no name supplied');
+ * .command('stop [service]', 'stop named serice, or all if no name supplied');
* ```
- *
+ *
* @param nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`
* @param description - description of executable command
* @param opts - configuration options
- * @returns `this` command for chaining
+ * @returns top level command for chaining more command definitions
*/
- command(nameAndArgs: string, description: string, opts?: commander.ExecutableCommandOptions): this;
+ command(nameAndArgs: string, description: string, opts?: commander.CommandOptions): Command;
/**
- * Factory routine to create a new unattached command.
+ * Define argument syntax for the top-level command.
*
- * See .command() for creating an attached subcommand, which uses this routine to
- * create the command. You can override createCommand to customise subcommands.
+ * @returns Command for chaining
*/
- createCommand(name?: string): Command;
+ arguments(desc: string): Command;
/**
- * Add a prepared subcommand.
- *
- * See .command() for creating an attached subcommand which inherits settings from its parent.
+ * Parse expected `args`.
*
- * @returns `this` command for chaining
- */
- addCommand(cmd: Command, opts?: CommandOptions): this;
-
- /**
- * Define argument syntax for command.
+ * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`.
*
- * @returns `this` command for chaining
+ * @returns Command for chaining
*/
- arguments(desc: string): this;
-
- /**
- * Override default decision whether to add implicit help command.
- *
- * addHelpCommand() // force on
- * addHelpCommand(false); // force off
- * addHelpCommand('help [cmd]', 'display help for [cmd]'); // force on with custom details
- *
- * @returns `this` command for chaining
- */
- addHelpCommand(enableOrNameAndArgs?: string | boolean, description?: string): this;
+ parseExpectedArgs(args: string[]): Command;
/**
* Register callback to use as replacement for calling process.exit.
*/
- exitOverride(callback?: (err: CommanderError) => never|void): this;
-
- /**
- * You can customise the help with a subclass of Help by overriding createHelp,
- * or by overriding Help properties using configureHelp().
- */
- createHelp(): Help;
-
- /**
- * You can customise the help by overriding Help properties using configureHelp(),
- * or with a subclass of Help by overriding createHelp().
- */
- configureHelp(configuration: HelpConfiguration): this;
- /** Get configuration */
- configureHelp(): HelpConfiguration;
-
- /**
- * The default output goes to stdout and stderr. You can customise this for special
- * applications. You can also customise the display of errors by overriding outputError.
- *
- * The configuration properties are all functions:
- *
- * // functions to change where being written, stdout and stderr
- * writeOut(str)
- * writeErr(str)
- * // matching functions to specify width for wrapping help
- * getOutHelpWidth()
- * getErrHelpWidth()
- * // functions based on what is being written out
- * outputError(str, write) // used for displaying errors, and not used for displaying help
- */
- configureOutput(configuration: OutputConfiguration): this;
- /** Get configuration */
- configureOutput(): OutputConfiguration;
+ exitOverride(callback?: (err: CommanderError) => never|void): Command;
/**
* Register callback `fn` for the command.
@@ -300,15 +113,15 @@ declare namespace commander {
* // output help here
* });
*
- * @returns `this` command for chaining
+ * @returns Command for chaining
*/
- action(fn: (...args: any[]) => void | Promise<void>): this;
+ action(fn: (...args: any[]) => void | Promise<void>): Command;
/**
* Define option with `flags`, `description` and optional
* coercion `fn`.
*
- * The `flags` string contains the short and/or long flags,
+ * The `flags` string should contain both the short and long flags,
* separated by comma, a pipe or space. The following are all valid
* all will output this way when `--help` is used.
*
@@ -344,155 +157,77 @@ declare namespace commander {
* // optional argument
* program.option('-c, --cheese [type]', 'add cheese [marble]');
*
- * @returns `this` command for chaining
+ * @returns Command for chaining
*/
- option(flags: string, description?: string, defaultValue?: string | boolean): this;
- option<T>(flags: string, description: string, fn: (value: string, previous: T) => T, defaultValue?: T): this;
- /** @deprecated since v7, instead use choices or a custom function */
- option(flags: string, description: string, regexp: RegExp, defaultValue?: string | boolean): this;
+ option(flags: string, description?: string, fn?: ((arg1: any, arg2: any) => void) | RegExp, defaultValue?: any): Command;
+ option(flags: string, description?: string, defaultValue?: any): Command;
/**
* Define a required option, which must have a value after parsing. This usually means
* the option must be specified on the command line. (Otherwise the same as .option().)
*
- * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space.
+ * The `flags` string should contain both the short and long flags, separated by comma, a pipe or space.
*/
- requiredOption(flags: string, description?: string, defaultValue?: string | boolean): this;
- requiredOption<T>(flags: string, description: string, fn: (value: string, previous: T) => T, defaultValue?: T): this;
- /** @deprecated since v7, instead use choices or a custom function */
- requiredOption(flags: string, description: string, regexp: RegExp, defaultValue?: string | boolean): this;
+ requiredOption(flags: string, description?: string, fn?: ((arg1: any, arg2: any) => void) | RegExp, defaultValue?: any): Command;
+ requiredOption(flags: string, description?: string, defaultValue?: any): Command;
- /**
- * Factory routine to create a new unattached option.
- *
- * See .option() for creating an attached option, which uses this routine to
- * create the option. You can override createOption to return a custom option.
- */
-
- createOption(flags: string, description?: string): Option;
-
- /**
- * Add a prepared Option.
- *
- * See .option() and .requiredOption() for creating and attaching an option in a single call.
- */
- addOption(option: Option): this;
/**
* Whether to store option values as properties on command object,
* or store separately (specify false). In both cases the option values can be accessed using .opts().
*
- * @returns `this` command for chaining
+ * @return Command for chaining
*/
- storeOptionsAsProperties(): this & OptionValues;
- storeOptionsAsProperties(storeAsProperties: true): this & OptionValues;
- storeOptionsAsProperties(storeAsProperties?: boolean): this;
+ storeOptionsAsProperties(value?: boolean): Command;
/**
- * Alter parsing of short flags with optional values.
- *
- * @example
- * // for `.option('-f,--flag [value]'):
- * .combineFlagAndOptionalValue(true) // `-f80` is treated like `--flag=80`, this is the default behaviour
- * .combineFlagAndOptionalValue(false) // `-fb` is treated like `-f -b`
- *
- * @returns `this` command for chaining
+ * Whether to pass command to action handler,
+ * or just the options (specify false).
+ *
+ * @return Command for chaining
*/
- combineFlagAndOptionalValue(combine?: boolean): this;
+ passCommandToAction(value?: boolean): Command;
/**
* Allow unknown options on the command line.
*
- * @returns `this` command for chaining
- */
- allowUnknownOption(allowUnknown?: boolean): this;
-
- /**
- * Allow excess command-arguments on the command line. Pass false to make excess arguments an error.
- *
- * @returns `this` command for chaining
+ * @param [arg] if `true` or omitted, no error will be thrown for unknown options.
+ * @returns Command for chaining
*/
- allowExcessArguments(allowExcess?: boolean): this;
-
- /**
- * Enable positional options. Positional means global options are specified before subcommands which lets
- * subcommands reuse the same option names, and also enables subcommands to turn on passThroughOptions.
- *
- * The default behaviour is non-positional and global options may appear anywhere on the command line.
- *
- * @returns `this` command for chaining
- */
- enablePositionalOptions(positional?: boolean): this;
-
- /**
- * Pass through options that come after command-arguments rather than treat them as command-options,
- * so actual command-options come before command-arguments. Turning this on for a subcommand requires
- * positional options to have been enabled on the program (parent commands).
- *
- * The default behaviour is non-positional and options may appear before or after command-arguments.
- *
- * @returns `this` command for chaining
- */
- passThroughOptions(passThrough?: boolean): this;
+ allowUnknownOption(arg?: boolean): Command;
/**
* Parse `argv`, setting options and invoking commands when defined.
*
- * The default expectation is that the arguments are from node and have the application as argv[0]
- * and the script being run in argv[1], with user parameters after that.
- *
- * Examples:
- *
- * program.parse(process.argv);
- * program.parse(); // implicitly use process.argv and auto-detect node vs electron conventions
- * program.parse(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]
- *
- * @returns `this` command for chaining
+ * @returns Command for chaining
*/
- parse(argv?: string[], options?: ParseOptions): this;
+ parse(argv: string[]): Command;
/**
* Parse `argv`, setting options and invoking commands when defined.
- *
+ *
* Use parseAsync instead of parse if any of your action handlers are async. Returns a Promise.
*
- * The default expectation is that the arguments are from node and have the application as argv[0]
- * and the script being run in argv[1], with user parameters after that.
- *
- * Examples:
- *
- * program.parseAsync(process.argv);
- * program.parseAsync(); // implicitly use process.argv and auto-detect node vs electron conventions
- * program.parseAsync(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]
- *
* @returns Promise
*/
- parseAsync(argv?: string[], options?: ParseOptions): Promise<this>;
+ parseAsync(argv: string[]): Promise<any>;
/**
- * Parse options from `argv` removing known options,
- * and return argv split into operands and unknown arguments.
- *
- * @example
- * argv => operands, unknown
- * --known kkk op => [op], []
- * op --known kkk => [op], []
- * sub --unknown uuu op => [sub], [--unknown uuu op]
- * sub -- --unknown uuu op => [sub --unknown uuu op], []
+ * Parse options from `argv` returning `argv` void of these options.
*/
parseOptions(argv: string[]): commander.ParseOptionsResult;
/**
* Return an object containing options as key-value pairs
*/
- opts(): OptionValues;
+ opts(): { [key: string]: any };
/**
* Set the description.
- *
- * @returns `this` command for chaining
+ *
+ * @returns Command for chaining
*/
- description(str: string, argsDescription?: {[argName: string]: string}): this;
+ description(str: string, argsDescription?: {[argName: string]: string}): Command;
/**
* Get the description.
*/
@@ -500,36 +235,21 @@ declare namespace commander {
/**
* Set an alias for the command.
- *
- * You may call more than once to add multiple aliases. Only the first alias is shown in the auto-generated help.
- *
- * @returns `this` command for chaining
+ *
+ * @returns Command for chaining
*/
- alias(alias: string): this;
+ alias(alias: string): Command;
/**
* Get alias for the command.
*/
alias(): string;
/**
- * Set aliases for the command.
- *
- * Only the first alias is shown in the auto-generated help.
- *
- * @returns `this` command for chaining
- */
- aliases(aliases: string[]): this;
- /**
- * Get aliases for the command.
- */
- aliases(): string[];
-
- /**
* Set the command usage.
- *
- * @returns `this` command for chaining
+ *
+ * @returns Command for chaining
*/
- usage(str: string): this;
+ usage(str: string): Command;
/**
* Get the command usage.
*/
@@ -537,10 +257,10 @@ declare namespace commander {
/**
* Set the name of the command.
- *
- * @returns `this` command for chaining
+ *
+ * @returns Command for chaining
*/
- name(str: string): this;
+ name(str: string): Command;
/**
* Get the name of the command.
*/
@@ -549,79 +269,43 @@ declare namespace commander {
/**
* Output help information for this command.
*
- * Outputs built-in help, and custom text added using `.addHelpText()`.
- *
+ * When listener(s) are available for the helpLongFlag
+ * those callbacks are invoked.
*/
- outputHelp(context?: HelpContext): void;
- /** @deprecated since v7 */
outputHelp(cb?: (str: string) => string): void;
/**
- * Return command help documentation.
- */
- helpInformation(context?: HelpContext): string;
-
- /**
* You can pass in flags and a description to override the help
- * flags and help description for your command. Pass in false
- * to disable the built-in help option.
+ * flags and help description for your command.
*/
- helpOption(flags?: string | boolean, description?: string): this;
+ helpOption(flags?: string, description?: string): Command;
- /**
+ /**
* Output help information and exit.
- *
- * Outputs built-in help, and custom text added using `.addHelpText()`.
*/
- help(context?: HelpContext): never;
- /** @deprecated since v7 */
help(cb?: (str: string) => string): never;
-
- /**
- * Add additional text to be displayed with the built-in help.
- *
- * Position is 'before' or 'after' to affect just this command,
- * and 'beforeAll' or 'afterAll' to affect this command and all its subcommands.
- */
- addHelpText(position: AddHelpTextPosition, text: string): this;
- addHelpText(position: AddHelpTextPosition, text: (context: AddHelpTextContext) => string | undefined): this;
-
- /**
- * Add a listener (callback) for when events occur. (Implemented using EventEmitter.)
- */
- on(event: string | symbol, listener: (...args: any[]) => void): this;
}
- type CommandConstructor = new (name?: string) => Command;
+ type CommandConstructor = { new (name?: string): Command };
- interface CommandOptions {
- hidden?: boolean;
- isDefault?: boolean;
- /** @deprecated since v7, replaced by hidden */
- noHelp?: boolean;
- }
- interface ExecutableCommandOptions extends CommandOptions {
- executableFile?: string;
- }
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- interface ParseOptionsResult {
- operands: string[];
- unknown: string[];
- }
+ interface CommandOptions {
+ noHelp?: boolean;
+ isDefault?: boolean;
+ executableFile?: string;
+ }
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
- interface CommanderStatic extends Command {
- program: Command;
- Command: CommandConstructor;
- Option: OptionConstructor;
- CommanderError: CommanderErrorConstructor;
- InvalidOptionArgumentError: InvalidOptionArgumentErrorConstructor;
- Help: HelpConstructor;
- }
+ interface ParseOptionsResult {
+ args: string[];
+ unknown: string[];
+ }
+
+ interface CommanderStatic extends Command {
+ Command: CommandConstructor;
+ Option: OptionConstructor;
+ CommanderError:CommanderErrorConstructor;
+ }
}
-// Declaring namespace AND global
-// eslint-disable-next-line @typescript-eslint/no-redeclare
declare const commander: commander.CommanderStatic;
export = commander;
diff --git a/node_modules/core-js-compat/node_modules/.bin/browserslist b/node_modules/core-js-compat/node_modules/.bin/browserslist
new file mode 120000
index 00000000..c4cc06e3
--- /dev/null
+++ b/node_modules/core-js-compat/node_modules/.bin/browserslist
@@ -0,0 +1 @@
+../../../browserslist/cli.js \ No newline at end of file
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/LICENSE b/node_modules/cssnano-preset-default/node_modules/postcss-calc/LICENSE
index 8b39b8f1..8b39b8f1 100755
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/LICENSE
+++ b/node_modules/cssnano-preset-default/node_modules/postcss-calc/LICENSE
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/README.md b/node_modules/cssnano-preset-default/node_modules/postcss-calc/README.md
index 4cabf731..2c207402 100755
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/README.md
+++ b/node_modules/cssnano-preset-default/node_modules/postcss-calc/README.md
@@ -1,16 +1,16 @@
-# postcss-calc [![Build Status](https://travis-ci.org/postcss/postcss-calc.png)](https://travis-ci.org/postcss/postcss-calc)
+# PostCSS Calc [<img src="https://postcss.github.io/postcss/logo.svg" alt="PostCSS" width="90" height="90" align="right">][PostCSS]
-> [PostCSS](https://github.com/postcss/postcss) plugin to reduce `calc()`.
+[![NPM Version][npm-img]][npm-url]
+[![Support Chat][git-img]][git-url]
-This plugin reduce `calc()` references whenever it's possible.
-This can be particularly useful with the [postcss-custom-properties](https://github.com/postcss/postcss-custom-properties) plugin.
-
-**Note:** When multiple units are mixed together in the same expression, the `calc()` statement is left as is, to fallback to the [w3c calc() feature](http://www.w3.org/TR/css3-values/#calc).
+[PostCSS Calc] lets you reduce `calc()` references whenever it's possible.
+When multiple units are mixed together in the same expression, the `calc()`
+statement is left as is, to fallback to the [W3C calc() implementation].
## Installation
-```console
-$ npm install postcss-calc
+```bash
+npm install postcss-calc
```
## Usage
@@ -31,62 +31,28 @@ var output = postcss()
.css
```
-**Example** (with [postcss-custom-properties](https://github.com/postcss/postcss-custom-properties) enabled as well):
-
-```js
-// dependencies
-var fs = require("fs")
-var postcss = require("postcss")
-var customProperties = require("postcss-custom-properties")
-var calc = require("postcss-calc")
-
-// css to be processed
-var css = fs.readFileSync("input.css", "utf8")
-
-// process css
-var output = postcss()
- .use(customProperties())
- .use(calc())
- .process(css)
- .css
-```
-
Using this `input.css`:
```css
-:root {
- --main-font-size: 16px;
-}
-
-body {
- font-size: var(--main-font-size);
-}
-
h1 {
- font-size: calc(var(--main-font-size) * 2);
+ font-size: calc(16px * 2);
height: calc(100px - 2em);
- margin-bottom: calc(
- var(--main-font-size)
- * 1.5
- )
+ width: calc(2*var(--base-width));
+ margin-bottom: calc(16px * 1.5);
}
```
you will get:
```css
-body {
- font-size: 16px
-}
-
h1 {
font-size: 32px;
height: calc(100px - 2em);
+ width: calc(2*var(--base-width));
margin-bottom: 24px
}
```
-
-Checkout [tests](src/__tests__/index.js) for more examples.
+Checkout [tests] for more examples.
### Options
@@ -103,7 +69,8 @@ var out = postcss()
#### `preserve` (default: `false`)
-Allow you to preserve calc() usage in output so browsers will handle decimal precision themselves.
+Allow you to preserve calc() usage in output so browsers will handle decimal
+precision themselves.
```js
var out = postcss()
@@ -155,17 +122,32 @@ div[data-size="calc(3*3)"] {
---
+## Related PostCSS plugins
+To replace the value of CSS custom properties at build time, try [PostCSS Custom Properties].
+
## Contributing
-Work on a branch, install dev-dependencies, respect coding style & run tests before submitting a bug fix or a feature.
+Work on a branch, install dev-dependencies, respect coding style & run tests
+before submitting a bug fix or a feature.
-```console
-$ git clone https://github.com/postcss/postcss-calc.git
-$ git checkout -b patch-1
-$ npm install
-$ npm test
+```bash
+git clone git@github.com:postcss/postcss-calc.git
+git checkout -b patch-1
+npm install
+npm test
```
## [Changelog](CHANGELOG.md)
## [License](LICENSE)
+
+[git-img]: https://img.shields.io/badge/support-chat-blue.svg
+[git-url]: https://gitter.im/postcss/postcss
+[npm-img]: https://img.shields.io/npm/v/postcss-calc.svg
+[npm-url]: https://www.npmjs.com/package/postcss-calc
+
+[PostCSS]: https://github.com/postcss
+[PostCSS Calc]: https://github.com/postcss/postcss-calc
+[PostCSS Custom Properties]: https://github.com/postcss/postcss-custom-properties
+[tests]: src/__tests__/index.js
+[W3C calc() implementation]: https://www.w3.org/TR/css3-values/#calc-notation
diff --git a/node_modules/cssnano-preset-default/node_modules/postcss-calc/package.json b/node_modules/cssnano-preset-default/node_modules/postcss-calc/package.json
new file mode 100644
index 00000000..68867715
--- /dev/null
+++ b/node_modules/cssnano-preset-default/node_modules/postcss-calc/package.json
@@ -0,0 +1,68 @@
+{
+ "name": "postcss-calc",
+ "version": "9.0.1",
+ "description": "PostCSS plugin to reduce calc()",
+ "keywords": [
+ "css",
+ "postcss",
+ "postcss-plugin",
+ "calculation",
+ "calc"
+ ],
+ "homepage": "https://github.com/postcss/postcss-calc",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/postcss/postcss-calc.git"
+ },
+ "main": "src/index.js",
+ "types": "types/index.d.ts",
+ "files": [
+ "src",
+ "types",
+ "LICENSE"
+ ],
+ "scripts": {
+ "prepare": "pnpm run build && tsc",
+ "build": "jison ./parser.jison -o src/parser.js",
+ "lint": "eslint . && tsc",
+ "test": "uvu test"
+ },
+ "author": "Andy Jansson",
+ "license": "MIT",
+ "eslintConfig": {
+ "extends": [
+ "eslint:recommended",
+ "prettier"
+ ],
+ "env": {
+ "node": true,
+ "es2017": true
+ },
+ "ignorePatterns": [
+ "src/parser.js"
+ ],
+ "rules": {
+ "curly": "error"
+ }
+ },
+ "engines": {
+ "node": "^14 || ^16 || >=18.0"
+ },
+ "devDependencies": {
+ "@types/node": "^18.16.2",
+ "eslint": "^8.39.0",
+ "eslint-config-prettier": "^8.8.0",
+ "jison-gho": "^0.6.1-216",
+ "postcss": "^8.2.2",
+ "prettier": "^2.8.8",
+ "typescript": "~5.0.4",
+ "uvu": "^0.5.6"
+ },
+ "dependencies": {
+ "postcss-selector-parser": "^6.0.11",
+ "postcss-value-parser": "^4.2.0"
+ },
+ "peerDependencies": {
+ "postcss": "^8.2.2"
+ }
+}
diff --git a/node_modules/postcss-calc/src/index.js b/node_modules/cssnano-preset-default/node_modules/postcss-calc/src/index.js
index 9e3333ba..9e3333ba 100644
--- a/node_modules/postcss-calc/src/index.js
+++ b/node_modules/cssnano-preset-default/node_modules/postcss-calc/src/index.js
diff --git a/node_modules/postcss-calc/src/lib/convertUnit.js b/node_modules/cssnano-preset-default/node_modules/postcss-calc/src/lib/convertUnit.js
index 5f7bc268..5f7bc268 100644
--- a/node_modules/postcss-calc/src/lib/convertUnit.js
+++ b/node_modules/cssnano-preset-default/node_modules/postcss-calc/src/lib/convertUnit.js
diff --git a/node_modules/postcss-calc/src/lib/reducer.js b/node_modules/cssnano-preset-default/node_modules/postcss-calc/src/lib/reducer.js
index 8a36bf13..8a36bf13 100644
--- a/node_modules/postcss-calc/src/lib/reducer.js
+++ b/node_modules/cssnano-preset-default/node_modules/postcss-calc/src/lib/reducer.js
diff --git a/node_modules/postcss-calc/src/lib/stringifier.js b/node_modules/cssnano-preset-default/node_modules/postcss-calc/src/lib/stringifier.js
index 50195bb5..50195bb5 100644
--- a/node_modules/postcss-calc/src/lib/stringifier.js
+++ b/node_modules/cssnano-preset-default/node_modules/postcss-calc/src/lib/stringifier.js
diff --git a/node_modules/postcss-calc/src/lib/transform.js b/node_modules/cssnano-preset-default/node_modules/postcss-calc/src/lib/transform.js
index 78bff2ef..78bff2ef 100644
--- a/node_modules/postcss-calc/src/lib/transform.js
+++ b/node_modules/cssnano-preset-default/node_modules/postcss-calc/src/lib/transform.js
diff --git a/node_modules/postcss-calc/src/parser.d.ts b/node_modules/cssnano-preset-default/node_modules/postcss-calc/src/parser.d.ts
index 8bdb1b5f..8bdb1b5f 100644
--- a/node_modules/postcss-calc/src/parser.d.ts
+++ b/node_modules/cssnano-preset-default/node_modules/postcss-calc/src/parser.d.ts
diff --git a/node_modules/postcss-calc/src/parser.js b/node_modules/cssnano-preset-default/node_modules/postcss-calc/src/parser.js
index 4025d245..4025d245 100644
--- a/node_modules/postcss-calc/src/parser.js
+++ b/node_modules/cssnano-preset-default/node_modules/postcss-calc/src/parser.js
diff --git a/node_modules/postcss-calc/types/index.d.ts b/node_modules/cssnano-preset-default/node_modules/postcss-calc/types/index.d.ts
index 7373891b..7373891b 100644
--- a/node_modules/postcss-calc/types/index.d.ts
+++ b/node_modules/cssnano-preset-default/node_modules/postcss-calc/types/index.d.ts
diff --git a/node_modules/postcss-calc/types/lib/convertUnit.d.ts b/node_modules/cssnano-preset-default/node_modules/postcss-calc/types/lib/convertUnit.d.ts
index 63390a47..63390a47 100644
--- a/node_modules/postcss-calc/types/lib/convertUnit.d.ts
+++ b/node_modules/cssnano-preset-default/node_modules/postcss-calc/types/lib/convertUnit.d.ts
diff --git a/node_modules/postcss-calc/types/lib/reducer.d.ts b/node_modules/cssnano-preset-default/node_modules/postcss-calc/types/lib/reducer.d.ts
index f39bfff2..f39bfff2 100644
--- a/node_modules/postcss-calc/types/lib/reducer.d.ts
+++ b/node_modules/cssnano-preset-default/node_modules/postcss-calc/types/lib/reducer.d.ts
diff --git a/node_modules/postcss-calc/types/lib/stringifier.d.ts b/node_modules/cssnano-preset-default/node_modules/postcss-calc/types/lib/stringifier.d.ts
index 0298267f..0298267f 100644
--- a/node_modules/postcss-calc/types/lib/stringifier.d.ts
+++ b/node_modules/cssnano-preset-default/node_modules/postcss-calc/types/lib/stringifier.d.ts
diff --git a/node_modules/postcss-calc/types/lib/transform.d.ts b/node_modules/cssnano-preset-default/node_modules/postcss-calc/types/lib/transform.d.ts
index 013847fe..013847fe 100644
--- a/node_modules/postcss-calc/types/lib/transform.d.ts
+++ b/node_modules/cssnano-preset-default/node_modules/postcss-calc/types/lib/transform.d.ts
diff --git a/node_modules/doiuse/node_modules/.bin/browserslist b/node_modules/doiuse/node_modules/.bin/browserslist
new file mode 120000
index 00000000..c4cc06e3
--- /dev/null
+++ b/node_modules/doiuse/node_modules/.bin/browserslist
@@ -0,0 +1 @@
+../../../browserslist/cli.js \ No newline at end of file
diff --git a/node_modules/has-ansi/node_modules/ansi-regex/index.js b/node_modules/has-ansi/node_modules/ansi-regex/index.js
deleted file mode 100644
index b9574ed7..00000000
--- a/node_modules/has-ansi/node_modules/ansi-regex/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-'use strict';
-module.exports = function () {
- return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g;
-};
diff --git a/node_modules/has-ansi/node_modules/ansi-regex/license b/node_modules/has-ansi/node_modules/ansi-regex/license
deleted file mode 100644
index 654d0bfe..00000000
--- a/node_modules/has-ansi/node_modules/ansi-regex/license
+++ /dev/null
@@ -1,21 +0,0 @@
-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.
diff --git a/node_modules/has-ansi/node_modules/ansi-regex/package.json b/node_modules/has-ansi/node_modules/ansi-regex/package.json
deleted file mode 100644
index eb44fb5c..00000000
--- a/node_modules/has-ansi/node_modules/ansi-regex/package.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
- "name": "ansi-regex",
- "version": "2.1.1",
- "description": "Regular expression for matching ANSI escape codes",
- "license": "MIT",
- "repository": "chalk/ansi-regex",
- "author": {
- "name": "Sindre Sorhus",
- "email": "sindresorhus@gmail.com",
- "url": "sindresorhus.com"
- },
- "maintainers": [
- "Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)",
- "Joshua Appelman <jappelman@xebia.com> (jbnicolai.com)",
- "JD Ballard <i.am.qix@gmail.com> (github.com/qix-)"
- ],
- "engines": {
- "node": ">=0.10.0"
- },
- "scripts": {
- "test": "xo && ava --verbose",
- "view-supported": "node fixtures/view-codes.js"
- },
- "files": [
- "index.js"
- ],
- "keywords": [
- "ansi",
- "styles",
- "color",
- "colour",
- "colors",
- "terminal",
- "console",
- "cli",
- "string",
- "tty",
- "escape",
- "formatting",
- "rgb",
- "256",
- "shell",
- "xterm",
- "command-line",
- "text",
- "regex",
- "regexp",
- "re",
- "match",
- "test",
- "find",
- "pattern"
- ],
- "devDependencies": {
- "ava": "0.17.0",
- "xo": "0.16.0"
- },
- "xo": {
- "rules": {
- "guard-for-in": 0,
- "no-loop-func": 0
- }
- }
-}
diff --git a/node_modules/has-ansi/node_modules/ansi-regex/readme.md b/node_modules/has-ansi/node_modules/ansi-regex/readme.md
deleted file mode 100644
index 6a928edf..00000000
--- a/node_modules/has-ansi/node_modules/ansi-regex/readme.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# ansi-regex [![Build Status](https://travis-ci.org/chalk/ansi-regex.svg?branch=master)](https://travis-ci.org/chalk/ansi-regex)
-
-> Regular expression for matching [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)
-
-
-## Install
-
-```
-$ npm install --save ansi-regex
-```
-
-
-## Usage
-
-```js
-const ansiRegex = require('ansi-regex');
-
-ansiRegex().test('\u001b[4mcake\u001b[0m');
-//=> true
-
-ansiRegex().test('cake');
-//=> false
-
-'\u001b[4mcake\u001b[0m'.match(ansiRegex());
-//=> ['\u001b[4m', '\u001b[0m']
-```
-
-## FAQ
-
-### Why do you test for codes not in the ECMA 48 standard?
-
-Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. If I recall correctly, we test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them.
-
-On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out.
-
-
-## License
-
-MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/node_modules/laggard/node_modules/.bin/browserslist b/node_modules/laggard/node_modules/.bin/browserslist
deleted file mode 120000
index 3cd991b2..00000000
--- a/node_modules/laggard/node_modules/.bin/browserslist
+++ /dev/null
@@ -1 +0,0 @@
-../browserslist/cli.js \ No newline at end of file
diff --git a/node_modules/laggard/node_modules/balanced-match/index.js b/node_modules/laggard/node_modules/balanced-match/index.js
deleted file mode 100644
index e8d85870..00000000
--- a/node_modules/laggard/node_modules/balanced-match/index.js
+++ /dev/null
@@ -1,58 +0,0 @@
-module.exports = balanced;
-function balanced(a, b, str) {
- if (a instanceof RegExp) a = maybeMatch(a, str);
- if (b instanceof RegExp) b = maybeMatch(b, str);
-
- var r = range(a, b, str);
-
- return r && {
- start: r[0],
- end: r[1],
- pre: str.slice(0, r[0]),
- body: str.slice(r[0] + a.length, r[1]),
- post: str.slice(r[1] + b.length)
- };
-}
-
-function maybeMatch(reg, str) {
- var m = str.match(reg);
- return m ? m[0] : null;
-}
-
-balanced.range = range;
-function range(a, b, str) {
- var begs, beg, left, right, result;
- var ai = str.indexOf(a);
- var bi = str.indexOf(b, ai + 1);
- var i = ai;
-
- if (ai >= 0 && bi > 0) {
- begs = [];
- left = str.length;
-
- while (i >= 0 && !result) {
- if (i == ai) {
- begs.push(i);
- ai = str.indexOf(a, i + 1);
- } else if (begs.length == 1) {
- result = [ begs.pop(), bi ];
- } else {
- beg = begs.pop();
- if (beg < left) {
- left = beg;
- right = bi;
- }
-
- bi = str.indexOf(b, i + 1);
- }
-
- i = ai < bi && ai >= 0 ? ai : bi;
- }
-
- if (begs.length) {
- result = [ left, right ];
- }
- }
-
- return result;
-}
diff --git a/node_modules/laggard/node_modules/pixrem/node_modules/.bin/browserslist b/node_modules/laggard/node_modules/pixrem/node_modules/.bin/browserslist
new file mode 120000
index 00000000..c4cc06e3
--- /dev/null
+++ b/node_modules/laggard/node_modules/pixrem/node_modules/.bin/browserslist
@@ -0,0 +1 @@
+../../../browserslist/cli.js \ No newline at end of file
diff --git a/node_modules/laggard/node_modules/postcss-reporter/README.md b/node_modules/laggard/node_modules/postcss-reporter/README.md
deleted file mode 100644
index 6842f131..00000000
--- a/node_modules/laggard/node_modules/postcss-reporter/README.md
+++ /dev/null
@@ -1,143 +0,0 @@
-# postcss-reporter
-[![Build Status](https://travis-ci.org/postcss/postcss-reporter.svg?branch=master)](https://travis-ci.org/postcss/postcss-reporter)
-[![AppVeyor Build Status](https://img.shields.io/appveyor/ci/davidtheclark/postcss-reporter/master.svg?label=windows%20build)](https://ci.appveyor.com/project/davidtheclark/postcss-reporter)
-
-A PostCSS plugin to `console.log()` the messages (warnings, etc.) registered by other PostCSS plugins.
-
-## Purpose
-
-As of PostCSS 4.1, a single PostCSS process can accumulate messages from all of the plugins it uses.
-Most of these messages are [warnings](https://github.com/postcss/postcss/blob/master/docs/guidelines/plugin.md#32-use-resultwarn-for-warnings).
-Presumably, plugin authors want you to see those messages.
-So this plugin exists to read the accumulated messages (or messages from only the plugins you've specified), format them, and print them to the console.
-
-By default, the messages are formatted for human legibility and sorted according to the line/column positions attached to the messages. But another formatting function can be passed in with an option, and sorting can be turned of with an option.
-
-*By default, only warnings are logged*. If you would like to see more messages, you can change the `filter` function.
-
-## Example Output
-
-![Example](example.png?raw=true)
-
-## Installation
-
-```
-npm install postcss-reporter
-```
-
-Version 1.0.0+ is compatible with PostCSS 5+. (Earlier versions are compatible with PostCSS 4.)
-
-## Usage
-
-Add it to your plugin list *after any plugins whose messages you want to log*, and optionally pass it an object of options.
-
-For example, using [gulp-postcss](https://github.com/postcss/gulp-postcss):
-
-```js
-gulp.task('css', function() {
- return gulp.src('./src/*.css')
- .pipe(postcss([
- bemLinter(),
- customProperties(),
- calc(),
- rejectAllColors(),
- reporter(myOptions) // <------ ding
- ]))
- .pipe(gulp.dest('./dist'));
-});
-```
-
-## Options
-
-**clearReportedMessages** (boolean, default = `false`)
-
-If true, the plugin will clear the result's messages after it logs them. This prevents other plugins, or the whatever runner you use, from logging the same information again and causing confusion.
-
-**formatter** (function, default = the default formatter)
-
-By default, this reporter will format the messages for human legibility in the console.
-To use another formatter, pass a function that
-
- - accepts an object containing a `messages` array and a `source` string
- - returns the string to report
-
-For example, you could write a formatter like this:
-
-```js
-reporter({
- formatter: function(input) {
- return input.source + ' produced ' + input.messages.length + ' messages';
- }
-})
-```
-
-**plugins** (array of strings, default = `[]`)
-
-If `plugins` is empty (as it is by default), the reporter will log messages from every PostCSS plugin.
-
-There are 2 ways to limit output:
-
-- **Whitelist:** Provide an array of the plugins whose messages you would like to show.
- For example, `{ plugins: ['postcss-bem-linter'] }` will only log messages from the `postcss-bem-linter` plugin.
-- **Blacklist:** Prefix all plugins in the array with `!` to specify only those plugins whose messages you would like to hide.
- (All other plugins will be shown.)
- For example, `{ plugins: ['!postcss-bem-linter'] }` will never log messages from the `postcss-bem-linter` plugin; but will log messages from every other plugin.
-
-**filter** (function)
-
-Provide a filter function. It receives the message object and returns a truthy or falsy value, indicating whether that particular message should be reported or not.
-
-By default, only messages with `type: "warning"` warnings are logged. (These are the messages produced when the plugin author uses PostCSS's `warn()` function.)
-
-For example, `function(message) { return true }` will only every message, regardless of the plugin or whether it's a warning or not.
-
-**clearAllMessages** (boolean, default = `false`)
-
-If `true`, not pass any messages into other plugins, or the whatever runner you use, for logging.
-
-**throwError** (boolean, default = `false`)
-
-If `true`, after the plugin logs your messages it will throw an error if it found any warnings.
-
-**sortByPosition** (boolean, default = `true`)
-
-If `false`, messages will not be sorted by line/column position.
-
-**positionless** (`"first"|"last"|"any"`, default = `"first"`)
-
-By default, messages without line/column positions will be grouped at the beginning of the output.
-To put them at the end, instead, use `"last"`.
-To not bother sorting these, use `"any"`.
-
-**noIcon** (boolean, default = `false`)
-
-If `true`, no exclamatory triangle icons will be printed next to warnings.
-
-**noPlugin** (boolean, default = `false`)
-
-If `true`, plugin names will not be printed in brackets after messages.
-
-## How to get output without colors
-
-If you would like no colors in the console output, simply pass `--no-colors` when you invoke whatever command runs this plugin. (This works because of [chalk](https://github.com/sindresorhus/chalk).)
-
-## Standalone formatter
-
-You can also use this module's formatter as a library, with following API:
-
-```js
-var formatter = require('postcss-reporter/lib/formatter');
-var myFormatter = formatter(myOptions);
-// to use defaults, just pass no options: `formatter()`
-var warningLog = myFormatter({
- messages: someMessages,
- source: someSource
-});
-console.log(warningLog);
-```
-
-These are the formatter's options:
-
-- sortByPosition (boolean, default = `true`)
-- noIcon (boolean, default = `false`) - Do not print any warning exclamatory triangle icons
-- noPlugin (boolean, default = `false`) - Do not print plugin names
diff --git a/node_modules/laggard/node_modules/postcss-reporter/index.js b/node_modules/laggard/node_modules/postcss-reporter/index.js
deleted file mode 100644
index 2a4e4136..00000000
--- a/node_modules/laggard/node_modules/postcss-reporter/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var postcss = require('postcss');
-var reporter = require('./lib/reporter');
-
-module.exports = postcss.plugin('postcss-reporter', reporter);
diff --git a/node_modules/laggard/node_modules/postcss-reporter/lib/formatter.js b/node_modules/laggard/node_modules/postcss-reporter/lib/formatter.js
deleted file mode 100644
index b5719b8f..00000000
--- a/node_modules/laggard/node_modules/postcss-reporter/lib/formatter.js
+++ /dev/null
@@ -1,80 +0,0 @@
-var chalk = require('chalk');
-var path = require('path');
-var symbols = require('log-symbols');
-var _ = require('lodash');
-var util = require('./util');
-
-module.exports = function(opts) {
- var options = opts || {};
- var sortByPosition = (typeof options.sortByPosition !== 'undefined') ? options.sortByPosition : true;
- var positionless = options.positionless || 'first';
-
- return function(input) {
- var messages = input.messages;
- var source = input.source;
-
- if (!messages.length) return '';
-
- var orderedMessages = _.sortBy(
- messages,
- function(m) {
- if (!m.line) return 1;
- if (positionless === 'any') return 1;
- if (positionless === 'first') return 2;
- if (positionless === 'last') return 0;
- },
- function(m) {
- if (!sortByPosition) return 1;
- return m.line;
- },
- function(m) {
- if (!sortByPosition) return 1;
- return m.column;
- }
- );
-
- var output = '\n';
-
- if (source) {
- output += chalk.bold.underline(logFrom(source)) + '\n';
- }
-
- orderedMessages.forEach(function(w) {
- output += messageToString(w) + '\n';
- });
-
- return output;
-
- function messageToString(message) {
- var location = util.getLocation(message);
- var str = '';
-
- if (location.line) {
- str += chalk.bold(location.line);
- }
-
- if (location.column) {
- str += chalk.bold(':' + location.column)
- }
-
- if (location.line || location.column) {
- str += '\t';
- }
-
- if (!options.noIcon && message.type === 'warning') {
- str += chalk.yellow(symbols.warning + ' ');
- }
-
- str += message.text;
- if (!options.noPlugin) {
- str += chalk.yellow(' [' + message.plugin + ']');
- }
- return str;
- }
-
- function logFrom(fromValue) {
- if (fromValue.charAt(0) === '<') return fromValue;
- return path.relative(process.cwd(), fromValue).split(path.sep).join('/');
- }
- };
-};
diff --git a/node_modules/laggard/node_modules/postcss-reporter/lib/reporter.js b/node_modules/laggard/node_modules/postcss-reporter/lib/reporter.js
deleted file mode 100644
index 70781fba..00000000
--- a/node_modules/laggard/node_modules/postcss-reporter/lib/reporter.js
+++ /dev/null
@@ -1,81 +0,0 @@
-var chalk = require('chalk');
-var _ = require('lodash');
-var defaultFormatter = require('./formatter');
-var util = require('./util');
-
-module.exports = function(opts) {
- var options = opts || {};
-
- var formatter = options.formatter || defaultFormatter({
- sortByPosition: (typeof options.sortByPosition !== 'undefined') ? options.sortByPosition : true,
- positionless: options.positionless || 'first',
- noIcon: options.noIcon,
- noPlugin: options.noPlugin,
- });
-
- var pluginFilter;
- if (!options.plugins) {
- // Every plugin
- pluginFilter = function() { return true; };
- } else if (options.plugins.every(function(plugin) { return plugin[0] === '!'; })) {
- // Blacklist
- pluginFilter = function(message) {
- return options.plugins.indexOf('!' + message.plugin) === -1;
- };
- } else {
- // Whitelist
- pluginFilter = function(message) {
- return options.plugins.indexOf(message.plugin) !== -1;
- };
- }
-
- var messageFilter = options.filter || function(message) { return (message.type === 'warning'); };
-
- return function(css, result) {
- var messagesToLog = result.messages
- .filter(pluginFilter)
- .filter(messageFilter);
-
- var resultSource = (!result.root.source) ? ''
- : result.root.source.input.file || result.root.source.input.id
-
- var sourceGroupedMessages = _.groupBy(messagesToLog, function(message) {
- return util.getLocation(message).file || resultSource;
- });
-
- var report = '';
- _.forOwn(sourceGroupedMessages, function(messages, source) {
- report += formatter({
- messages: messages,
- source: source,
- });
- });
-
- if (options.clearReportedMessages) {
- result.messages = _.difference(result.messages, messagesToLog);
- }
-
- if (options.clearAllMessages) {
- var messagesToClear = result.messages.filter(pluginFilter);
- result.messages = _.difference(result.messages, messagesToClear);
- }
-
-
- if (!report) return;
-
- console.log(report);
-
- if (options.throwError && shouldThrowError()) {
- throw new Error(chalk.red.bold('\n** postcss-reporter: warnings or errors were found **'));
- }
-
- function shouldThrowError() {
- return (
- messagesToLog.length
- && messagesToLog.some(function(message) {
- return message.type === 'warning' || message.type === 'error';
- })
- );
- }
- };
-};
diff --git a/node_modules/laggard/node_modules/postcss-reporter/lib/util.js b/node_modules/laggard/node_modules/postcss-reporter/lib/util.js
deleted file mode 100644
index 76c649bc..00000000
--- a/node_modules/laggard/node_modules/postcss-reporter/lib/util.js
+++ /dev/null
@@ -1,20 +0,0 @@
-var _ = require('lodash');
-
-exports.getLocation = function(message) {
- var messageNode = message.node;
-
- var location = {
- line: message.line,
- column: message.column,
- };
-
- var messageInput = _.get(messageNode, 'source.input');
-
- if (!messageInput) return location;
-
- var originLocation = messageInput.origin && messageInput.origin(message.line, message.column)
- if (originLocation) return originLocation
-
- location.file = messageInput.file || messageInput.id;
- return location;
-};
diff --git a/node_modules/laggard/node_modules/postcss-reporter/package.json b/node_modules/laggard/node_modules/postcss-reporter/package.json
deleted file mode 100644
index 7233b6f0..00000000
--- a/node_modules/laggard/node_modules/postcss-reporter/package.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "name": "postcss-reporter",
- "version": "5.0.0",
- "description": "Log PostCSS messages in the console",
- "main": "index.js",
- "scripts": {
- "lint": "eslint .",
- "test": "npm run lint && tape test",
- "visual": "node test/visual.js"
- },
- "files": [
- "index.js",
- "lib"
- ],
- "repository": {
- "type": "git",
- "url": "https://github.com/postcss/postcss-reporter.git"
- },
- "author": {
- "name": "David Clark",
- "email": "david.dave.clark@gmail.com",
- "url": "http://davidtheclark.com"
- },
- "license": "MIT",
- "bugs": {
- "url": "https://github.com/postcss/postcss-reporter/issues"
- },
- "homepage": "https://github.com/postcss/postcss-reporter",
- "devDependencies": {
- "eslint": "1.3.1",
- "less": "2.7.1",
- "source-map": "0.5.6",
- "strip-color": "^0.1.0",
- "stylelint": "6.8.0",
- "tape": "^4.7.0"
- },
- "dependencies": {
- "chalk": "^2.0.1",
- "lodash": "^4.17.4",
- "log-symbols": "^2.0.0",
- "postcss": "^6.0.8"
- },
- "engines": {
- "node": ">=4"
- }
-}
diff --git a/node_modules/laggard/node_modules/reduce-css-calc/CHANGELOG.md b/node_modules/laggard/node_modules/reduce-css-calc/CHANGELOG.md
deleted file mode 100755
index fff0c07c..00000000
--- a/node_modules/laggard/node_modules/reduce-css-calc/CHANGELOG.md
+++ /dev/null
@@ -1,87 +0,0 @@
-# 1.3.0 - 2016-08-26
-
-- Added: calc identifier from unresolved nested expressions are removed for
- better browser support
- ([#19](https://github.com/MoOx/reduce-css-calc/pull/19) - @ben-eb)
-
-# 1.2.8 - 2016-08-26
-
-- Fixed: regression from 1.2.5 on calc() with value without leading 0
- ([#17](https://github.com/MoOx/reduce-css-calc/pull/17) - @ben-eb)
-
-# 1.2.7 - 2016-08-22
-
-- Fixed: regression from 1.2.5 on calc() with value without leading 0
- (@MoOx)
-
-# 1.2.6 - 2016-08-22
-
-- Fixed: regression from 1.2.5 on calc() on multiple lines
- (@MoOx)
-
-# 1.2.5 - 2016-08-22
-
-- Fixed: security issue due to the usage of ``eval()``.
- This is to avoid an arbitrary code execution.
- Now operations are resolved using
- [``math-expression-evaluator``](https://github.com/redhivesoftware/math-expression-evaluator)
-
-# 1.2.4 - 2016-06-09
-
-- Fixed: zero values are not unitless anymore.
- Browsers do not calculate calc() with 0 unitless values.
- http://jsbin.com/punivivipo/edit?html,css,output
- ([#11](https://github.com/MoOx/reduce-css-calc/pull/11))

-
-# 1.2.3 - 2016-04-28
-
-- Fixed: wrong rouding in some edge cases
- ([#10](https://github.com/MoOx/reduce-css-calc/pull/10))
-
-# 1.2.2 - 2016-04-19
-
-- Fixed: Don't reduce expression containing CSS variables.
- ([#9](https://github.com/MoOx/reduce-css-calc/pull/9))
-
-# 1.2.1 - 2016-02-22
-
-- Fixed: uppercase letters in units are now supported
- ([#8](https://github.com/MoOx/reduce-css-calc/pull/8))
-
-# 1.2.0 - 2014-11-24
-
-- Decimal precision is now customisable as the `precision` option
-
-# 1.1.4 - 2014-11-12
-
-- 5 decimals rounding for everything
-
-# 1.1.3 - 2014-08-13
-
-- 5 decimals rounding for percentage
-
-# 1.1.2 - 2014-08-10
-
-- Prevent infinite loop by adding a `Call stack overflow`
-- Correctly ignore unrecognized values (safer evaluation for nested expressions,
- see [postcss/postcss-calc#2](https://github.com/postcss/postcss-calc/issues/2))
-- Handle rounding issues (eg: 10% * 20% now give 2%, not 2.0000000000000004%)
-
-# 1.1.1 - 2014-08-06
-
-- Fix issue when using mutiples differents prefixes in the same function
-
-# 1.1.0 - 2014-08-06
-
-- support more complex formulas
-- use `reduce-function-call`
-- better error message
-
-
-# 1.0.0 - 2014-08-04
-
-First release
-
-- based on [rework-calc](https://github.com/reworkcss/rework-calc) v1.1.0
-- add error if the calc() embed an empty calc() or empty ()
-- jscs + jshint added before tests
diff --git a/node_modules/laggard/node_modules/reduce-css-calc/package.json b/node_modules/laggard/node_modules/reduce-css-calc/package.json
deleted file mode 100644
index 6baa0601..00000000
--- a/node_modules/laggard/node_modules/reduce-css-calc/package.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "reduce-css-calc",
- "version": "1.3.0",
- "description": "Reduce CSS calc() function to the maximum",
- "keywords": [
- "css",
- "calculation",
- "calc"
- ],
- "author": "Maxime Thirouin",
- "license": "MIT",
- "repository": "https://github.com/MoOx/reduce-css-calc.git",
- "files": [
- "index.js"
- ],
- "dependencies": {
- "balanced-match": "^0.4.2",
- "math-expression-evaluator": "^1.2.14",
- "reduce-function-call": "^1.0.1"
- },
- "devDependencies": {
- "jscs": "^1.5.9",
- "jshint": "^2.5.2",
- "npmpub": "^3.0.3",
- "tape": "^2.13.4"
- },
- "scripts": {
- "jscs": "jscs *.js **/*.js",
- "jshint": "jshint . --exclude node_modules",
- "test": "npm run jscs && npm run jshint && tape test",
- "release": "npmpub"
- }
-}
diff --git a/node_modules/pixrem/node_modules/.bin/browserslist b/node_modules/pixrem/node_modules/.bin/browserslist
new file mode 120000
index 00000000..c4cc06e3
--- /dev/null
+++ b/node_modules/pixrem/node_modules/.bin/browserslist
@@ -0,0 +1 @@
+../../../browserslist/cli.js \ No newline at end of file
diff --git a/node_modules/reduce-css-calc/node_modules/postcss-value-parser/LICENSE b/node_modules/pixrem/node_modules/postcss-value-parser/LICENSE
index 6dcaefcb..6dcaefcb 100644
--- a/node_modules/reduce-css-calc/node_modules/postcss-value-parser/LICENSE
+++ b/node_modules/pixrem/node_modules/postcss-value-parser/LICENSE
diff --git a/node_modules/reduce-css-calc/node_modules/postcss-value-parser/README.md b/node_modules/pixrem/node_modules/postcss-value-parser/README.md
index 0f3be478..0f3be478 100644
--- a/node_modules/reduce-css-calc/node_modules/postcss-value-parser/README.md
+++ b/node_modules/pixrem/node_modules/postcss-value-parser/README.md
diff --git a/node_modules/reduce-css-calc/node_modules/postcss-value-parser/lib/index.js b/node_modules/pixrem/node_modules/postcss-value-parser/lib/index.js
index f9ac0e68..f9ac0e68 100644
--- a/node_modules/reduce-css-calc/node_modules/postcss-value-parser/lib/index.js
+++ b/node_modules/pixrem/node_modules/postcss-value-parser/lib/index.js
diff --git a/node_modules/reduce-css-calc/node_modules/postcss-value-parser/lib/parse.js b/node_modules/pixrem/node_modules/postcss-value-parser/lib/parse.js
index 50d1fe9c..50d1fe9c 100644
--- a/node_modules/reduce-css-calc/node_modules/postcss-value-parser/lib/parse.js
+++ b/node_modules/pixrem/node_modules/postcss-value-parser/lib/parse.js
diff --git a/node_modules/reduce-css-calc/node_modules/postcss-value-parser/lib/stringify.js b/node_modules/pixrem/node_modules/postcss-value-parser/lib/stringify.js
index 5f2c845a..5f2c845a 100644
--- a/node_modules/reduce-css-calc/node_modules/postcss-value-parser/lib/stringify.js
+++ b/node_modules/pixrem/node_modules/postcss-value-parser/lib/stringify.js
diff --git a/node_modules/reduce-css-calc/node_modules/postcss-value-parser/lib/unit.js b/node_modules/pixrem/node_modules/postcss-value-parser/lib/unit.js
index 06a1f667..06a1f667 100644
--- a/node_modules/reduce-css-calc/node_modules/postcss-value-parser/lib/unit.js
+++ b/node_modules/pixrem/node_modules/postcss-value-parser/lib/unit.js
diff --git a/node_modules/reduce-css-calc/node_modules/postcss-value-parser/lib/walk.js b/node_modules/pixrem/node_modules/postcss-value-parser/lib/walk.js
index 7666c5b1..7666c5b1 100644
--- a/node_modules/reduce-css-calc/node_modules/postcss-value-parser/lib/walk.js
+++ b/node_modules/pixrem/node_modules/postcss-value-parser/lib/walk.js
diff --git a/node_modules/reduce-css-calc/node_modules/postcss-value-parser/package.json b/node_modules/pixrem/node_modules/postcss-value-parser/package.json
index 14ae1dc7..14ae1dc7 100644
--- a/node_modules/reduce-css-calc/node_modules/postcss-value-parser/package.json
+++ b/node_modules/pixrem/node_modules/postcss-value-parser/package.json
diff --git a/node_modules/pixrem/node_modules/reduce-css-calc/CHANGELOG.md b/node_modules/pixrem/node_modules/reduce-css-calc/CHANGELOG.md
new file mode 100755
index 00000000..0a42c1bb
--- /dev/null
+++ b/node_modules/pixrem/node_modules/reduce-css-calc/CHANGELOG.md
@@ -0,0 +1,167 @@
+# Changelog of `reduce-css-call`
+
+## 2.1.8 - 2020-01-08
+
+- Fix Parse error on custom property fallback ([#68](https://github.com/MoOx/reduce-css-calc/pull/68)) - @snowystinger)
+
+## 2.1.7 - 2019-10-22
+
+- Switch to a maintained jison fork ([#57](https://github.com/MoOx/reduce-css-calc/pull/57)) - @davidgovea)
+
+## 2.1.6 - 2019-01-11
+
+- Fixed: Incorrect calculation when subtracting (e.g. `calc(100% - calc(120px + 1em + 2em + 100px))`) ([#52](https://github.com/MoOx/reduce-css-calc/pull/53) - @sylvainpolletvillard)
+
+## 2.1.5 - 2018-09-20
+
+- [Avoid breaking when seeing ` constant()`` or `env()`](https://github.com/MoOx/reduce-css-calc/commit/409c9ba2cd5e06e7f8f679f7f0c3c3a14ff3e673) by @dlee
+
+## 2.1.4 - 2018-01-22
+
+- Prevent webpack parsing issue
+ (see https://github.com/zaach/jison/pull/352)
+
+## 2.1.3 - 2017-11-27
+
+- Fixed: Incorrect reduction for a specific case (e.g. `calc(1em + (1em - 5px))`) ([#43](https://github.com/MoOx/reduce-css-calc/pull/43) - @Justineo)
+
+## 2.1.2 - 2017-11-26
+
+- Fixed: Incorrect reduction of division with custom property (e.g. `calc(var(--foo) / 2)`) ([#41](https://github.com/MoOx/reduce-css-calc/issues/41) - @Semigradsky)
+
+## 2.1.1 - 2017-10-12
+
+- Fixed: Incorrect reduction of nested expression (e.g. `calc( (1em - calc( 10px + 1em)) / 2)`) ([#39](https://github.com/MoOx/reduce-css-calc/pull/39) - @gyoshev)
+
+## 2.1.0 - 2017-10-10
+
+- Added: Support for working in browsers without transpiling ([#36](https://github.com/MoOx/reduce-css-calc/pull/36) - @Semigradsky)
+- Fixed: `calc(100vw - (100vw - 100%))` does not evaluate to `100%` ([#35](https://github.com/MoOx/reduce-css-calc/pull/35) - @Semigradsky)
+
+## 2.0.5 - 2017-05-12
+
+- Fixed: Support division with a CSS variable.
+
+## 2.0.4 - 2017-05-09
+
+- Fixed: CSS variable regex was overly greedy and caused a crash in some
+ cases. ([#27](https://github.com/MoOx/reduce-css-calc/pull/27) - @andyjansson)
+
+## 2.0.3 - 2017-05-09
+
+- Fixed: Regression in handling decimals without having any numbers after
+ the decimal place (e.g. `10.px`).
+
+## 2.0.2 - 2017-05-08
+
+- Fixed: Regression in consecutive subtraction handling
+ ([#25](https://github.com/MoOx/reduce-css-calc/pull/25) - @andyjansson)
+
+## 2.0.1 - 2017-05-08
+
+- Fixed: Support for nested calc e.g. `calc(100% - calc(50px - 25px))`.
+- Fixed: Support for CSS variables e.g. `calc(var(--mouseX) * 1px)`.
+
+## 2.0.0 - 2017-05-08
+
+- Rewritten with a jison parser for more accurate value parsing.
+- Breaking: reduce-css-calc will now throw when trying to multiply or divide
+ by the same unit (e.g. `calc(200px * 20px)`), and also when trying to divide
+ by zero.
+- Added: Better handling of zero values (e.g. `calc(100vw / 2 - 6px + 0px)`
+ becomes `calc(100vw / 2 - 6px)`).
+- Added: Better handling of mixed time values (e.g. `calc(1s - 50ms)`
+ becomes `0.95s`).
+- Added: Inner parentheses calculation to simplify complex expressions (e.g.
+ `calc(14px + 6 * ((100vw - 320px) / 448))` becomes `calc(9.71px + 1.34vw)`
+ with precision set to `2`).
+- Fixed: `calc(1px + 1)` does not evaluate to `2px`.
+
+([#22](https://github.com/MoOx/reduce-css-calc/pull/22) - @andyjansson)
+
+## 1.3.0 - 2016-08-26
+
+- Added: calc identifier from unresolved nested expressions are removed for
+ better browser support
+ ([#19](https://github.com/MoOx/reduce-css-calc/pull/19) - @ben-eb)
+
+## 1.2.8 - 2016-08-26
+
+- Fixed: regression from 1.2.5 on calc() with value without leading 0
+ ([#17](https://github.com/MoOx/reduce-css-calc/pull/17) - @ben-eb)
+
+## 1.2.7 - 2016-08-22
+
+- Fixed: regression from 1.2.5 on calc() with value without leading 0
+ (@MoOx)
+
+## 1.2.6 - 2016-08-22
+
+- Fixed: regression from 1.2.5 on calc() on multiple lines
+ (@MoOx)
+
+## 1.2.5 - 2016-08-22
+
+- Fixed: security issue due to the usage of `eval()`.
+ This is to avoid an arbitrary code execution.
+ Now operations are resolved using
+ [`math-expression-evaluator`](https://github.com/redhivesoftware/math-expression-evaluator)
+
+## 1.2.4 - 2016-06-09
+
+- Fixed: zero values are not unitless anymore.
+ Browsers do not calculate calc() with 0 unitless values.
+ http://jsbin.com/punivivipo/edit?html,css,output
+ ([#11](https://github.com/MoOx/reduce-css-calc/pull/11))
+
+## 1.2.3 - 2016-04-28
+
+- Fixed: wrong rouding in some edge cases
+ ([#10](https://github.com/MoOx/reduce-css-calc/pull/10))
+
+## 1.2.2 - 2016-04-19
+
+- Fixed: Don't reduce expression containing CSS variables.
+ ([#9](https://github.com/MoOx/reduce-css-calc/pull/9))
+
+## 1.2.1 - 2016-02-22
+
+- Fixed: uppercase letters in units are now supported
+ ([#8](https://github.com/MoOx/reduce-css-calc/pull/8))
+
+## 1.2.0 - 2014-11-24
+
+- Decimal precision is now customisable as the `precision` option
+
+## 1.1.4 - 2014-11-12
+
+- 5 decimals rounding for everything
+
+## 1.1.3 - 2014-08-13
+
+- 5 decimals rounding for percentage
+
+## 1.1.2 - 2014-08-10
+
+- Prevent infinite loop by adding a `Call stack overflow`
+- Correctly ignore unrecognized values (safer evaluation for nested expressions,
+ see [postcss/postcss-calc#2](https://github.com/postcss/postcss-calc/issues/2))
+- Handle rounding issues (eg: 10% \* 20% now give 2%, not 2.0000000000000004%)
+
+## 1.1.1 - 2014-08-06
+
+- Fix issue when using mutiples differents prefixes in the same function
+
+## 1.1.0 - 2014-08-06
+
+- support more complex formulas
+- use `reduce-function-call`
+- better error message
+
+## 1.0.0 - 2014-08-04
+
+First release
+
+- based on [rework-calc](https://github.com/reworkcss/rework-calc) v1.1.0
+- add error if the calc() embed an empty calc() or empty ()
+- jscs + jshint added before tests
diff --git a/node_modules/laggard/node_modules/reduce-css-calc/LICENSE b/node_modules/pixrem/node_modules/reduce-css-calc/LICENSE
index 7cc9dd08..7cc9dd08 100755
--- a/node_modules/laggard/node_modules/reduce-css-calc/LICENSE
+++ b/node_modules/pixrem/node_modules/reduce-css-calc/LICENSE
diff --git a/node_modules/postcss-fixes/node_modules/pixrem/node_modules/reduce-css-calc/README.md b/node_modules/pixrem/node_modules/reduce-css-calc/README.md
index 0ba73d30..bc9e59fb 100755
--- a/node_modules/postcss-fixes/node_modules/pixrem/node_modules/reduce-css-calc/README.md
+++ b/node_modules/pixrem/node_modules/reduce-css-calc/README.md
@@ -1,4 +1,6 @@
-# reduce-css-calc [![Build Status](https://travis-ci.org/MoOx/reduce-css-calc.png)](https://travis-ci.org/MoOx/reduce-css-calc)
+# reduce-css-calc
+
+[![Build Status](https://travis-ci.org/MoOx/reduce-css-calc.svg)](https://travis-ci.org/MoOx/reduce-css-calc)
> Reduce CSS calc() function to the maximum.
@@ -7,7 +9,7 @@ Particularly useful for packages like [rework-calc](https://github.com/reworkcss
## Installation
```console
-$ npm install reduce-css-calc
+npm install reduce-css-calc
```
## Usage
@@ -54,17 +56,19 @@ reduceCSSCalc("-moz-calc(50% - 2em)")
// -moz-calc(50% - 2em)
```
-See [unit tests](test/index.js) for others examples.
+See [unit tests](src/__tests__/index.js) for others examples.
+
+---
## Contributing
Work on a branch, install dev-dependencies, respect coding style & run tests before submitting a bug fix or a feature.
```console
-$ git clone https://github.com/MoOx/reduce-css-calc.git
-$ git checkout -b patch-1
-$ npm install
-$ npm test
+git clone https://github.com/MoOx/reduce-css-calc.git
+git checkout -b patch-1
+npm install
+npm test
```
## [Changelog](CHANGELOG.md)
diff --git a/node_modules/reduce-css-calc/dist/index.js b/node_modules/pixrem/node_modules/reduce-css-calc/dist/index.js
index 0a69bf38..0a69bf38 100644
--- a/node_modules/reduce-css-calc/dist/index.js
+++ b/node_modules/pixrem/node_modules/reduce-css-calc/dist/index.js
diff --git a/node_modules/reduce-css-calc/dist/lib/convert.js b/node_modules/pixrem/node_modules/reduce-css-calc/dist/lib/convert.js
index 3e5815ff..3e5815ff 100644
--- a/node_modules/reduce-css-calc/dist/lib/convert.js
+++ b/node_modules/pixrem/node_modules/reduce-css-calc/dist/lib/convert.js
diff --git a/node_modules/reduce-css-calc/dist/lib/reducer.js b/node_modules/pixrem/node_modules/reduce-css-calc/dist/lib/reducer.js
index a3d6cce9..a3d6cce9 100644
--- a/node_modules/reduce-css-calc/dist/lib/reducer.js
+++ b/node_modules/pixrem/node_modules/reduce-css-calc/dist/lib/reducer.js
diff --git a/node_modules/reduce-css-calc/dist/lib/stringifier.js b/node_modules/pixrem/node_modules/reduce-css-calc/dist/lib/stringifier.js
index 92e76326..92e76326 100644
--- a/node_modules/reduce-css-calc/dist/lib/stringifier.js
+++ b/node_modules/pixrem/node_modules/reduce-css-calc/dist/lib/stringifier.js
diff --git a/node_modules/reduce-css-calc/dist/parser.js b/node_modules/pixrem/node_modules/reduce-css-calc/dist/parser.js
index 6d6847ff..6d6847ff 100644
--- a/node_modules/reduce-css-calc/dist/parser.js
+++ b/node_modules/pixrem/node_modules/reduce-css-calc/dist/parser.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/package.json b/node_modules/pixrem/node_modules/reduce-css-calc/package.json
index c23cc0c1..e68caf24 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/package.json
+++ b/node_modules/pixrem/node_modules/reduce-css-calc/package.json
@@ -1,54 +1,49 @@
{
- "name": "postcss-calc",
- "version": "6.0.2",
- "description": "PostCSS plugin to reduce calc()",
+ "name": "reduce-css-calc",
+ "version": "2.1.8",
+ "description": "Reduce CSS calc() function to the maximum",
"keywords": [
"css",
- "postcss",
- "postcss-plugin",
"calculation",
"calc"
],
"main": "dist/index.js",
"files": [
- "dist",
- "LICENSE"
+ "dist"
],
"scripts": {
"prepublish": "npm run build && del-cli dist/__tests__",
- "build": "del-cli dist && cross-env BABEL_ENV=publish babel src --out-dir dist",
+ "build": "del-cli dist && cross-env BABEL_ENV=publish babel src --out-dir dist && jison parser.jison -o dist/parser.js",
"pretest": "eslint src && npm run build",
- "test": "ava src/__tests__/"
+ "test": "ava dist/__tests__/",
+ "release": "npmpub"
},
"author": "Maxime Thirouin",
"license": "MIT",
- "repository": "https://github.com/postcss/postcss-calc.git",
- "eslintConfig": {
- "parser": "babel-eslint",
- "extends": "eslint-config-i-am-meticulous"
- },
+ "repository": "https://github.com/MoOx/reduce-css-calc.git",
"devDependencies": {
- "ava": "^0.19.1",
+ "ava": "^0.18.2",
"babel-cli": "^6.18.0",
"babel-core": "^6.21.0",
"babel-eslint": "^7.1.1",
"babel-plugin-add-module-exports": "^0.2.1",
- "babel-preset-env": "^1.4.0",
+ "babel-preset-env": "^1.6.0",
"babel-register": "^6.18.0",
- "cross-env": "^4.0.0",
+ "cross-env": "^3.1.4",
"del-cli": "^0.2.1",
"eslint": "^3.12.2",
"eslint-config-i-am-meticulous": "^6.0.1",
"eslint-plugin-babel": "^4.0.0",
- "eslint-plugin-import": "^2.2.0"
+ "eslint-plugin-import": "^2.2.0",
+ "jison-gho": "^0.6.1-216",
+ "npmpub": "^5.0.0"
},
"dependencies": {
"css-unit-converter": "^1.1.1",
- "postcss": "^7.0.2",
- "postcss-selector-parser": "^2.2.2",
- "reduce-css-calc": "^2.0.0"
+ "postcss-value-parser": "^3.3.0"
},
- "ava": {
- "require": "babel-register"
+ "eslintConfig": {
+ "parser": "babel-eslint",
+ "extends": "eslint-config-i-am-meticulous"
}
}
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/CHANGELOG.md b/node_modules/postcss-calc/CHANGELOG.md
index ccc723bd..ccc723bd 100755
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/CHANGELOG.md
+++ b/node_modules/postcss-calc/CHANGELOG.md
diff --git a/node_modules/postcss-calc/README.md b/node_modules/postcss-calc/README.md
index 2c207402..4cabf731 100755
--- a/node_modules/postcss-calc/README.md
+++ b/node_modules/postcss-calc/README.md
@@ -1,16 +1,16 @@
-# PostCSS Calc [<img src="https://postcss.github.io/postcss/logo.svg" alt="PostCSS" width="90" height="90" align="right">][PostCSS]
+# postcss-calc [![Build Status](https://travis-ci.org/postcss/postcss-calc.png)](https://travis-ci.org/postcss/postcss-calc)
-[![NPM Version][npm-img]][npm-url]
-[![Support Chat][git-img]][git-url]
+> [PostCSS](https://github.com/postcss/postcss) plugin to reduce `calc()`.
-[PostCSS Calc] lets you reduce `calc()` references whenever it's possible.
-When multiple units are mixed together in the same expression, the `calc()`
-statement is left as is, to fallback to the [W3C calc() implementation].
+This plugin reduce `calc()` references whenever it's possible.
+This can be particularly useful with the [postcss-custom-properties](https://github.com/postcss/postcss-custom-properties) plugin.
+
+**Note:** When multiple units are mixed together in the same expression, the `calc()` statement is left as is, to fallback to the [w3c calc() feature](http://www.w3.org/TR/css3-values/#calc).
## Installation
-```bash
-npm install postcss-calc
+```console
+$ npm install postcss-calc
```
## Usage
@@ -31,28 +31,62 @@ var output = postcss()
.css
```
+**Example** (with [postcss-custom-properties](https://github.com/postcss/postcss-custom-properties) enabled as well):
+
+```js
+// dependencies
+var fs = require("fs")
+var postcss = require("postcss")
+var customProperties = require("postcss-custom-properties")
+var calc = require("postcss-calc")
+
+// css to be processed
+var css = fs.readFileSync("input.css", "utf8")
+
+// process css
+var output = postcss()
+ .use(customProperties())
+ .use(calc())
+ .process(css)
+ .css
+```
+
Using this `input.css`:
```css
+:root {
+ --main-font-size: 16px;
+}
+
+body {
+ font-size: var(--main-font-size);
+}
+
h1 {
- font-size: calc(16px * 2);
+ font-size: calc(var(--main-font-size) * 2);
height: calc(100px - 2em);
- width: calc(2*var(--base-width));
- margin-bottom: calc(16px * 1.5);
+ margin-bottom: calc(
+ var(--main-font-size)
+ * 1.5
+ )
}
```
you will get:
```css
+body {
+ font-size: 16px
+}
+
h1 {
font-size: 32px;
height: calc(100px - 2em);
- width: calc(2*var(--base-width));
margin-bottom: 24px
}
```
-Checkout [tests] for more examples.
+
+Checkout [tests](src/__tests__/index.js) for more examples.
### Options
@@ -69,8 +103,7 @@ var out = postcss()
#### `preserve` (default: `false`)
-Allow you to preserve calc() usage in output so browsers will handle decimal
-precision themselves.
+Allow you to preserve calc() usage in output so browsers will handle decimal precision themselves.
```js
var out = postcss()
@@ -122,32 +155,17 @@ div[data-size="calc(3*3)"] {
---
-## Related PostCSS plugins
-To replace the value of CSS custom properties at build time, try [PostCSS Custom Properties].
-
## Contributing
-Work on a branch, install dev-dependencies, respect coding style & run tests
-before submitting a bug fix or a feature.
+Work on a branch, install dev-dependencies, respect coding style & run tests before submitting a bug fix or a feature.
-```bash
-git clone git@github.com:postcss/postcss-calc.git
-git checkout -b patch-1
-npm install
-npm test
+```console
+$ git clone https://github.com/postcss/postcss-calc.git
+$ git checkout -b patch-1
+$ npm install
+$ npm test
```
## [Changelog](CHANGELOG.md)
## [License](LICENSE)
-
-[git-img]: https://img.shields.io/badge/support-chat-blue.svg
-[git-url]: https://gitter.im/postcss/postcss
-[npm-img]: https://img.shields.io/npm/v/postcss-calc.svg
-[npm-url]: https://www.npmjs.com/package/postcss-calc
-
-[PostCSS]: https://github.com/postcss
-[PostCSS Calc]: https://github.com/postcss/postcss-calc
-[PostCSS Custom Properties]: https://github.com/postcss/postcss-custom-properties
-[tests]: src/__tests__/index.js
-[W3C calc() implementation]: https://www.w3.org/TR/css3-values/#calc-notation
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/dist/index.js b/node_modules/postcss-calc/dist/index.js
index eb366d7b..eb366d7b 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/dist/index.js
+++ b/node_modules/postcss-calc/dist/index.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/dist/lib/transform.js b/node_modules/postcss-calc/dist/lib/transform.js
index 1a4505f9..1a4505f9 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/dist/lib/transform.js
+++ b/node_modules/postcss-calc/dist/lib/transform.js
diff --git a/node_modules/postcss-fixes/node_modules/picocolors/LICENSE b/node_modules/postcss-calc/node_modules/picocolors/LICENSE
index 496098c6..496098c6 100644
--- a/node_modules/postcss-fixes/node_modules/picocolors/LICENSE
+++ b/node_modules/postcss-calc/node_modules/picocolors/LICENSE
diff --git a/node_modules/postcss-fixes/node_modules/picocolors/README.md b/node_modules/postcss-calc/node_modules/picocolors/README.md
index a57b56db..a57b56db 100644
--- a/node_modules/postcss-fixes/node_modules/picocolors/README.md
+++ b/node_modules/postcss-calc/node_modules/picocolors/README.md
diff --git a/node_modules/postcss-fixes/node_modules/picocolors/package.json b/node_modules/postcss-calc/node_modules/picocolors/package.json
index 5da3b4d0..5da3b4d0 100644
--- a/node_modules/postcss-fixes/node_modules/picocolors/package.json
+++ b/node_modules/postcss-calc/node_modules/picocolors/package.json
diff --git a/node_modules/postcss-fixes/node_modules/picocolors/picocolors.browser.js b/node_modules/postcss-calc/node_modules/picocolors/picocolors.browser.js
index 5eb9fbe8..5eb9fbe8 100644
--- a/node_modules/postcss-fixes/node_modules/picocolors/picocolors.browser.js
+++ b/node_modules/postcss-calc/node_modules/picocolors/picocolors.browser.js
diff --git a/node_modules/postcss-fixes/node_modules/picocolors/picocolors.d.ts b/node_modules/postcss-calc/node_modules/picocolors/picocolors.d.ts
index 0ae2855b..0ae2855b 100644
--- a/node_modules/postcss-fixes/node_modules/picocolors/picocolors.d.ts
+++ b/node_modules/postcss-calc/node_modules/picocolors/picocolors.d.ts
diff --git a/node_modules/postcss-fixes/node_modules/picocolors/picocolors.js b/node_modules/postcss-calc/node_modules/picocolors/picocolors.js
index 5cebd7ca..5cebd7ca 100644
--- a/node_modules/postcss-fixes/node_modules/picocolors/picocolors.js
+++ b/node_modules/postcss-calc/node_modules/picocolors/picocolors.js
diff --git a/node_modules/postcss-fixes/node_modules/picocolors/types.ts b/node_modules/postcss-calc/node_modules/picocolors/types.ts
index b4bacee4..b4bacee4 100644
--- a/node_modules/postcss-fixes/node_modules/picocolors/types.ts
+++ b/node_modules/postcss-calc/node_modules/picocolors/types.ts
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/API.md b/node_modules/postcss-calc/node_modules/postcss-selector-parser/API.md
index 3386d547..3386d547 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/API.md
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/API.md
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/CHANGELOG.md b/node_modules/postcss-calc/node_modules/postcss-selector-parser/CHANGELOG.md
index 34995769..34995769 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/CHANGELOG.md
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/CHANGELOG.md
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/LICENSE-MIT b/node_modules/postcss-calc/node_modules/postcss-selector-parser/LICENSE-MIT
index fd0e863a..fd0e863a 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/LICENSE-MIT
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/LICENSE-MIT
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/README.md b/node_modules/postcss-calc/node_modules/postcss-selector-parser/README.md
index aa52db36..aa52db36 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/README.md
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/README.md
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/index.js b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/index.js
index 62400258..62400258 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/index.js
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/index.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/parser.js b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/parser.js
index 18beadbb..18beadbb 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/parser.js
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/parser.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/processor.js b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/processor.js
index 087618ce..087618ce 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/processor.js
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/processor.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/attribute.js b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/attribute.js
index 4ea74c12..4ea74c12 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/attribute.js
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/attribute.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/className.js b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/className.js
index d7bff16b..d7bff16b 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/className.js
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/className.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/combinator.js b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/combinator.js
index 673dc750..673dc750 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/combinator.js
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/combinator.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/comment.js b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/comment.js
index 6d96556e..6d96556e 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/comment.js
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/comment.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/container.js b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/container.js
index bc9ec00c..bc9ec00c 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/container.js
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/container.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/id.js b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/id.js
index 4538dcf8..4538dcf8 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/id.js
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/id.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/namespace.js b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/namespace.js
index 5121b2d4..5121b2d4 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/namespace.js
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/namespace.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/nesting.js b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/nesting.js
index c3264b07..c3264b07 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/nesting.js
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/nesting.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/node.js b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/node.js
index 30f45fd4..30f45fd4 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/node.js
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/node.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/pseudo.js b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/pseudo.js
index 709cc224..709cc224 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/pseudo.js
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/pseudo.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/root.js b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/root.js
index d8865b5b..d8865b5b 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/root.js
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/root.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/selector.js b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/selector.js
index e2187662..e2187662 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/selector.js
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/selector.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/string.js b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/string.js
index d644e7d1..d644e7d1 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/string.js
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/string.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/tag.js b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/tag.js
index a1f2848a..a1f2848a 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/tag.js
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/tag.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/types.js b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/types.js
index aa73ac9a..aa73ac9a 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/types.js
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/types.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/universal.js b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/universal.js
index f4a35ff5..f4a35ff5 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/selectors/universal.js
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/selectors/universal.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/sortAscending.js b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/sortAscending.js
index 17a2eb4e..17a2eb4e 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/sortAscending.js
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/sortAscending.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/tokenize.js b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/tokenize.js
index acc73b05..acc73b05 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/dist/tokenize.js
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/dist/tokenize.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/package.json b/node_modules/postcss-calc/node_modules/postcss-selector-parser/package.json
index f4a59597..f4a59597 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-selector-parser/package.json
+++ b/node_modules/postcss-calc/node_modules/postcss-selector-parser/package.json
diff --git a/node_modules/postcss-calc/node_modules/postcss-value-parser/LICENSE b/node_modules/postcss-calc/node_modules/postcss-value-parser/LICENSE
new file mode 100644
index 00000000..6dcaefcb
--- /dev/null
+++ b/node_modules/postcss-calc/node_modules/postcss-value-parser/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) Bogdan Chadkin <trysound@yandex.ru>
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/postcss-calc/node_modules/postcss-value-parser/README.md b/node_modules/postcss-calc/node_modules/postcss-value-parser/README.md
new file mode 100644
index 00000000..0f3be478
--- /dev/null
+++ b/node_modules/postcss-calc/node_modules/postcss-value-parser/README.md
@@ -0,0 +1,253 @@
+# postcss-value-parser
+
+[![Travis CI](https://travis-ci.org/TrySound/postcss-value-parser.svg)](https://travis-ci.org/TrySound/postcss-value-parser)
+
+Transforms CSS declaration values and at-rule parameters into a tree of nodes, and provides a simple traversal API.
+
+## Usage
+
+```js
+var valueParser = require('postcss-value-parser');
+var cssBackgroundValue = 'url(foo.png) no-repeat 40px 73%';
+var parsedValue = valueParser(cssBackgroundValue);
+// parsedValue exposes an API described below,
+// e.g. parsedValue.walk(..), parsedValue.toString(), etc.
+```
+
+For example, parsing the value `rgba(233, 45, 66, .5)` will return the following:
+
+```js
+{
+ nodes: [
+ {
+ type: 'function',
+ value: 'rgba',
+ before: '',
+ after: '',
+ nodes: [
+ { type: 'word', value: '233' },
+ { type: 'div', value: ',', before: '', after: ' ' },
+ { type: 'word', value: '45' },
+ { type: 'div', value: ',', before: '', after: ' ' },
+ { type: 'word', value: '66' },
+ { type: 'div', value: ',', before: ' ', after: '' },
+ { type: 'word', value: '.5' }
+ ]
+ }
+ ]
+}
+```
+
+If you wanted to convert each `rgba()` value in `sourceCSS` to a hex value, you could do so like this:
+
+```js
+var valueParser = require('postcss-value-parser');
+
+var parsed = valueParser(sourceCSS);
+
+// walk() will visit all the of the nodes in the tree,
+// invoking the callback for each.
+parsed.walk(function (node) {
+
+ // Since we only want to transform rgba() values,
+ // we can ignore anything else.
+ if (node.type !== 'function' && node.value !== 'rgba') return;
+
+ // We can make an array of the rgba() arguments to feed to a
+ // convertToHex() function
+ var color = node.nodes.filter(function (node) {
+ return node.type === 'word';
+ }).map(function (node) {
+ return Number(node.value);
+ }); // [233, 45, 66, .5]
+
+ // Now we will transform the existing rgba() function node
+ // into a word node with the hex value
+ node.type = 'word';
+ node.value = convertToHex(color);
+})
+
+parsed.toString(); // #E92D42
+```
+
+## Nodes
+
+Each node is an object with these common properties:
+
+- **type**: The type of node (`word`, `string`, `div`, `space`, `comment`, or `function`).
+ Each type is documented below.
+- **value**: Each node has a `value` property; but what exactly `value` means
+ is specific to the node type. Details are documented for each type below.
+- **sourceIndex**: The starting index of the node within the original source
+ string. For example, given the source string `10px 20px`, the `word` node
+ whose value is `20px` will have a `sourceIndex` of `5`.
+
+### word
+
+The catch-all node type that includes keywords (e.g. `no-repeat`),
+quantities (e.g. `20px`, `75%`, `1.5`), and hex colors (e.g. `#e6e6e6`).
+
+Node-specific properties:
+
+- **value**: The "word" itself.
+
+### string
+
+A quoted string value, e.g. `"something"` in `content: "something";`.
+
+Node-specific properties:
+
+- **value**: The text content of the string.
+- **quote**: The quotation mark surrounding the string, either `"` or `'`.
+- **unclosed**: `true` if the string was not closed properly. e.g. `"unclosed string `.
+
+### div
+
+A divider, for example
+
+- `,` in `animation-duration: 1s, 2s, 3s`
+- `/` in `border-radius: 10px / 23px`
+- `:` in `(min-width: 700px)`
+
+Node-specific properties:
+
+- **value**: The divider character. Either `,`, `/`, or `:` (see examples above).
+- **before**: Whitespace before the divider.
+- **after**: Whitespace after the divider.
+
+### space
+
+Whitespace used as a separator, e.g. ` ` occurring twice in `border: 1px solid black;`.
+
+Node-specific properties:
+
+- **value**: The whitespace itself.
+
+### comment
+
+A CSS comment starts with `/*` and ends with `*/`
+
+Node-specific properties:
+
+- **value**: The comment value without `/*` and `*/`
+- **unclosed**: `true` if the comment was not closed properly. e.g. `/* comment without an end `.
+
+### function
+
+A CSS function, e.g. `rgb(0,0,0)` or `url(foo.bar)`.
+
+Function nodes have nodes nested within them: the function arguments.
+
+Additional properties:
+
+- **value**: The name of the function, e.g. `rgb` in `rgb(0,0,0)`.
+- **before**: Whitespace after the opening parenthesis and before the first argument,
+ e.g. ` ` in `rgb( 0,0,0)`.
+- **after**: Whitespace before the closing parenthesis and after the last argument,
+ e.g. ` ` in `rgb(0,0,0 )`.
+- **nodes**: More nodes representing the arguments to the function.
+- **unclosed**: `true` if the parentheses was not closed properly. e.g. `( unclosed-function `.
+
+Media features surrounded by parentheses are considered functions with an
+empty value. For example, `(min-width: 700px)` parses to these nodes:
+
+```js
+[
+ {
+ type: 'function', value: '', before: '', after: '',
+ nodes: [
+ { type: 'word', value: 'min-width' },
+ { type: 'div', value: ':', before: '', after: ' ' },
+ { type: 'word', value: '700px' }
+ ]
+ }
+]
+```
+
+`url()` functions can be parsed a little bit differently depending on
+whether the first character in the argument is a quotation mark.
+
+`url( /gfx/img/bg.jpg )` parses to:
+
+```js
+{ type: 'function', sourceIndex: 0, value: 'url', before: ' ', after: ' ', nodes: [
+ { type: 'word', sourceIndex: 5, value: '/gfx/img/bg.jpg' }
+] }
+```
+
+`url( "/gfx/img/bg.jpg" )`, on the other hand, parses to:
+
+```js
+{ type: 'function', sourceIndex: 0, value: 'url', before: ' ', after: ' ', nodes: [
+ type: 'string', sourceIndex: 5, quote: '"', value: '/gfx/img/bg.jpg' },
+] }
+```
+
+## API
+
+```
+var valueParser = require('postcss-value-parser');
+```
+
+### valueParser.unit(quantity)
+
+Parses `quantity`, distinguishing the number from the unit. Returns an object like the following:
+
+```js
+// Given 2rem
+{
+ number: '2',
+ unit: 'rem'
+}
+```
+
+If the `quantity` argument cannot be parsed as a number, returns `false`.
+
+*This function does not parse complete values*: you cannot pass it `1px solid black` and expect `px` as
+the unit. Instead, you should pass it single quantities only. Parse `1px solid black`, then pass it
+the stringified `1px` node (a `word` node) to parse the number and unit.
+
+### valueParser.stringify(nodes[, custom])
+
+Stringifies a node or array of nodes.
+
+The `custom` function is called for each `node`; return a string to override the default behaviour.
+
+### valueParser.walk(nodes, callback[, bubble])
+
+Walks each provided node, recursively walking all descendent nodes within functions.
+
+Returning `false` in the `callback` will prevent traversal of descendent nodes (within functions).
+You can use this feature to for shallow iteration, walking over only the *immediate* children.
+*Note: This only applies if `bubble` is `false` (which is the default).*
+
+By default, the tree is walked from the outermost node inwards.
+To reverse the direction, pass `true` for the `bubble` argument.
+
+The `callback` is invoked with three arguments: `callback(node, index, nodes)`.
+
+- `node`: The current node.
+- `index`: The index of the current node.
+- `nodes`: The complete nodes array passed to `walk()`.
+
+Returns the `valueParser` instance.
+
+### var parsed = valueParser(value)
+
+Returns the parsed node tree.
+
+### parsed.nodes
+
+The array of nodes.
+
+### parsed.toString()
+
+Stringifies the node tree.
+
+### parsed.walk(callback[, bubble])
+
+Walks each node inside `parsed.nodes`. See the documentation for `valueParser.walk()` above.
+
+# License
+
+MIT © [Bogdan Chadkin](mailto:trysound@yandex.ru)
diff --git a/node_modules/postcss-calc/node_modules/postcss-value-parser/lib/index.js b/node_modules/postcss-calc/node_modules/postcss-value-parser/lib/index.js
new file mode 100644
index 00000000..f9ac0e68
--- /dev/null
+++ b/node_modules/postcss-calc/node_modules/postcss-value-parser/lib/index.js
@@ -0,0 +1,28 @@
+var parse = require("./parse");
+var walk = require("./walk");
+var stringify = require("./stringify");
+
+function ValueParser(value) {
+ if (this instanceof ValueParser) {
+ this.nodes = parse(value);
+ return this;
+ }
+ return new ValueParser(value);
+}
+
+ValueParser.prototype.toString = function() {
+ return Array.isArray(this.nodes) ? stringify(this.nodes) : "";
+};
+
+ValueParser.prototype.walk = function(cb, bubble) {
+ walk(this.nodes, cb, bubble);
+ return this;
+};
+
+ValueParser.unit = require("./unit");
+
+ValueParser.walk = walk;
+
+ValueParser.stringify = stringify;
+
+module.exports = ValueParser;
diff --git a/node_modules/postcss-calc/node_modules/postcss-value-parser/lib/parse.js b/node_modules/postcss-calc/node_modules/postcss-value-parser/lib/parse.js
new file mode 100644
index 00000000..50d1fe9c
--- /dev/null
+++ b/node_modules/postcss-calc/node_modules/postcss-value-parser/lib/parse.js
@@ -0,0 +1,251 @@
+var openParentheses = "(".charCodeAt(0);
+var closeParentheses = ")".charCodeAt(0);
+var singleQuote = "'".charCodeAt(0);
+var doubleQuote = '"'.charCodeAt(0);
+var backslash = "\\".charCodeAt(0);
+var slash = "/".charCodeAt(0);
+var comma = ",".charCodeAt(0);
+var colon = ":".charCodeAt(0);
+var star = "*".charCodeAt(0);
+
+module.exports = function(input) {
+ var tokens = [];
+ var value = input;
+
+ var next, quote, prev, token, escape, escapePos, whitespacePos;
+ var pos = 0;
+ var code = value.charCodeAt(pos);
+ var max = value.length;
+ var stack = [{ nodes: tokens }];
+ var balanced = 0;
+ var parent;
+
+ var name = "";
+ var before = "";
+ var after = "";
+
+ while (pos < max) {
+ // Whitespaces
+ if (code <= 32) {
+ next = pos;
+ do {
+ next += 1;
+ code = value.charCodeAt(next);
+ } while (code <= 32);
+ token = value.slice(pos, next);
+
+ prev = tokens[tokens.length - 1];
+ if (code === closeParentheses && balanced) {
+ after = token;
+ } else if (prev && prev.type === "div") {
+ prev.after = token;
+ } else if (
+ code === comma ||
+ code === colon ||
+ (code === slash && value.charCodeAt(next + 1) !== star)
+ ) {
+ before = token;
+ } else {
+ tokens.push({
+ type: "space",
+ sourceIndex: pos,
+ value: token
+ });
+ }
+
+ pos = next;
+
+ // Quotes
+ } else if (code === singleQuote || code === doubleQuote) {
+ next = pos;
+ quote = code === singleQuote ? "'" : '"';
+ token = {
+ type: "string",
+ sourceIndex: pos,
+ quote: quote
+ };
+ do {
+ escape = false;
+ next = value.indexOf(quote, next + 1);
+ if (~next) {
+ escapePos = next;
+ while (value.charCodeAt(escapePos - 1) === backslash) {
+ escapePos -= 1;
+ escape = !escape;
+ }
+ } else {
+ value += quote;
+ next = value.length - 1;
+ token.unclosed = true;
+ }
+ } while (escape);
+ token.value = value.slice(pos + 1, next);
+
+ tokens.push(token);
+ pos = next + 1;
+ code = value.charCodeAt(pos);
+
+ // Comments
+ } else if (code === slash && value.charCodeAt(pos + 1) === star) {
+ token = {
+ type: "comment",
+ sourceIndex: pos
+ };
+
+ next = value.indexOf("*/", pos);
+ if (next === -1) {
+ token.unclosed = true;
+ next = value.length;
+ }
+
+ token.value = value.slice(pos + 2, next);
+ tokens.push(token);
+
+ pos = next + 2;
+ code = value.charCodeAt(pos);
+
+ // Dividers
+ } else if (code === slash || code === comma || code === colon) {
+ token = value[pos];
+
+ tokens.push({
+ type: "div",
+ sourceIndex: pos - before.length,
+ value: token,
+ before: before,
+ after: ""
+ });
+ before = "";
+
+ pos += 1;
+ code = value.charCodeAt(pos);
+
+ // Open parentheses
+ } else if (openParentheses === code) {
+ // Whitespaces after open parentheses
+ next = pos;
+ do {
+ next += 1;
+ code = value.charCodeAt(next);
+ } while (code <= 32);
+ token = {
+ type: "function",
+ sourceIndex: pos - name.length,
+ value: name,
+ before: value.slice(pos + 1, next)
+ };
+ pos = next;
+
+ if (name === "url" && code !== singleQuote && code !== doubleQuote) {
+ next -= 1;
+ do {
+ escape = false;
+ next = value.indexOf(")", next + 1);
+ if (~next) {
+ escapePos = next;
+ while (value.charCodeAt(escapePos - 1) === backslash) {
+ escapePos -= 1;
+ escape = !escape;
+ }
+ } else {
+ value += ")";
+ next = value.length - 1;
+ token.unclosed = true;
+ }
+ } while (escape);
+ // Whitespaces before closed
+ whitespacePos = next;
+ do {
+ whitespacePos -= 1;
+ code = value.charCodeAt(whitespacePos);
+ } while (code <= 32);
+ if (pos !== whitespacePos + 1) {
+ token.nodes = [
+ {
+ type: "word",
+ sourceIndex: pos,
+ value: value.slice(pos, whitespacePos + 1)
+ }
+ ];
+ } else {
+ token.nodes = [];
+ }
+ if (token.unclosed && whitespacePos + 1 !== next) {
+ token.after = "";
+ token.nodes.push({
+ type: "space",
+ sourceIndex: whitespacePos + 1,
+ value: value.slice(whitespacePos + 1, next)
+ });
+ } else {
+ token.after = value.slice(whitespacePos + 1, next);
+ }
+ pos = next + 1;
+ code = value.charCodeAt(pos);
+ tokens.push(token);
+ } else {
+ balanced += 1;
+ token.after = "";
+ tokens.push(token);
+ stack.push(token);
+ tokens = token.nodes = [];
+ parent = token;
+ }
+ name = "";
+
+ // Close parentheses
+ } else if (closeParentheses === code && balanced) {
+ pos += 1;
+ code = value.charCodeAt(pos);
+
+ parent.after = after;
+ after = "";
+ balanced -= 1;
+ stack.pop();
+ parent = stack[balanced];
+ tokens = parent.nodes;
+
+ // Words
+ } else {
+ next = pos;
+ do {
+ if (code === backslash) {
+ next += 1;
+ }
+ next += 1;
+ code = value.charCodeAt(next);
+ } while (
+ next < max &&
+ !(
+ code <= 32 ||
+ code === singleQuote ||
+ code === doubleQuote ||
+ code === comma ||
+ code === colon ||
+ code === slash ||
+ code === openParentheses ||
+ (code === closeParentheses && balanced)
+ )
+ );
+ token = value.slice(pos, next);
+
+ if (openParentheses === code) {
+ name = token;
+ } else {
+ tokens.push({
+ type: "word",
+ sourceIndex: pos,
+ value: token
+ });
+ }
+
+ pos = next;
+ }
+ }
+
+ for (pos = stack.length - 1; pos; pos -= 1) {
+ stack[pos].unclosed = true;
+ }
+
+ return stack[0].nodes;
+};
diff --git a/node_modules/postcss-calc/node_modules/postcss-value-parser/lib/stringify.js b/node_modules/postcss-calc/node_modules/postcss-value-parser/lib/stringify.js
new file mode 100644
index 00000000..5f2c845a
--- /dev/null
+++ b/node_modules/postcss-calc/node_modules/postcss-value-parser/lib/stringify.js
@@ -0,0 +1,48 @@
+function stringifyNode(node, custom) {
+ var type = node.type;
+ var value = node.value;
+ var buf;
+ var customResult;
+
+ if (custom && (customResult = custom(node)) !== undefined) {
+ return customResult;
+ } else if (type === "word" || type === "space") {
+ return value;
+ } else if (type === "string") {
+ buf = node.quote || "";
+ return buf + value + (node.unclosed ? "" : buf);
+ } else if (type === "comment") {
+ return "/*" + value + (node.unclosed ? "" : "*/");
+ } else if (type === "div") {
+ return (node.before || "") + value + (node.after || "");
+ } else if (Array.isArray(node.nodes)) {
+ buf = stringify(node.nodes);
+ if (type !== "function") {
+ return buf;
+ }
+ return (
+ value +
+ "(" +
+ (node.before || "") +
+ buf +
+ (node.after || "") +
+ (node.unclosed ? "" : ")")
+ );
+ }
+ return value;
+}
+
+function stringify(nodes, custom) {
+ var result, i;
+
+ if (Array.isArray(nodes)) {
+ result = "";
+ for (i = nodes.length - 1; ~i; i -= 1) {
+ result = stringifyNode(nodes[i], custom) + result;
+ }
+ return result;
+ }
+ return stringifyNode(nodes, custom);
+}
+
+module.exports = stringify;
diff --git a/node_modules/postcss-calc/node_modules/postcss-value-parser/lib/unit.js b/node_modules/postcss-calc/node_modules/postcss-value-parser/lib/unit.js
new file mode 100644
index 00000000..06a1f667
--- /dev/null
+++ b/node_modules/postcss-calc/node_modules/postcss-value-parser/lib/unit.js
@@ -0,0 +1,49 @@
+var minus = "-".charCodeAt(0);
+var plus = "+".charCodeAt(0);
+var dot = ".".charCodeAt(0);
+var exp = "e".charCodeAt(0);
+var EXP = "E".charCodeAt(0);
+
+module.exports = function(value) {
+ var pos = 0;
+ var length = value.length;
+ var dotted = false;
+ var sciPos = -1;
+ var containsNumber = false;
+ var code;
+
+ while (pos < length) {
+ code = value.charCodeAt(pos);
+
+ if (code >= 48 && code <= 57) {
+ containsNumber = true;
+ } else if (code === exp || code === EXP) {
+ if (sciPos > -1) {
+ break;
+ }
+ sciPos = pos;
+ } else if (code === dot) {
+ if (dotted) {
+ break;
+ }
+ dotted = true;
+ } else if (code === plus || code === minus) {
+ if (pos !== 0) {
+ break;
+ }
+ } else {
+ break;
+ }
+
+ pos += 1;
+ }
+
+ if (sciPos + 1 === pos) pos--;
+
+ return containsNumber
+ ? {
+ number: value.slice(0, pos),
+ unit: value.slice(pos)
+ }
+ : false;
+};
diff --git a/node_modules/postcss-calc/node_modules/postcss-value-parser/lib/walk.js b/node_modules/postcss-calc/node_modules/postcss-value-parser/lib/walk.js
new file mode 100644
index 00000000..7666c5b1
--- /dev/null
+++ b/node_modules/postcss-calc/node_modules/postcss-value-parser/lib/walk.js
@@ -0,0 +1,22 @@
+module.exports = function walk(nodes, cb, bubble) {
+ var i, max, node, result;
+
+ for (i = 0, max = nodes.length; i < max; i += 1) {
+ node = nodes[i];
+ if (!bubble) {
+ result = cb(node, i, nodes);
+ }
+
+ if (
+ result !== false &&
+ node.type === "function" &&
+ Array.isArray(node.nodes)
+ ) {
+ walk(node.nodes, cb, bubble);
+ }
+
+ if (bubble) {
+ cb(node, i, nodes);
+ }
+ }
+};
diff --git a/node_modules/postcss-calc/node_modules/postcss-value-parser/package.json b/node_modules/postcss-calc/node_modules/postcss-value-parser/package.json
new file mode 100644
index 00000000..14ae1dc7
--- /dev/null
+++ b/node_modules/postcss-calc/node_modules/postcss-value-parser/package.json
@@ -0,0 +1,58 @@
+{
+ "name": "postcss-value-parser",
+ "version": "3.3.1",
+ "description": "Transforms css values and at-rule params into the tree",
+ "main": "lib/index.js",
+ "files": [
+ "lib"
+ ],
+ "devDependencies": {
+ "eslint": "^5.6.1",
+ "husky": "^1.0.0",
+ "lint-staged": "^7.3.0",
+ "prettier": "^1.4.4",
+ "tap-spec": "^5.0.0",
+ "tape": "^4.2.0"
+ },
+ "scripts": {
+ "lint:prettier": "prettier '**/*.js' --list-different",
+ "lint:js": "eslint . --cache",
+ "lint": "yarn lint:js && yarn lint:prettier",
+ "pretest": "yarn lint",
+ "test": "tape test/*.js | tap-spec"
+ },
+ "eslintConfig": {
+ "env": {
+ "es6": true,
+ "node": true
+ },
+ "extends": "eslint:recommended"
+ },
+ "lint-staged": {
+ "*.js": [
+ "eslint",
+ "prettier --write",
+ "git add"
+ ]
+ },
+ "husky": {
+ "hooks": {
+ "pre-commit": "lint-staged"
+ }
+ },
+ "author": "Bogdan Chadkin <trysound@yandex.ru>",
+ "license": "MIT",
+ "homepage": "https://github.com/TrySound/postcss-value-parser",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/TrySound/postcss-value-parser.git"
+ },
+ "keywords": [
+ "postcss",
+ "value",
+ "parser"
+ ],
+ "bugs": {
+ "url": "https://github.com/TrySound/postcss-value-parser/issues"
+ }
+}
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/LICENSE b/node_modules/postcss-calc/node_modules/postcss/LICENSE
index da057b45..da057b45 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/LICENSE
+++ b/node_modules/postcss-calc/node_modules/postcss/LICENSE
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/README.md b/node_modules/postcss-calc/node_modules/postcss/README.md
index af736927..af736927 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/README.md
+++ b/node_modules/postcss-calc/node_modules/postcss/README.md
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/at-rule.js b/node_modules/postcss-calc/node_modules/postcss/lib/at-rule.js
index ab053a7d..ab053a7d 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/at-rule.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/at-rule.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/comment.js b/node_modules/postcss-calc/node_modules/postcss/lib/comment.js
index 345b5636..345b5636 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/comment.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/comment.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/container.js b/node_modules/postcss-calc/node_modules/postcss/lib/container.js
index ef97d56d..ef97d56d 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/container.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/container.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/css-syntax-error.js b/node_modules/postcss-calc/node_modules/postcss/lib/css-syntax-error.js
index de129128..de129128 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/css-syntax-error.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/css-syntax-error.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/declaration.js b/node_modules/postcss-calc/node_modules/postcss/lib/declaration.js
index 9381f4ad..9381f4ad 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/declaration.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/declaration.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/input.js b/node_modules/postcss-calc/node_modules/postcss/lib/input.js
index 42201350..42201350 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/input.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/input.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/lazy-result.js b/node_modules/postcss-calc/node_modules/postcss/lib/lazy-result.js
index 1d00c98b..1d00c98b 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/lazy-result.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/lazy-result.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/list.js b/node_modules/postcss-calc/node_modules/postcss/lib/list.js
index d2feb760..d2feb760 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/list.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/list.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/map-generator.js b/node_modules/postcss-calc/node_modules/postcss/lib/map-generator.js
index a0d4f95c..a0d4f95c 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/map-generator.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/map-generator.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/node.js b/node_modules/postcss-calc/node_modules/postcss/lib/node.js
index 840fea5b..840fea5b 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/node.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/node.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/parse.js b/node_modules/postcss-calc/node_modules/postcss/lib/parse.js
index 99c417ec..99c417ec 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/parse.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/parse.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/parser.js b/node_modules/postcss-calc/node_modules/postcss/lib/parser.js
index a471142d..a471142d 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/parser.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/parser.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/postcss.d.ts b/node_modules/postcss-calc/node_modules/postcss/lib/postcss.d.ts
index 7513b4da..7513b4da 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/postcss.d.ts
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/postcss.d.ts
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/postcss.js b/node_modules/postcss-calc/node_modules/postcss/lib/postcss.js
index 2e6c5ce4..2e6c5ce4 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/postcss.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/postcss.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/previous-map.js b/node_modules/postcss-calc/node_modules/postcss/lib/previous-map.js
index 588e8099..588e8099 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/previous-map.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/previous-map.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/processor.js b/node_modules/postcss-calc/node_modules/postcss/lib/processor.js
index b20084f4..b20084f4 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/processor.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/processor.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/result.js b/node_modules/postcss-calc/node_modules/postcss/lib/result.js
index 7617ad2e..7617ad2e 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/result.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/result.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/root.js b/node_modules/postcss-calc/node_modules/postcss/lib/root.js
index 864def26..864def26 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/root.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/root.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/rule.js b/node_modules/postcss-calc/node_modules/postcss/lib/rule.js
index b8281bd0..b8281bd0 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/rule.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/rule.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/stringifier.js b/node_modules/postcss-calc/node_modules/postcss/lib/stringifier.js
index 0e99a417..0e99a417 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/stringifier.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/stringifier.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/stringify.js b/node_modules/postcss-calc/node_modules/postcss/lib/stringify.js
index 6629ec38..6629ec38 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/stringify.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/stringify.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/terminal-highlight.js b/node_modules/postcss-calc/node_modules/postcss/lib/terminal-highlight.js
index 11f84233..11f84233 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/terminal-highlight.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/terminal-highlight.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/tokenize.js b/node_modules/postcss-calc/node_modules/postcss/lib/tokenize.js
index 5b556bf5..5b556bf5 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/tokenize.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/tokenize.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/vendor.js b/node_modules/postcss-calc/node_modules/postcss/lib/vendor.js
index 8abdeed4..8abdeed4 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/vendor.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/vendor.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/warn-once.js b/node_modules/postcss-calc/node_modules/postcss/lib/warn-once.js
index f04c7f21..f04c7f21 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/warn-once.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/warn-once.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/warning.js b/node_modules/postcss-calc/node_modules/postcss/lib/warning.js
index ca385c91..ca385c91 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/lib/warning.js
+++ b/node_modules/postcss-calc/node_modules/postcss/lib/warning.js
diff --git a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/package.json b/node_modules/postcss-calc/node_modules/postcss/package.json
index f2897ca4..f2897ca4 100644
--- a/node_modules/postcss-fixes/node_modules/postcss-calc/node_modules/postcss/package.json
+++ b/node_modules/postcss-calc/node_modules/postcss/package.json
diff --git a/node_modules/postcss-calc/node_modules/reduce-css-calc/CHANGELOG.md b/node_modules/postcss-calc/node_modules/reduce-css-calc/CHANGELOG.md
new file mode 100755
index 00000000..0a42c1bb
--- /dev/null
+++ b/node_modules/postcss-calc/node_modules/reduce-css-calc/CHANGELOG.md
@@ -0,0 +1,167 @@
+# Changelog of `reduce-css-call`
+
+## 2.1.8 - 2020-01-08
+
+- Fix Parse error on custom property fallback ([#68](https://github.com/MoOx/reduce-css-calc/pull/68)) - @snowystinger)
+
+## 2.1.7 - 2019-10-22
+
+- Switch to a maintained jison fork ([#57](https://github.com/MoOx/reduce-css-calc/pull/57)) - @davidgovea)
+
+## 2.1.6 - 2019-01-11
+
+- Fixed: Incorrect calculation when subtracting (e.g. `calc(100% - calc(120px + 1em + 2em + 100px))`) ([#52](https://github.com/MoOx/reduce-css-calc/pull/53) - @sylvainpolletvillard)
+
+## 2.1.5 - 2018-09-20
+
+- [Avoid breaking when seeing ` constant()`` or `env()`](https://github.com/MoOx/reduce-css-calc/commit/409c9ba2cd5e06e7f8f679f7f0c3c3a14ff3e673) by @dlee
+
+## 2.1.4 - 2018-01-22
+
+- Prevent webpack parsing issue
+ (see https://github.com/zaach/jison/pull/352)
+
+## 2.1.3 - 2017-11-27
+
+- Fixed: Incorrect reduction for a specific case (e.g. `calc(1em + (1em - 5px))`) ([#43](https://github.com/MoOx/reduce-css-calc/pull/43) - @Justineo)
+
+## 2.1.2 - 2017-11-26
+
+- Fixed: Incorrect reduction of division with custom property (e.g. `calc(var(--foo) / 2)`) ([#41](https://github.com/MoOx/reduce-css-calc/issues/41) - @Semigradsky)
+
+## 2.1.1 - 2017-10-12
+
+- Fixed: Incorrect reduction of nested expression (e.g. `calc( (1em - calc( 10px + 1em)) / 2)`) ([#39](https://github.com/MoOx/reduce-css-calc/pull/39) - @gyoshev)
+
+## 2.1.0 - 2017-10-10
+
+- Added: Support for working in browsers without transpiling ([#36](https://github.com/MoOx/reduce-css-calc/pull/36) - @Semigradsky)
+- Fixed: `calc(100vw - (100vw - 100%))` does not evaluate to `100%` ([#35](https://github.com/MoOx/reduce-css-calc/pull/35) - @Semigradsky)
+
+## 2.0.5 - 2017-05-12
+
+- Fixed: Support division with a CSS variable.
+
+## 2.0.4 - 2017-05-09
+
+- Fixed: CSS variable regex was overly greedy and caused a crash in some
+ cases. ([#27](https://github.com/MoOx/reduce-css-calc/pull/27) - @andyjansson)
+
+## 2.0.3 - 2017-05-09
+
+- Fixed: Regression in handling decimals without having any numbers after
+ the decimal place (e.g. `10.px`).
+
+## 2.0.2 - 2017-05-08
+
+- Fixed: Regression in consecutive subtraction handling
+ ([#25](https://github.com/MoOx/reduce-css-calc/pull/25) - @andyjansson)
+
+## 2.0.1 - 2017-05-08
+
+- Fixed: Support for nested calc e.g. `calc(100% - calc(50px - 25px))`.
+- Fixed: Support for CSS variables e.g. `calc(var(--mouseX) * 1px)`.
+
+## 2.0.0 - 2017-05-08
+
+- Rewritten with a jison parser for more accurate value parsing.
+- Breaking: reduce-css-calc will now throw when trying to multiply or divide
+ by the same unit (e.g. `calc(200px * 20px)`), and also when trying to divide
+ by zero.
+- Added: Better handling of zero values (e.g. `calc(100vw / 2 - 6px + 0px)`
+ becomes `calc(100vw / 2 - 6px)`).
+- Added: Better handling of mixed time values (e.g. `calc(1s - 50ms)`
+ becomes `0.95s`).
+- Added: Inner parentheses calculation to simplify complex expressions (e.g.
+ `calc(14px + 6 * ((100vw - 320px) / 448))` becomes `calc(9.71px + 1.34vw)`
+ with precision set to `2`).
+- Fixed: `calc(1px + 1)` does not evaluate to `2px`.
+
+([#22](https://github.com/MoOx/reduce-css-calc/pull/22) - @andyjansson)
+
+## 1.3.0 - 2016-08-26
+
+- Added: calc identifier from unresolved nested expressions are removed for
+ better browser support
+ ([#19](https://github.com/MoOx/reduce-css-calc/pull/19) - @ben-eb)
+
+## 1.2.8 - 2016-08-26
+
+- Fixed: regression from 1.2.5 on calc() with value without leading 0
+ ([#17](https://github.com/MoOx/reduce-css-calc/pull/17) - @ben-eb)
+
+## 1.2.7 - 2016-08-22
+
+- Fixed: regression from 1.2.5 on calc() with value without leading 0
+ (@MoOx)
+
+## 1.2.6 - 2016-08-22
+
+- Fixed: regression from 1.2.5 on calc() on multiple lines
+ (@MoOx)
+
+## 1.2.5 - 2016-08-22
+
+- Fixed: security issue due to the usage of `eval()`.
+ This is to avoid an arbitrary code execution.
+ Now operations are resolved using
+ [`math-expression-evaluator`](https://github.com/redhivesoftware/math-expression-evaluator)
+
+## 1.2.4 - 2016-06-09
+
+- Fixed: zero values are not unitless anymore.
+ Browsers do not calculate calc() with 0 unitless values.
+ http://jsbin.com/punivivipo/edit?html,css,output
+ ([#11](https://github.com/MoOx/reduce-css-calc/pull/11))
+
+## 1.2.3 - 2016-04-28
+
+- Fixed: wrong rouding in some edge cases
+ ([#10](https://github.com/MoOx/reduce-css-calc/pull/10))
+
+## 1.2.2 - 2016-04-19
+
+- Fixed: Don't reduce expression containing CSS variables.
+ ([#9](https://github.com/MoOx/reduce-css-calc/pull/9))
+
+## 1.2.1 - 2016-02-22
+
+- Fixed: uppercase letters in units are now supported
+ ([#8](https://github.com/MoOx/reduce-css-calc/pull/8))
+
+## 1.2.0 - 2014-11-24
+
+- Decimal precision is now customisable as the `precision` option
+
+## 1.1.4 - 2014-11-12
+
+- 5 decimals rounding for everything
+
+## 1.1.3 - 2014-08-13
+
+- 5 decimals rounding for percentage
+
+## 1.1.2 - 2014-08-10
+
+- Prevent infinite loop by adding a `Call stack overflow`
+- Correctly ignore unrecognized values (safer evaluation for nested expressions,
+ see [postcss/postcss-calc#2](https://github.com/postcss/postcss-calc/issues/2))
+- Handle rounding issues (eg: 10% \* 20% now give 2%, not 2.0000000000000004%)
+
+## 1.1.1 - 2014-08-06
+
+- Fix issue when using mutiples differents prefixes in the same function
+
+## 1.1.0 - 2014-08-06
+
+- support more complex formulas
+- use `reduce-function-call`
+- better error message
+
+## 1.0.0 - 2014-08-04
+
+First release
+
+- based on [rework-calc](https://github.com/reworkcss/rework-calc) v1.1.0
+- add error if the calc() embed an empty calc() or empty ()
+- jscs + jshint added before tests
diff --git a/node_modules/postcss-fixes/node_modules/pixrem/node_modules/reduce-css-calc/LICENSE b/node_modules/postcss-calc/node_modules/reduce-css-calc/LICENSE
index 7cc9dd08..7cc9dd08 100755
--- a/node_modules/postcss-fixes/node_modules/pixrem/node_modules/reduce-css-calc/LICENSE
+++ b/node_modules/postcss-calc/node_modules/reduce-css-calc/LICENSE
diff --git a/node_modules/laggard/node_modules/reduce-css-calc/README.md b/node_modules/postcss-calc/node_modules/reduce-css-calc/README.md
index 0ba73d30..bc9e59fb 100755
--- a/node_modules/laggard/node_modules/reduce-css-calc/README.md
+++ b/node_modules/postcss-calc/node_modules/reduce-css-calc/README.md
@@ -1,4 +1,6 @@
-# reduce-css-calc [![Build Status](https://travis-ci.org/MoOx/reduce-css-calc.png)](https://travis-ci.org/MoOx/reduce-css-calc)
+# reduce-css-calc
+
+[![Build Status](https://travis-ci.org/MoOx/reduce-css-calc.svg)](https://travis-ci.org/MoOx/reduce-css-calc)
> Reduce CSS calc() function to the maximum.
@@ -7,7 +9,7 @@ Particularly useful for packages like [rework-calc](https://github.com/reworkcss
## Installation
```console
-$ npm install reduce-css-calc
+npm install reduce-css-calc
```
## Usage
@@ -54,17 +56,19 @@ reduceCSSCalc("-moz-calc(50% - 2em)")
// -moz-calc(50% - 2em)
```
-See [unit tests](test/index.js) for others examples.
+See [unit tests](src/__tests__/index.js) for others examples.
+
+---
## Contributing
Work on a branch, install dev-dependencies, respect coding style & run tests before submitting a bug fix or a feature.
```console
-$ git clone https://github.com/MoOx/reduce-css-calc.git
-$ git checkout -b patch-1
-$ npm install
-$ npm test
+git clone https://github.com/MoOx/reduce-css-calc.git
+git checkout -b patch-1
+npm install
+npm test
```
## [Changelog](CHANGELOG.md)
diff --git a/node_modules/postcss-calc/node_modules/reduce-css-calc/dist/index.js b/node_modules/postcss-calc/node_modules/reduce-css-calc/dist/index.js
new file mode 100644
index 00000000..0a69bf38
--- /dev/null
+++ b/node_modules/postcss-calc/node_modules/reduce-css-calc/dist/index.js
@@ -0,0 +1,51 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _postcssValueParser = require('postcss-value-parser');
+
+var _postcssValueParser2 = _interopRequireDefault(_postcssValueParser);
+
+var _parser = require('./parser');
+
+var _reducer = require('./lib/reducer');
+
+var _reducer2 = _interopRequireDefault(_reducer);
+
+var _stringifier = require('./lib/stringifier');
+
+var _stringifier2 = _interopRequireDefault(_stringifier);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+// eslint-disable-line
+var MATCH_CALC = /((?:\-[a-z]+\-)?calc)/;
+
+exports.default = function (value) {
+ var precision = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 5;
+
+ return (0, _postcssValueParser2.default)(value).walk(function (node) {
+ // skip anything which isn't a calc() function
+ if (node.type !== 'function' || !MATCH_CALC.test(node.value)) return;
+
+ // stringify calc expression and produce an AST
+ var contents = _postcssValueParser2.default.stringify(node.nodes);
+
+ // skip constant() and env()
+ if (contents.indexOf('constant') >= 0 || contents.indexOf('env') >= 0) return;
+
+ var ast = _parser.parser.parse(contents);
+
+ // reduce AST to its simplest form, that is, either to a single value
+ // or a simplified calc expression
+ var reducedAst = (0, _reducer2.default)(ast, precision);
+
+ // stringify AST and write it back
+ node.type = 'word';
+ node.value = (0, _stringifier2.default)(node.value, reducedAst, precision);
+ }, true).toString();
+};
+
+module.exports = exports['default']; \ No newline at end of file
diff --git a/node_modules/postcss-calc/node_modules/reduce-css-calc/dist/lib/convert.js b/node_modules/postcss-calc/node_modules/reduce-css-calc/dist/lib/convert.js
new file mode 100644
index 00000000..3e5815ff
--- /dev/null
+++ b/node_modules/postcss-calc/node_modules/reduce-css-calc/dist/lib/convert.js
@@ -0,0 +1,38 @@
+'use strict';
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+var _cssUnitConverter = require('css-unit-converter');
+
+var _cssUnitConverter2 = _interopRequireDefault(_cssUnitConverter);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function convertNodes(left, right, precision) {
+ switch (left.type) {
+ case 'LengthValue':
+ case 'AngleValue':
+ case 'TimeValue':
+ case 'FrequencyValue':
+ case 'ResolutionValue':
+ return convertAbsoluteLength(left, right, precision);
+ default:
+ return { left: left, right: right };
+ }
+}
+
+function convertAbsoluteLength(left, right, precision) {
+ if (right.type === left.type) {
+ right = {
+ type: left.type,
+ value: (0, _cssUnitConverter2.default)(right.value, right.unit, left.unit, precision),
+ unit: left.unit
+ };
+ }
+ return { left: left, right: right };
+}
+
+exports.default = convertNodes;
+module.exports = exports['default']; \ No newline at end of file
diff --git a/node_modules/postcss-calc/node_modules/reduce-css-calc/dist/lib/reducer.js b/node_modules/postcss-calc/node_modules/reduce-css-calc/dist/lib/reducer.js
new file mode 100644
index 00000000..a3d6cce9
--- /dev/null
+++ b/node_modules/postcss-calc/node_modules/reduce-css-calc/dist/lib/reducer.js
@@ -0,0 +1,258 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.flip = flip;
+
+var _convert = require("./convert");
+
+var _convert2 = _interopRequireDefault(_convert);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function reduce(node, precision) {
+ if (node.type === "MathExpression") return reduceMathExpression(node, precision);
+ if (node.type === "Calc") return reduce(node.value, precision);
+
+ return node;
+}
+
+function isEqual(left, right) {
+ return left.type === right.type && left.value === right.value;
+}
+
+function isValueType(type) {
+ switch (type) {
+ case 'LengthValue':
+ case 'AngleValue':
+ case 'TimeValue':
+ case 'FrequencyValue':
+ case 'ResolutionValue':
+ case 'EmValue':
+ case 'ExValue':
+ case 'ChValue':
+ case 'RemValue':
+ case 'VhValue':
+ case 'VwValue':
+ case 'VminValue':
+ case 'VmaxValue':
+ case 'PercentageValue':
+ case 'Value':
+ return true;
+ }
+ return false;
+}
+
+function convertMathExpression(node, precision) {
+ var nodes = (0, _convert2.default)(node.left, node.right, precision);
+ var left = reduce(nodes.left, precision);
+ var right = reduce(nodes.right, precision);
+
+ if (left.type === "MathExpression" && right.type === "MathExpression") {
+
+ if (left.operator === '/' && right.operator === '*' || left.operator === '-' && right.operator === '+' || left.operator === '*' && right.operator === '/' || left.operator === '+' && right.operator === '-') {
+
+ if (isEqual(left.right, right.right)) nodes = (0, _convert2.default)(left.left, right.left, precision);else if (isEqual(left.right, right.left)) nodes = (0, _convert2.default)(left.left, right.right, precision);
+
+ left = reduce(nodes.left, precision);
+ right = reduce(nodes.right, precision);
+ }
+ }
+
+ node.left = left;
+ node.right = right;
+ return node;
+}
+
+function flip(operator) {
+ return operator === '+' ? '-' : '+';
+}
+
+function flipValue(node) {
+ if (isValueType(node.type)) node.value = -node.value;else if (node.type == 'MathExpression') {
+ node.left = flipValue(node.left);
+ node.right = flipValue(node.right);
+ }
+ return node;
+}
+
+function reduceAddSubExpression(node, precision) {
+ var _node = node,
+ left = _node.left,
+ right = _node.right,
+ op = _node.operator;
+
+
+ if (left.type === 'CssVariable' || right.type === 'CssVariable') return node;
+
+ // something + 0 => something
+ // something - 0 => something
+ if (right.value === 0) return left;
+
+ // 0 + something => something
+ if (left.value === 0 && op === "+") return right;
+
+ // 0 - something => -something
+ if (left.value === 0 && op === "-") return flipValue(right);
+
+ // value + value
+ // value - value
+ if (left.type === right.type && isValueType(left.type)) {
+ node = Object.assign({}, left);
+ if (op === "+") node.value = left.value + right.value;else node.value = left.value - right.value;
+ }
+
+ // value <op> (expr)
+ if (isValueType(left.type) && (right.operator === '+' || right.operator === '-') && right.type === 'MathExpression') {
+ // value + (value + something) => (value + value) + something
+ // value + (value - something) => (value + value) - something
+ // value - (value + something) => (value - value) - something
+ // value - (value - something) => (value - value) + something
+ if (left.type === right.left.type) {
+ node = Object.assign({}, node);
+ node.left = reduce({
+ type: 'MathExpression',
+ operator: op,
+ left: left,
+ right: right.left
+ }, precision);
+ node.right = right.right;
+ node.operator = op === '-' ? flip(right.operator) : right.operator;
+ return reduce(node, precision);
+ }
+ // value + (something + value) => (value + value) + something
+ // value + (something - value) => (value - value) + something
+ // value - (something + value) => (value - value) - something
+ // value - (something - value) => (value + value) - something
+ else if (left.type === right.right.type) {
+ node = Object.assign({}, node);
+ node.left = reduce({
+ type: 'MathExpression',
+ operator: op === '-' ? flip(right.operator) : right.operator,
+ left: left,
+ right: right.right
+ }, precision);
+ node.right = right.left;
+ return reduce(node, precision);
+ }
+ }
+
+ // (expr) <op> value
+ if (left.type === 'MathExpression' && (left.operator === '+' || left.operator === '-') && isValueType(right.type)) {
+ // (value + something) + value => (value + value) + something
+ // (value - something) + value => (value + value) - something
+ // (value + something) - value => (value - value) + something
+ // (value - something) - value => (value - value) - something
+ if (right.type === left.left.type) {
+ node = Object.assign({}, left);
+ node.left = reduce({
+ type: 'MathExpression',
+ operator: op,
+ left: left.left,
+ right: right
+ }, precision);
+ return reduce(node, precision);
+ }
+ // (something + value) + value => something + (value + value)
+ // (something - value1) + value2 => something - (value2 - value1)
+ // (something + value) - value => something + (value - value)
+ // (something - value) - value => something - (value + value)
+ else if (right.type === left.right.type) {
+ node = Object.assign({}, left);
+ if (left.operator === '-') {
+ node.right = reduce({
+ type: 'MathExpression',
+ operator: op === '-' ? '+' : '-',
+ left: right,
+ right: left.right
+ }, precision);
+ node.operator = op === '-' ? '-' : '+';
+ } else {
+ node.right = reduce({
+ type: 'MathExpression',
+ operator: op,
+ left: left.right,
+ right: right
+ }, precision);
+ }
+ if (node.right.value < 0) {
+ node.right.value *= -1;
+ node.operator = node.operator === '-' ? '+' : '-';
+ }
+ return reduce(node, precision);
+ }
+ }
+ return node;
+}
+
+function reduceDivisionExpression(node, precision) {
+ if (!isValueType(node.right.type)) return node;
+
+ if (node.right.type !== 'Value') throw new Error("Cannot divide by \"" + node.right.unit + "\", number expected");
+
+ if (node.right.value === 0) throw new Error('Cannot divide by zero');
+
+ // (expr) / value
+ if (node.left.type === 'MathExpression') {
+ if (isValueType(node.left.left.type) && isValueType(node.left.right.type)) {
+ node.left.left.value /= node.right.value;
+ node.left.right.value /= node.right.value;
+ return reduce(node.left, precision);
+ }
+ return node;
+ }
+ // something / value
+ else if (isValueType(node.left.type)) {
+ node.left.value /= node.right.value;
+ return node.left;
+ }
+ return node;
+}
+
+function reduceMultiplicationExpression(node) {
+ // (expr) * value
+ if (node.left.type === 'MathExpression' && node.right.type === 'Value') {
+ if (isValueType(node.left.left.type) && isValueType(node.left.right.type)) {
+ node.left.left.value *= node.right.value;
+ node.left.right.value *= node.right.value;
+ return node.left;
+ }
+ }
+ // something * value
+ else if (isValueType(node.left.type) && node.right.type === 'Value') {
+ node.left.value *= node.right.value;
+ return node.left;
+ }
+ // value * (expr)
+ else if (node.left.type === 'Value' && node.right.type === 'MathExpression') {
+ if (isValueType(node.right.left.type) && isValueType(node.right.right.type)) {
+ node.right.left.value *= node.left.value;
+ node.right.right.value *= node.left.value;
+ return node.right;
+ }
+ }
+ // value * something
+ else if (node.left.type === 'Value' && isValueType(node.right.type)) {
+ node.right.value *= node.left.value;
+ return node.right;
+ }
+ return node;
+}
+
+function reduceMathExpression(node, precision) {
+ node = convertMathExpression(node, precision);
+
+ switch (node.operator) {
+ case "+":
+ case "-":
+ return reduceAddSubExpression(node, precision);
+ case "/":
+ return reduceDivisionExpression(node, precision);
+ case "*":
+ return reduceMultiplicationExpression(node);
+ }
+ return node;
+}
+
+exports.default = reduce; \ No newline at end of file
diff --git a/node_modules/postcss-calc/node_modules/reduce-css-calc/dist/lib/stringifier.js b/node_modules/postcss-calc/node_modules/reduce-css-calc/dist/lib/stringifier.js
new file mode 100644
index 00000000..92e76326
--- /dev/null
+++ b/node_modules/postcss-calc/node_modules/reduce-css-calc/dist/lib/stringifier.js
@@ -0,0 +1,78 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+
+exports.default = function (calc, node, precision) {
+ var str = stringify(node, precision);
+
+ if (node.type === "MathExpression") {
+ // if calc expression couldn't be resolved to a single value, re-wrap it as
+ // a calc()
+ str = calc + "(" + str + ")";
+ }
+ return str;
+};
+
+var _reducer = require("./reducer");
+
+var order = {
+ "*": 0,
+ "/": 0,
+ "+": 1,
+ "-": 1
+};
+
+function round(value, prec) {
+ if (prec !== false) {
+ var precision = Math.pow(10, prec);
+ return Math.round(value * precision) / precision;
+ }
+ return value;
+}
+
+function stringify(node, prec) {
+ switch (node.type) {
+ case "MathExpression":
+ {
+ var left = node.left,
+ right = node.right,
+ op = node.operator;
+
+ var str = "";
+
+ if (left.type === 'MathExpression' && order[op] < order[left.operator]) str += "(" + stringify(left, prec) + ")";else str += stringify(left, prec);
+
+ str += " " + node.operator + " ";
+
+ if (right.type === 'MathExpression' && order[op] < order[right.operator]) {
+ str += "(" + stringify(right, prec) + ")";
+ } else if (right.type === 'MathExpression' && op === "-" && ["+", "-"].includes(right.operator)) {
+ // fix #52 : a-(b+c) = a-b-c
+ right.operator = (0, _reducer.flip)(right.operator);
+ str += stringify(right, prec);
+ } else {
+ str += stringify(right, prec);
+ }
+
+ return str;
+ }
+ case "Value":
+ return round(node.value, prec);
+ case 'CssVariable':
+ if (node.fallback) {
+ return "var(" + node.value + ", " + stringify(node.fallback, prec, true) + ")";
+ }
+ return "var(" + node.value + ")";
+ case 'Calc':
+ if (node.prefix) {
+ return "-" + node.prefix + "-calc(" + stringify(node.value, prec) + ")";
+ }
+ return "calc(" + stringify(node.value, prec) + ")";
+ default:
+ return round(node.value, prec) + node.unit;
+ }
+}
+
+module.exports = exports["default"]; \ No newline at end of file
diff --git a/node_modules/postcss-calc/node_modules/reduce-css-calc/dist/parser.js b/node_modules/postcss-calc/node_modules/reduce-css-calc/dist/parser.js
new file mode 100644
index 00000000..6d6847ff
--- /dev/null
+++ b/node_modules/postcss-calc/node_modules/reduce-css-calc/dist/parser.js
@@ -0,0 +1,3858 @@
+
+/* parser generated by jison 0.6.1-215 */
+
+/*
+ * Returns a Parser object of the following structure:
+ *
+ * Parser: {
+ * yy: {} The so-called "shared state" or rather the *source* of it;
+ * the real "shared state" `yy` passed around to
+ * the rule actions, etc. is a derivative/copy of this one,
+ * not a direct reference!
+ * }
+ *
+ * Parser.prototype: {
+ * yy: {},
+ * EOF: 1,
+ * TERROR: 2,
+ *
+ * trace: function(errorMessage, ...),
+ *
+ * JisonParserError: function(msg, hash),
+ *
+ * quoteName: function(name),
+ * Helper function which can be overridden by user code later on: put suitable
+ * quotes around literal IDs in a description string.
+ *
+ * originalQuoteName: function(name),
+ * The basic quoteName handler provided by JISON.
+ * `cleanupAfterParse()` will clean up and reset `quoteName()` to reference this function
+ * at the end of the `parse()`.
+ *
+ * describeSymbol: function(symbol),
+ * Return a more-or-less human-readable description of the given symbol, when
+ * available, or the symbol itself, serving as its own 'description' for lack
+ * of something better to serve up.
+ *
+ * Return NULL when the symbol is unknown to the parser.
+ *
+ * symbols_: {associative list: name ==> number},
+ * terminals_: {associative list: number ==> name},
+ * nonterminals: {associative list: rule-name ==> {associative list: number ==> rule-alt}},
+ * terminal_descriptions_: (if there are any) {associative list: number ==> description},
+ * productions_: [...],
+ *
+ * performAction: function parser__performAction(yytext, yyleng, yylineno, yyloc, yystate, yysp, yyvstack, yylstack, yystack, yysstack),
+ *
+ * The function parameters and `this` have the following value/meaning:
+ * - `this` : reference to the `yyval` internal object, which has members (`$` and `_$`)
+ * to store/reference the rule value `$$` and location info `@$`.
+ *
+ * One important thing to note about `this` a.k.a. `yyval`: every *reduce* action gets
+ * to see the same object via the `this` reference, i.e. if you wish to carry custom
+ * data from one reduce action through to the next within a single parse run, then you
+ * may get nasty and use `yyval` a.k.a. `this` for storing you own semi-permanent data.
+ *
+ * `this.yy` is a direct reference to the `yy` shared state object.
+ *
+ * `%parse-param`-specified additional `parse()` arguments have been added to this `yy`
+ * object at `parse()` start and are therefore available to the action code via the
+ * same named `yy.xxxx` attributes (where `xxxx` represents a identifier name from
+ * the %parse-param` list.
+ *
+ * - `yytext` : reference to the lexer value which belongs to the last lexer token used
+ * to match this rule. This is *not* the look-ahead token, but the last token
+ * that's actually part of this rule.
+ *
+ * Formulated another way, `yytext` is the value of the token immediately preceeding
+ * the current look-ahead token.
+ * Caveats apply for rules which don't require look-ahead, such as epsilon rules.
+ *
+ * - `yyleng` : ditto as `yytext`, only now for the lexer.yyleng value.
+ *
+ * - `yylineno`: ditto as `yytext`, only now for the lexer.yylineno value.
+ *
+ * - `yyloc` : ditto as `yytext`, only now for the lexer.yylloc lexer token location info.
+ *
+ * WARNING: since jison 0.4.18-186 this entry may be NULL/UNDEFINED instead
+ * of an empty object when no suitable location info can be provided.
+ *
+ * - `yystate` : the current parser state number, used internally for dispatching and
+ * executing the action code chunk matching the rule currently being reduced.
+ *
+ * - `yysp` : the current state stack position (a.k.a. 'stack pointer')
+ *
+ * This one comes in handy when you are going to do advanced things to the parser
+ * stacks, all of which are accessible from your action code (see the next entries below).
+ *
+ * Also note that you can access this and other stack index values using the new double-hash
+ * syntax, i.e. `##$ === ##0 === yysp`, while `##1` is the stack index for all things
+ * related to the first rule term, just like you have `$1`, `@1` and `#1`.
+ * This is made available to write very advanced grammar action rules, e.g. when you want
+ * to investigate the parse state stack in your action code, which would, for example,
+ * be relevant when you wish to implement error diagnostics and reporting schemes similar
+ * to the work described here:
+ *
+ * + Pottier, F., 2016. Reachability and error diagnosis in LR(1) automata.
+ * In Journées Francophones des Languages Applicatifs.
+ *
+ * + Jeffery, C.L., 2003. Generating LR syntax error messages from examples.
+ * ACM Transactions on Programming Languages and Systems (TOPLAS), 25(5), pp.631–640.
+ *
+ * - `yyrulelength`: the current rule's term count, i.e. the number of entries occupied on the stack.
+ *
+ * This one comes in handy when you are going to do advanced things to the parser
+ * stacks, all of which are accessible from your action code (see the next entries below).
+ *
+ * - `yyvstack`: reference to the parser value stack. Also accessed via the `$1` etc.
+ * constructs.
+ *
+ * - `yylstack`: reference to the parser token location stack. Also accessed via
+ * the `@1` etc. constructs.
+ *
+ * WARNING: since jison 0.4.18-186 this array MAY contain slots which are
+ * UNDEFINED rather than an empty (location) object, when the lexer/parser
+ * action code did not provide a suitable location info object when such a
+ * slot was filled!
+ *
+ * - `yystack` : reference to the parser token id stack. Also accessed via the
+ * `#1` etc. constructs.
+ *
+ * Note: this is a bit of a **white lie** as we can statically decode any `#n` reference to
+ * its numeric token id value, hence that code wouldn't need the `yystack` but *you* might
+ * want access this array for your own purposes, such as error analysis as mentioned above!
+ *
+ * Note that this stack stores the current stack of *tokens*, that is the sequence of
+ * already parsed=reduced *nonterminals* (tokens representing rules) and *terminals*
+ * (lexer tokens *shifted* onto the stack until the rule they belong to is found and
+ * *reduced*.
+ *
+ * - `yysstack`: reference to the parser state stack. This one carries the internal parser
+ * *states* such as the one in `yystate`, which are used to represent
+ * the parser state machine in the *parse table*. *Very* *internal* stuff,
+ * what can I say? If you access this one, you're clearly doing wicked things
+ *
+ * - `...` : the extra arguments you specified in the `%parse-param` statement in your
+ * grammar definition file.
+ *
+ * table: [...],
+ * State transition table
+ * ----------------------
+ *
+ * index levels are:
+ * - `state` --> hash table
+ * - `symbol` --> action (number or array)
+ *
+ * If the `action` is an array, these are the elements' meaning:
+ * - index [0]: 1 = shift, 2 = reduce, 3 = accept
+ * - index [1]: GOTO `state`
+ *
+ * If the `action` is a number, it is the GOTO `state`
+ *
+ * defaultActions: {...},
+ *
+ * parseError: function(str, hash, ExceptionClass),
+ * yyError: function(str, ...),
+ * yyRecovering: function(),
+ * yyErrOk: function(),
+ * yyClearIn: function(),
+ *
+ * constructParseErrorInfo: function(error_message, exception_object, expected_token_set, is_recoverable),
+ * Helper function **which will be set up during the first invocation of the `parse()` method**.
+ * Produces a new errorInfo 'hash object' which can be passed into `parseError()`.
+ * See it's use in this parser kernel in many places; example usage:
+ *
+ * var infoObj = parser.constructParseErrorInfo('fail!', null,
+ * parser.collect_expected_token_set(state), true);
+ * var retVal = parser.parseError(infoObj.errStr, infoObj, parser.JisonParserError);
+ *
+ * originalParseError: function(str, hash, ExceptionClass),
+ * The basic `parseError` handler provided by JISON.
+ * `cleanupAfterParse()` will clean up and reset `parseError()` to reference this function
+ * at the end of the `parse()`.
+ *
+ * options: { ... parser %options ... },
+ *
+ * parse: function(input[, args...]),
+ * Parse the given `input` and return the parsed value (or `true` when none was provided by
+ * the root action, in which case the parser is acting as a *matcher*).
+ * You MAY use the additional `args...` parameters as per `%parse-param` spec of this grammar:
+ * these extra `args...` are added verbatim to the `yy` object reference as member variables.
+ *
+ * WARNING:
+ * Parser's additional `args...` parameters (via `%parse-param`) MAY conflict with
+ * any attributes already added to `yy` by the jison run-time;
+ * when such a collision is detected an exception is thrown to prevent the generated run-time
+ * from silently accepting this confusing and potentially hazardous situation!
+ *
+ * The lexer MAY add its own set of additional parameters (via the `%parse-param` line in
+ * the lexer section of the grammar spec): these will be inserted in the `yy` shared state
+ * object and any collision with those will be reported by the lexer via a thrown exception.
+ *
+ * cleanupAfterParse: function(resultValue, invoke_post_methods, do_not_nuke_errorinfos),
+ * Helper function **which will be set up during the first invocation of the `parse()` method**.
+ * This helper API is invoked at the end of the `parse()` call, unless an exception was thrown
+ * and `%options no-try-catch` has been defined for this grammar: in that case this helper MAY
+ * be invoked by calling user code to ensure the `post_parse` callbacks are invoked and
+ * the internal parser gets properly garbage collected under these particular circumstances.
+ *
+ * yyMergeLocationInfo: function(first_index, last_index, first_yylloc, last_yylloc, dont_look_back),
+ * Helper function **which will be set up during the first invocation of the `parse()` method**.
+ * This helper API can be invoked to calculate a spanning `yylloc` location info object.
+ *
+ * Note: %epsilon rules MAY specify no `first_index` and `first_yylloc`, in which case
+ * this function will attempt to obtain a suitable location marker by inspecting the location stack
+ * backwards.
+ *
+ * For more info see the documentation comment further below, immediately above this function's
+ * implementation.
+ *
+ * lexer: {
+ * yy: {...}, A reference to the so-called "shared state" `yy` once
+ * received via a call to the `.setInput(input, yy)` lexer API.
+ * EOF: 1,
+ * ERROR: 2,
+ * JisonLexerError: function(msg, hash),
+ * parseError: function(str, hash, ExceptionClass),
+ * setInput: function(input, [yy]),
+ * input: function(),
+ * unput: function(str),
+ * more: function(),
+ * reject: function(),
+ * less: function(n),
+ * pastInput: function(n),
+ * upcomingInput: function(n),
+ * showPosition: function(),
+ * test_match: function(regex_match_array, rule_index, ...),
+ * next: function(...),
+ * lex: function(...),
+ * begin: function(condition),
+ * pushState: function(condition),
+ * popState: function(),
+ * topState: function(),
+ * _currentRules: function(),
+ * stateStackSize: function(),
+ * cleanupAfterLex: function()
+ *
+ * options: { ... lexer %options ... },
+ *
+ * performAction: function(yy, yy_, $avoiding_name_collisions, YY_START, ...),
+ * rules: [...],
+ * conditions: {associative list: name ==> set},
+ * }
+ * }
+ *
+ *
+ * token location info (@$, _$, etc.): {
+ * first_line: n,
+ * last_line: n,
+ * first_column: n,
+ * last_column: n,
+ * range: [start_number, end_number]
+ * (where the numbers are indexes into the input string, zero-based)
+ * }
+ *
+ * ---
+ *
+ * The `parseError` function receives a 'hash' object with these members for lexer and
+ * parser errors:
+ *
+ * {
+ * text: (matched text)
+ * token: (the produced terminal token, if any)
+ * token_id: (the produced terminal token numeric ID, if any)
+ * line: (yylineno)
+ * loc: (yylloc)
+ * }
+ *
+ * parser (grammar) errors will also provide these additional members:
+ *
+ * {
+ * expected: (array describing the set of expected tokens;
+ * may be UNDEFINED when we cannot easily produce such a set)
+ * state: (integer (or array when the table includes grammar collisions);
+ * represents the current internal state of the parser kernel.
+ * can, for example, be used to pass to the `collect_expected_token_set()`
+ * API to obtain the expected token set)
+ * action: (integer; represents the current internal action which will be executed)
+ * new_state: (integer; represents the next/planned internal state, once the current
+ * action has executed)
+ * recoverable: (boolean: TRUE when the parser MAY have an error recovery rule
+ * available for this particular error)
+ * state_stack: (array: the current parser LALR/LR internal state stack; this can be used,
+ * for instance, for advanced error analysis and reporting)
+ * value_stack: (array: the current parser LALR/LR internal `$$` value stack; this can be used,
+ * for instance, for advanced error analysis and reporting)
+ * location_stack: (array: the current parser LALR/LR internal location stack; this can be used,
+ * for instance, for advanced error analysis and reporting)
+ * yy: (object: the current parser internal "shared state" `yy`
+ * as is also available in the rule actions; this can be used,
+ * for instance, for advanced error analysis and reporting)
+ * lexer: (reference to the current lexer instance used by the parser)
+ * parser: (reference to the current parser instance)
+ * }
+ *
+ * while `this` will reference the current parser instance.
+ *
+ * When `parseError` is invoked by the lexer, `this` will still reference the related *parser*
+ * instance, while these additional `hash` fields will also be provided:
+ *
+ * {
+ * lexer: (reference to the current lexer instance which reported the error)
+ * }
+ *
+ * When `parseError` is invoked by the parser due to a **JavaScript exception** being fired
+ * from either the parser or lexer, `this` will still reference the related *parser*
+ * instance, while these additional `hash` fields will also be provided:
+ *
+ * {
+ * exception: (reference to the exception thrown)
+ * }
+ *
+ * Please do note that in the latter situation, the `expected` field will be omitted as
+ * this type of failure is assumed not to be due to *parse errors* but rather due to user
+ * action code in either parser or lexer failing unexpectedly.
+ *
+ * ---
+ *
+ * You can specify parser options by setting / modifying the `.yy` object of your Parser instance.
+ * These options are available:
+ *
+ * ### options which are global for all parser instances
+ *
+ * Parser.pre_parse: function(yy)
+ * optional: you can specify a pre_parse() function in the chunk following
+ * the grammar, i.e. after the last `%%`.
+ * Parser.post_parse: function(yy, retval, parseInfo) { return retval; }
+ * optional: you can specify a post_parse() function in the chunk following
+ * the grammar, i.e. after the last `%%`. When it does not return any value,
+ * the parser will return the original `retval`.
+ *
+ * ### options which can be set up per parser instance
+ *
+ * yy: {
+ * pre_parse: function(yy)
+ * optional: is invoked before the parse cycle starts (and before the first
+ * invocation of `lex()`) but immediately after the invocation of
+ * `parser.pre_parse()`).
+ * post_parse: function(yy, retval, parseInfo) { return retval; }
+ * optional: is invoked when the parse terminates due to success ('accept')
+ * or failure (even when exceptions are thrown).
+ * `retval` contains the return value to be produced by `Parser.parse()`;
+ * this function can override the return value by returning another.
+ * When it does not return any value, the parser will return the original
+ * `retval`.
+ * This function is invoked immediately before `parser.post_parse()`.
+ *
+ * parseError: function(str, hash, ExceptionClass)
+ * optional: overrides the default `parseError` function.
+ * quoteName: function(name),
+ * optional: overrides the default `quoteName` function.
+ * }
+ *
+ * parser.lexer.options: {
+ * pre_lex: function()
+ * optional: is invoked before the lexer is invoked to produce another token.
+ * `this` refers to the Lexer object.
+ * post_lex: function(token) { return token; }
+ * optional: is invoked when the lexer has produced a token `token`;
+ * this function can override the returned token value by returning another.
+ * When it does not return any (truthy) value, the lexer will return
+ * the original `token`.
+ * `this` refers to the Lexer object.
+ *
+ * ranges: boolean
+ * optional: `true` ==> token location info will include a .range[] member.
+ * flex: boolean
+ * optional: `true` ==> flex-like lexing behaviour where the rules are tested
+ * exhaustively to find the longest match.
+ * backtrack_lexer: boolean
+ * optional: `true` ==> lexer regexes are tested in order and for invoked;
+ * the lexer terminates the scan when a token is returned by the action code.
+ * xregexp: boolean
+ * optional: `true` ==> lexer rule regexes are "extended regex format" requiring the
+ * `XRegExp` library. When this `%option` has not been specified at compile time, all lexer
+ * rule regexes have been written as standard JavaScript RegExp expressions.
+ * }
+ */
+
+
+
+ var parser = (function () {
+
+
+// See also:
+// http://stackoverflow.com/questions/1382107/whats-a-good-way-to-extend-error-in-javascript/#35881508
+// but we keep the prototype.constructor and prototype.name assignment lines too for compatibility
+// with userland code which might access the derived class in a 'classic' way.
+function JisonParserError(msg, hash) {
+ Object.defineProperty(this, 'name', {
+ enumerable: false,
+ writable: false,
+ value: 'JisonParserError'
+ });
+
+ if (msg == null) msg = '???';
+
+ Object.defineProperty(this, 'message', {
+ enumerable: false,
+ writable: true,
+ value: msg
+ });
+
+ this.hash = hash;
+
+ var stacktrace;
+ if (hash && hash.exception instanceof Error) {
+ var ex2 = hash.exception;
+ this.message = ex2.message || msg;
+ stacktrace = ex2.stack;
+ }
+ if (!stacktrace) {
+ if (Error.hasOwnProperty('captureStackTrace')) { // V8/Chrome engine
+ Error.captureStackTrace(this, this.constructor);
+ } else {
+ stacktrace = (new Error(msg)).stack;
+ }
+ }
+ if (stacktrace) {
+ Object.defineProperty(this, 'stack', {
+ enumerable: false,
+ writable: false,
+ value: stacktrace
+ });
+ }
+}
+
+if (typeof Object.setPrototypeOf === 'function') {
+ Object.setPrototypeOf(JisonParserError.prototype, Error.prototype);
+} else {
+ JisonParserError.prototype = Object.create(Error.prototype);
+}
+JisonParserError.prototype.constructor = JisonParserError;
+JisonParserError.prototype.name = 'JisonParserError';
+
+
+
+
+ // helper: reconstruct the productions[] table
+ function bp(s) {
+ var rv = [];
+ var p = s.pop;
+ var r = s.rule;
+ for (var i = 0, l = p.length; i < l; i++) {
+ rv.push([
+ p[i],
+ r[i]
+ ]);
+ }
+ return rv;
+ }
+
+
+
+ // helper: reconstruct the defaultActions[] table
+ function bda(s) {
+ var rv = {};
+ var d = s.idx;
+ var g = s.goto;
+ for (var i = 0, l = d.length; i < l; i++) {
+ var j = d[i];
+ rv[j] = g[i];
+ }
+ return rv;
+ }
+
+
+
+ // helper: reconstruct the 'goto' table
+ function bt(s) {
+ var rv = [];
+ var d = s.len;
+ var y = s.symbol;
+ var t = s.type;
+ var a = s.state;
+ var m = s.mode;
+ var g = s.goto;
+ for (var i = 0, l = d.length; i < l; i++) {
+ var n = d[i];
+ var q = {};
+ for (var j = 0; j < n; j++) {
+ var z = y.shift();
+ switch (t.shift()) {
+ case 2:
+ q[z] = [
+ m.shift(),
+ g.shift()
+ ];
+ break;
+
+ case 0:
+ q[z] = a.shift();
+ break;
+
+ default:
+ // type === 1: accept
+ q[z] = [
+ 3
+ ];
+ }
+ }
+ rv.push(q);
+ }
+ return rv;
+ }
+
+
+
+ // helper: runlength encoding with increment step: code, length: step (default step = 0)
+ // `this` references an array
+ function s(c, l, a) {
+ a = a || 0;
+ for (var i = 0; i < l; i++) {
+ this.push(c);
+ c += a;
+ }
+ }
+
+ // helper: duplicate sequence from *relative* offset and length.
+ // `this` references an array
+ function c(i, l) {
+ i = this.length - i;
+ for (l += i; i < l; i++) {
+ this.push(this[i]);
+ }
+ }
+
+ // helper: unpack an array using helpers and data, all passed in an array argument 'a'.
+ function u(a) {
+ var rv = [];
+ for (var i = 0, l = a.length; i < l; i++) {
+ var e = a[i];
+ // Is this entry a helper function?
+ if (typeof e === 'function') {
+ i++;
+ e.apply(rv, a[i]);
+ } else {
+ rv.push(e);
+ }
+ }
+ return rv;
+ }
+
+
+var parser = {
+ // Code Generator Information Report
+ // ---------------------------------
+ //
+ // Options:
+ //
+ // default action mode: ............. ["classic","merge"]
+ // test-compile action mode: ........ "parser:*,lexer:*"
+ // try..catch: ...................... true
+ // default resolve on conflict: ..... true
+ // on-demand look-ahead: ............ false
+ // error recovery token skip maximum: 3
+ // yyerror in parse actions is: ..... NOT recoverable,
+ // yyerror in lexer actions and other non-fatal lexer are:
+ // .................................. NOT recoverable,
+ // debug grammar/output: ............ false
+ // has partial LR conflict upgrade: true
+ // rudimentary token-stack support: false
+ // parser table compression mode: ... 2
+ // export debug tables: ............. false
+ // export *all* tables: ............. false
+ // module type: ..................... commonjs
+ // parser engine type: .............. lalr
+ // output main() in the module: ..... true
+ // has user-specified main(): ....... false
+ // has user-specified require()/import modules for main():
+ // .................................. false
+ // number of expected conflicts: .... 0
+ //
+ //
+ // Parser Analysis flags:
+ //
+ // no significant actions (parser is a language matcher only):
+ // .................................. false
+ // uses yyleng: ..................... false
+ // uses yylineno: ................... false
+ // uses yytext: ..................... false
+ // uses yylloc: ..................... false
+ // uses ParseError API: ............. false
+ // uses YYERROR: .................... false
+ // uses YYRECOVERING: ............... false
+ // uses YYERROK: .................... false
+ // uses YYCLEARIN: .................. false
+ // tracks rule values: .............. true
+ // assigns rule values: ............. true
+ // uses location tracking: .......... false
+ // assigns location: ................ false
+ // uses yystack: .................... false
+ // uses yysstack: ................... false
+ // uses yysp: ....................... true
+ // uses yyrulelength: ............... false
+ // uses yyMergeLocationInfo API: .... false
+ // has error recovery: .............. false
+ // has error reporting: ............. false
+ //
+ // --------- END OF REPORT -----------
+
+trace: function no_op_trace() { },
+JisonParserError: JisonParserError,
+yy: {},
+options: {
+ type: "lalr",
+ hasPartialLrUpgradeOnConflict: true,
+ errorRecoveryTokenDiscardCount: 3
+},
+symbols_: {
+ "$accept": 0,
+ "$end": 1,
+ "ADD": 3,
+ "ANGLE": 16,
+ "CHS": 22,
+ "COMMA": 14,
+ "CSS_CPROP": 13,
+ "CSS_VAR": 12,
+ "DIV": 6,
+ "EMS": 20,
+ "EOF": 1,
+ "EXS": 21,
+ "FREQ": 18,
+ "LENGTH": 15,
+ "LPAREN": 7,
+ "MUL": 5,
+ "NESTED_CALC": 9,
+ "NUMBER": 11,
+ "PERCENTAGE": 28,
+ "PREFIX": 10,
+ "REMS": 23,
+ "RES": 19,
+ "RPAREN": 8,
+ "SUB": 4,
+ "TIME": 17,
+ "VHS": 24,
+ "VMAXS": 27,
+ "VMINS": 26,
+ "VWS": 25,
+ "css_value": 33,
+ "css_variable": 32,
+ "error": 2,
+ "expression": 29,
+ "math_expression": 30,
+ "value": 31
+},
+terminals_: {
+ 1: "EOF",
+ 2: "error",
+ 3: "ADD",
+ 4: "SUB",
+ 5: "MUL",
+ 6: "DIV",
+ 7: "LPAREN",
+ 8: "RPAREN",
+ 9: "NESTED_CALC",
+ 10: "PREFIX",
+ 11: "NUMBER",
+ 12: "CSS_VAR",
+ 13: "CSS_CPROP",
+ 14: "COMMA",
+ 15: "LENGTH",
+ 16: "ANGLE",
+ 17: "TIME",
+ 18: "FREQ",
+ 19: "RES",
+ 20: "EMS",
+ 21: "EXS",
+ 22: "CHS",
+ 23: "REMS",
+ 24: "VHS",
+ 25: "VWS",
+ 26: "VMINS",
+ 27: "VMAXS",
+ 28: "PERCENTAGE"
+},
+TERROR: 2,
+ EOF: 1,
+
+ // internals: defined here so the object *structure* doesn't get modified by parse() et al,
+ // thus helping JIT compilers like Chrome V8.
+ originalQuoteName: null,
+ originalParseError: null,
+ cleanupAfterParse: null,
+ constructParseErrorInfo: null,
+ yyMergeLocationInfo: null,
+
+ __reentrant_call_depth: 0, // INTERNAL USE ONLY
+ __error_infos: [], // INTERNAL USE ONLY: the set of parseErrorInfo objects created since the last cleanup
+ __error_recovery_infos: [], // INTERNAL USE ONLY: the set of parseErrorInfo objects created since the last cleanup
+
+ // APIs which will be set up depending on user action code analysis:
+ //yyRecovering: 0,
+ //yyErrOk: 0,
+ //yyClearIn: 0,
+
+ // Helper APIs
+ // -----------
+
+ // Helper function which can be overridden by user code later on: put suitable quotes around
+ // literal IDs in a description string.
+ quoteName: function parser_quoteName(id_str) {
+ return '"' + id_str + '"';
+ },
+
+ // Return the name of the given symbol (terminal or non-terminal) as a string, when available.
+ //
+ // Return NULL when the symbol is unknown to the parser.
+ getSymbolName: function parser_getSymbolName(symbol) {
+ if (this.terminals_[symbol]) {
+ return this.terminals_[symbol];
+ }
+
+ // Otherwise... this might refer to a RULE token i.e. a non-terminal: see if we can dig that one up.
+ //
+ // An example of this may be where a rule's action code contains a call like this:
+ //
+ // parser.getSymbolName(#$)
+ //
+ // to obtain a human-readable name of the current grammar rule.
+ var s = this.symbols_;
+ for (var key in s) {
+ if (s[key] === symbol) {
+ return key;
+ }
+ }
+ return null;
+ },
+
+ // Return a more-or-less human-readable description of the given symbol, when available,
+ // or the symbol itself, serving as its own 'description' for lack of something better to serve up.
+ //
+ // Return NULL when the symbol is unknown to the parser.
+ describeSymbol: function parser_describeSymbol(symbol) {
+ if (symbol !== this.EOF && this.terminal_descriptions_ && this.terminal_descriptions_[symbol]) {
+ return this.terminal_descriptions_[symbol];
+ }
+ else if (symbol === this.EOF) {
+ return 'end of input';
+ }
+ var id = this.getSymbolName(symbol);
+ if (id) {
+ return this.quoteName(id);
+ }
+ return null;
+ },
+
+ // Produce a (more or less) human-readable list of expected tokens at the point of failure.
+ //
+ // The produced list may contain token or token set descriptions instead of the tokens
+ // themselves to help turning this output into something that easier to read by humans
+ // unless `do_not_describe` parameter is set, in which case a list of the raw, *numeric*,
+ // expected terminals and nonterminals is produced.
+ //
+ // The returned list (array) will not contain any duplicate entries.
+ collect_expected_token_set: function parser_collect_expected_token_set(state, do_not_describe) {
+ var TERROR = this.TERROR;
+ var tokenset = [];
+ var check = {};
+ // Has this (error?) state been outfitted with a custom expectations description text for human consumption?
+ // If so, use that one instead of the less palatable token set.
+ if (!do_not_describe && this.state_descriptions_ && this.state_descriptions_[state]) {
+ return [
+ this.state_descriptions_[state]
+ ];
+ }
+ for (var p in this.table[state]) {
+ p = +p;
+ if (p !== TERROR) {
+ var d = do_not_describe ? p : this.describeSymbol(p);
+ if (d && !check[d]) {
+ tokenset.push(d);
+ check[d] = true; // Mark this token description as already mentioned to prevent outputting duplicate entries.
+ }
+ }
+ }
+ return tokenset;
+ },
+productions_: bp({
+ pop: u([
+ 29,
+ s,
+ [30, 10],
+ 31,
+ 31,
+ 32,
+ 32,
+ s,
+ [33, 15]
+]),
+ rule: u([
+ 2,
+ s,
+ [3, 5],
+ 4,
+ 7,
+ s,
+ [1, 4],
+ 2,
+ 4,
+ 6,
+ s,
+ [1, 14],
+ 2
+])
+}),
+performAction: function parser__PerformAction(yystate /* action[1] */, yysp, yyvstack) {
+
+ /* this == yyval */
+
+ // the JS engine itself can go and remove these statements when `yy` turns out to be unused in any action code!
+ var yy = this.yy;
+ var yyparser = yy.parser;
+ var yylexer = yy.lexer;
+
+
+
+ switch (yystate) {
+case 0:
+ /*! Production:: $accept : expression $end */
+
+ // default action (generated by JISON mode classic/merge :: 1,VT,VA,-,-,-,-,-,-):
+ this.$ = yyvstack[yysp - 1];
+ // END of default action (generated by JISON mode classic/merge :: 1,VT,VA,-,-,-,-,-,-)
+ break;
+
+case 1:
+ /*! Production:: expression : math_expression EOF */
+
+ // default action (generated by JISON mode classic/merge :: 2,VT,VA,-,-,-,-,-,-):
+ this.$ = yyvstack[yysp - 1];
+ // END of default action (generated by JISON mode classic/merge :: 2,VT,VA,-,-,-,-,-,-)
+
+
+ return yyvstack[yysp - 1];
+ break;
+
+case 2:
+ /*! Production:: math_expression : math_expression ADD math_expression */
+case 3:
+ /*! Production:: math_expression : math_expression SUB math_expression */
+case 4:
+ /*! Production:: math_expression : math_expression MUL math_expression */
+case 5:
+ /*! Production:: math_expression : math_expression DIV math_expression */
+
+ this.$ = { type: 'MathExpression', operator: yyvstack[yysp - 1], left: yyvstack[yysp - 2], right: yyvstack[yysp] };
+ break;
+
+case 6:
+ /*! Production:: math_expression : LPAREN math_expression RPAREN */
+
+ this.$ = yyvstack[yysp - 1];
+ break;
+
+case 7:
+ /*! Production:: math_expression : NESTED_CALC LPAREN math_expression RPAREN */
+
+ this.$ = { type: 'Calc', value: yyvstack[yysp - 1] };
+ break;
+
+case 8:
+ /*! Production:: math_expression : SUB PREFIX SUB NESTED_CALC LPAREN math_expression RPAREN */
+
+ this.$ = { type: 'Calc', value: yyvstack[yysp - 1], prefix: yyvstack[yysp - 5] };
+ break;
+
+case 9:
+ /*! Production:: math_expression : css_variable */
+case 10:
+ /*! Production:: math_expression : css_value */
+case 11:
+ /*! Production:: math_expression : value */
+
+ this.$ = yyvstack[yysp];
+ break;
+
+case 12:
+ /*! Production:: value : NUMBER */
+
+ this.$ = { type: 'Value', value: parseFloat(yyvstack[yysp]) };
+ break;
+
+case 13:
+ /*! Production:: value : SUB NUMBER */
+
+ this.$ = { type: 'Value', value: parseFloat(yyvstack[yysp]) * -1 };
+ break;
+
+case 14:
+ /*! Production:: css_variable : CSS_VAR LPAREN CSS_CPROP RPAREN */
+
+ this.$ = { type: 'CssVariable', value: yyvstack[yysp - 1] };
+ break;
+
+case 15:
+ /*! Production:: css_variable : CSS_VAR LPAREN CSS_CPROP COMMA math_expression RPAREN */
+
+ this.$ = { type: 'CssVariable', value: yyvstack[yysp - 3], fallback: yyvstack[yysp - 1] };
+ break;
+
+case 16:
+ /*! Production:: css_value : LENGTH */
+
+ this.$ = { type: 'LengthValue', value: parseFloat(yyvstack[yysp]), unit: /[a-z]+/.exec(yyvstack[yysp])[0] };
+ break;
+
+case 17:
+ /*! Production:: css_value : ANGLE */
+
+ this.$ = { type: 'AngleValue', value: parseFloat(yyvstack[yysp]), unit: /[a-z]+/.exec(yyvstack[yysp])[0] };
+ break;
+
+case 18:
+ /*! Production:: css_value : TIME */
+
+ this.$ = { type: 'TimeValue', value: parseFloat(yyvstack[yysp]), unit: /[a-z]+/.exec(yyvstack[yysp])[0] };
+ break;
+
+case 19:
+ /*! Production:: css_value : FREQ */
+
+ this.$ = { type: 'FrequencyValue', value: parseFloat(yyvstack[yysp]), unit: /[a-z]+/.exec(yyvstack[yysp])[0] };
+ break;
+
+case 20:
+ /*! Production:: css_value : RES */
+
+ this.$ = { type: 'ResolutionValue', value: parseFloat(yyvstack[yysp]), unit: /[a-z]+/.exec(yyvstack[yysp])[0] };
+ break;
+
+case 21:
+ /*! Production:: css_value : EMS */
+
+ this.$ = { type: 'EmValue', value: parseFloat(yyvstack[yysp]), unit: 'em' };
+ break;
+
+case 22:
+ /*! Production:: css_value : EXS */
+
+ this.$ = { type: 'ExValue', value: parseFloat(yyvstack[yysp]), unit: 'ex' };
+ break;
+
+case 23:
+ /*! Production:: css_value : CHS */
+
+ this.$ = { type: 'ChValue', value: parseFloat(yyvstack[yysp]), unit: 'ch' };
+ break;
+
+case 24:
+ /*! Production:: css_value : REMS */
+
+ this.$ = { type: 'RemValue', value: parseFloat(yyvstack[yysp]), unit: 'rem' };
+ break;
+
+case 25:
+ /*! Production:: css_value : VHS */
+
+ this.$ = { type: 'VhValue', value: parseFloat(yyvstack[yysp]), unit: 'vh' };
+ break;
+
+case 26:
+ /*! Production:: css_value : VWS */
+
+ this.$ = { type: 'VwValue', value: parseFloat(yyvstack[yysp]), unit: 'vw' };
+ break;
+
+case 27:
+ /*! Production:: css_value : VMINS */
+
+ this.$ = { type: 'VminValue', value: parseFloat(yyvstack[yysp]), unit: 'vmin' };
+ break;
+
+case 28:
+ /*! Production:: css_value : VMAXS */
+
+ this.$ = { type: 'VmaxValue', value: parseFloat(yyvstack[yysp]), unit: 'vmax' };
+ break;
+
+case 29:
+ /*! Production:: css_value : PERCENTAGE */
+
+ this.$ = { type: 'PercentageValue', value: parseFloat(yyvstack[yysp]), unit: '%' };
+ break;
+
+case 30:
+ /*! Production:: css_value : SUB css_value */
+
+ var prev = yyvstack[yysp]; prev.value *= -1; this.$ = prev;
+ break;
+
+}
+},
+table: bt({
+ len: u([
+ 24,
+ 1,
+ 5,
+ 23,
+ 1,
+ 18,
+ s,
+ [0, 3],
+ 1,
+ s,
+ [0, 16],
+ s,
+ [23, 4],
+ c,
+ [28, 3],
+ 0,
+ 0,
+ 16,
+ 1,
+ 6,
+ 6,
+ s,
+ [0, 3],
+ 5,
+ 1,
+ 2,
+ c,
+ [37, 3],
+ c,
+ [20, 3],
+ 5,
+ 0,
+ 0
+]),
+ symbol: u([
+ 4,
+ 7,
+ 9,
+ 11,
+ 12,
+ s,
+ [15, 19, 1],
+ 1,
+ 1,
+ s,
+ [3, 4, 1],
+ c,
+ [30, 19],
+ c,
+ [29, 4],
+ 7,
+ 4,
+ 10,
+ 11,
+ c,
+ [22, 14],
+ c,
+ [19, 3],
+ c,
+ [43, 22],
+ c,
+ [23, 69],
+ c,
+ [139, 4],
+ 8,
+ c,
+ [51, 24],
+ 4,
+ c,
+ [138, 15],
+ 13,
+ c,
+ [186, 5],
+ 8,
+ c,
+ [6, 6],
+ c,
+ [5, 5],
+ 9,
+ 8,
+ 14,
+ c,
+ [159, 47],
+ c,
+ [60, 10]
+]),
+ type: u([
+ s,
+ [2, 19],
+ s,
+ [0, 5],
+ 1,
+ s,
+ [2, 24],
+ s,
+ [0, 4],
+ c,
+ [22, 19],
+ c,
+ [43, 42],
+ c,
+ [23, 70],
+ c,
+ [28, 25],
+ c,
+ [45, 25],
+ c,
+ [113, 54]
+]),
+ state: u([
+ 1,
+ 2,
+ 8,
+ 6,
+ 7,
+ 30,
+ c,
+ [4, 3],
+ 33,
+ 37,
+ c,
+ [5, 3],
+ 38,
+ c,
+ [4, 3],
+ 39,
+ c,
+ [4, 3],
+ 40,
+ c,
+ [4, 3],
+ 42,
+ c,
+ [21, 4],
+ 50,
+ c,
+ [5, 3],
+ 51,
+ c,
+ [4, 3]
+]),
+ mode: u([
+ s,
+ [1, 179],
+ s,
+ [2, 3],
+ c,
+ [5, 5],
+ c,
+ [6, 4],
+ s,
+ [1, 57]
+]),
+ goto: u([
+ 5,
+ 3,
+ 4,
+ 24,
+ s,
+ [9, 15, 1],
+ s,
+ [25, 5, 1],
+ c,
+ [24, 19],
+ 31,
+ 35,
+ 32,
+ 34,
+ c,
+ [18, 14],
+ 36,
+ c,
+ [38, 19],
+ c,
+ [19, 57],
+ c,
+ [118, 4],
+ 41,
+ c,
+ [24, 19],
+ 43,
+ 35,
+ c,
+ [16, 14],
+ 44,
+ s,
+ [2, 3],
+ 28,
+ 29,
+ 2,
+ s,
+ [3, 3],
+ 28,
+ 29,
+ 3,
+ c,
+ [53, 4],
+ s,
+ [45, 5, 1],
+ c,
+ [100, 42],
+ 52,
+ c,
+ [5, 4],
+ 53
+])
+}),
+defaultActions: bda({
+ idx: u([
+ 6,
+ 7,
+ 8,
+ s,
+ [10, 16, 1],
+ 33,
+ 34,
+ 39,
+ 40,
+ 41,
+ 45,
+ 47,
+ 52,
+ 53
+]),
+ goto: u([
+ 9,
+ 10,
+ 11,
+ s,
+ [16, 14, 1],
+ 12,
+ 1,
+ 30,
+ 13,
+ s,
+ [4, 4, 1],
+ 14,
+ 15,
+ 8
+])
+}),
+parseError: function parseError(str, hash, ExceptionClass) {
+ if (hash.recoverable) {
+ if (typeof this.trace === 'function') {
+ this.trace(str);
+ }
+ hash.destroy(); // destroy... well, *almost*!
+ } else {
+ if (typeof this.trace === 'function') {
+ this.trace(str);
+ }
+ if (!ExceptionClass) {
+ ExceptionClass = this.JisonParserError;
+ }
+ throw new ExceptionClass(str, hash);
+ }
+},
+parse: function parse(input) {
+ var self = this;
+ var stack = new Array(128); // token stack: stores token which leads to state at the same index (column storage)
+ var sstack = new Array(128); // state stack: stores states (column storage)
+
+ var vstack = new Array(128); // semantic value stack
+
+ var table = this.table;
+ var sp = 0; // 'stack pointer': index into the stacks
+
+
+
+
+
+ var symbol = 0;
+
+
+
+ var TERROR = this.TERROR;
+ var EOF = this.EOF;
+ var ERROR_RECOVERY_TOKEN_DISCARD_COUNT = (this.options.errorRecoveryTokenDiscardCount | 0) || 3;
+ var NO_ACTION = [0, 54 /* === table.length :: ensures that anyone using this new state will fail dramatically! */];
+
+ var lexer;
+ if (this.__lexer__) {
+ lexer = this.__lexer__;
+ } else {
+ lexer = this.__lexer__ = Object.create(this.lexer);
+ }
+
+ var sharedState_yy = {
+ parseError: undefined,
+ quoteName: undefined,
+ lexer: undefined,
+ parser: undefined,
+ pre_parse: undefined,
+ post_parse: undefined,
+ pre_lex: undefined,
+ post_lex: undefined // WARNING: must be written this way for the code expanders to work correctly in both ES5 and ES6 modes!
+ };
+
+ var ASSERT;
+ if (typeof assert !== 'function') {
+ ASSERT = function JisonAssert(cond, msg) {
+ if (!cond) {
+ throw new Error('assertion failed: ' + (msg || '***'));
+ }
+ };
+ } else {
+ ASSERT = assert;
+ }
+
+ this.yyGetSharedState = function yyGetSharedState() {
+ return sharedState_yy;
+ };
+
+
+
+
+
+
+
+
+ function shallow_copy_noclobber(dst, src) {
+ for (var k in src) {
+ if (typeof dst[k] === 'undefined' && Object.prototype.hasOwnProperty.call(src, k)) {
+ dst[k] = src[k];
+ }
+ }
+ }
+
+ // copy state
+ shallow_copy_noclobber(sharedState_yy, this.yy);
+
+ sharedState_yy.lexer = lexer;
+ sharedState_yy.parser = this;
+
+
+
+
+
+
+ // Does the shared state override the default `parseError` that already comes with this instance?
+ if (typeof sharedState_yy.parseError === 'function') {
+ this.parseError = function parseErrorAlt(str, hash, ExceptionClass) {
+ if (!ExceptionClass) {
+ ExceptionClass = this.JisonParserError;
+ }
+ return sharedState_yy.parseError.call(this, str, hash, ExceptionClass);
+ };
+ } else {
+ this.parseError = this.originalParseError;
+ }
+
+ // Does the shared state override the default `quoteName` that already comes with this instance?
+ if (typeof sharedState_yy.quoteName === 'function') {
+ this.quoteName = function quoteNameAlt(id_str) {
+ return sharedState_yy.quoteName.call(this, id_str);
+ };
+ } else {
+ this.quoteName = this.originalQuoteName;
+ }
+
+ // set up the cleanup function; make it an API so that external code can re-use this one in case of
+ // calamities or when the `%options no-try-catch` option has been specified for the grammar, in which
+ // case this parse() API method doesn't come with a `finally { ... }` block any more!
+ //
+ // NOTE: as this API uses parse() as a closure, it MUST be set again on every parse() invocation,
+ // or else your `sharedState`, etc. references will be *wrong*!
+ this.cleanupAfterParse = function parser_cleanupAfterParse(resultValue, invoke_post_methods, do_not_nuke_errorinfos) {
+ var rv;
+
+ if (invoke_post_methods) {
+ var hash;
+
+ if (sharedState_yy.post_parse || this.post_parse) {
+ // create an error hash info instance: we re-use this API in a **non-error situation**
+ // as this one delivers all parser internals ready for access by userland code.
+ hash = this.constructParseErrorInfo(null /* no error! */, null /* no exception! */, null, false);
+ }
+
+ if (sharedState_yy.post_parse) {
+ rv = sharedState_yy.post_parse.call(this, sharedState_yy, resultValue, hash);
+ if (typeof rv !== 'undefined') resultValue = rv;
+ }
+ if (this.post_parse) {
+ rv = this.post_parse.call(this, sharedState_yy, resultValue, hash);
+ if (typeof rv !== 'undefined') resultValue = rv;
+ }
+
+ // cleanup:
+ if (hash && hash.destroy) {
+ hash.destroy();
+ }
+ }
+
+ if (this.__reentrant_call_depth > 1) return resultValue; // do not (yet) kill the sharedState when this is a reentrant run.
+
+ // clean up the lingering lexer structures as well:
+ if (lexer.cleanupAfterLex) {
+ lexer.cleanupAfterLex(do_not_nuke_errorinfos);
+ }
+
+ // prevent lingering circular references from causing memory leaks:
+ if (sharedState_yy) {
+ sharedState_yy.lexer = undefined;
+ sharedState_yy.parser = undefined;
+ if (lexer.yy === sharedState_yy) {
+ lexer.yy = undefined;
+ }
+ }
+ sharedState_yy = undefined;
+ this.parseError = this.originalParseError;
+ this.quoteName = this.originalQuoteName;
+
+ // nuke the vstack[] array at least as that one will still reference obsoleted user values.
+ // To be safe, we nuke the other internal stack columns as well...
+ stack.length = 0; // fastest way to nuke an array without overly bothering the GC
+ sstack.length = 0;
+
+ vstack.length = 0;
+ sp = 0;
+
+ // nuke the error hash info instances created during this run.
+ // Userland code must COPY any data/references
+ // in the error hash instance(s) it is more permanently interested in.
+ if (!do_not_nuke_errorinfos) {
+ for (var i = this.__error_infos.length - 1; i >= 0; i--) {
+ var el = this.__error_infos[i];
+ if (el && typeof el.destroy === 'function') {
+ el.destroy();
+ }
+ }
+ this.__error_infos.length = 0;
+
+
+ }
+
+ return resultValue;
+ };
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ // NOTE: as this API uses parse() as a closure, it MUST be set again on every parse() invocation,
+ // or else your `lexer`, `sharedState`, etc. references will be *wrong*!
+ this.constructParseErrorInfo = function parser_constructParseErrorInfo(msg, ex, expected, recoverable) {
+ var pei = {
+ errStr: msg,
+ exception: ex,
+ text: lexer.match,
+ value: lexer.yytext,
+ token: this.describeSymbol(symbol) || symbol,
+ token_id: symbol,
+ line: lexer.yylineno,
+
+ expected: expected,
+ recoverable: recoverable,
+ state: state,
+ action: action,
+ new_state: newState,
+ symbol_stack: stack,
+ state_stack: sstack,
+ value_stack: vstack,
+
+ stack_pointer: sp,
+ yy: sharedState_yy,
+ lexer: lexer,
+ parser: this,
+
+ // and make sure the error info doesn't stay due to potential
+ // ref cycle via userland code manipulations.
+ // These would otherwise all be memory leak opportunities!
+ //
+ // Note that only array and object references are nuked as those
+ // constitute the set of elements which can produce a cyclic ref.
+ // The rest of the members is kept intact as they are harmless.
+ destroy: function destructParseErrorInfo() {
+ // remove cyclic references added to error info:
+ // info.yy = null;
+ // info.lexer = null;
+ // info.value = null;
+ // info.value_stack = null;
+ // ...
+ var rec = !!this.recoverable;
+ for (var key in this) {
+ if (this.hasOwnProperty(key) && typeof key === 'object') {
+ this[key] = undefined;
+ }
+ }
+ this.recoverable = rec;
+ }
+ };
+ // track this instance so we can `destroy()` it once we deem it superfluous and ready for garbage collection!
+ this.__error_infos.push(pei);
+ return pei;
+ };
+
+
+
+
+
+
+
+
+
+
+
+
+
+ function getNonTerminalFromCode(symbol) {
+ var tokenName = self.getSymbolName(symbol);
+ if (!tokenName) {
+ tokenName = symbol;
+ }
+ return tokenName;
+ }
+
+
+ function stdLex() {
+ var token = lexer.lex();
+ // if token isn't its numeric value, convert
+ if (typeof token !== 'number') {
+ token = self.symbols_[token] || token;
+ }
+
+ return token || EOF;
+ }
+
+ function fastLex() {
+ var token = lexer.fastLex();
+ // if token isn't its numeric value, convert
+ if (typeof token !== 'number') {
+ token = self.symbols_[token] || token;
+ }
+
+ return token || EOF;
+ }
+
+ var lex = stdLex;
+
+
+ var state, action, r, t;
+ var yyval = {
+ $: true,
+ _$: undefined,
+ yy: sharedState_yy
+ };
+ var p;
+ var yyrulelen;
+ var this_production;
+ var newState;
+ var retval = false;
+
+
+ try {
+ this.__reentrant_call_depth++;
+
+ lexer.setInput(input, sharedState_yy);
+
+ // NOTE: we *assume* no lexer pre/post handlers are set up *after*
+ // this initial `setInput()` call: hence we can now check and decide
+ // whether we'll go with the standard, slower, lex() API or the
+ // `fast_lex()` one:
+ if (typeof lexer.canIUse === 'function') {
+ var lexerInfo = lexer.canIUse();
+ if (lexerInfo.fastLex && typeof fastLex === 'function') {
+ lex = fastLex;
+ }
+ }
+
+
+
+ vstack[sp] = null;
+ sstack[sp] = 0;
+ stack[sp] = 0;
+ ++sp;
+
+
+
+
+
+ if (this.pre_parse) {
+ this.pre_parse.call(this, sharedState_yy);
+ }
+ if (sharedState_yy.pre_parse) {
+ sharedState_yy.pre_parse.call(this, sharedState_yy);
+ }
+
+ newState = sstack[sp - 1];
+ for (;;) {
+ // retrieve state number from top of stack
+ state = newState; // sstack[sp - 1];
+
+ // use default actions if available
+ if (this.defaultActions[state]) {
+ action = 2;
+ newState = this.defaultActions[state];
+ } else {
+ // The single `==` condition below covers both these `===` comparisons in a single
+ // operation:
+ //
+ // if (symbol === null || typeof symbol === 'undefined') ...
+ if (!symbol) {
+ symbol = lex();
+ }
+ // read action for current state and first input
+ t = (table[state] && table[state][symbol]) || NO_ACTION;
+ newState = t[1];
+ action = t[0];
+
+
+
+
+
+
+
+
+
+
+
+ // handle parse error
+ if (!action) {
+ var errStr;
+ var errSymbolDescr = (this.describeSymbol(symbol) || symbol);
+ var expected = this.collect_expected_token_set(state);
+
+ // Report error
+ if (typeof lexer.yylineno === 'number') {
+ errStr = 'Parse error on line ' + (lexer.yylineno + 1) + ': ';
+ } else {
+ errStr = 'Parse error: ';
+ }
+ if (typeof lexer.showPosition === 'function') {
+ errStr += '\n' + lexer.showPosition(79 - 10, 10) + '\n';
+ }
+ if (expected.length) {
+ errStr += 'Expecting ' + expected.join(', ') + ', got unexpected ' + errSymbolDescr;
+ } else {
+ errStr += 'Unexpected ' + errSymbolDescr;
+ }
+ // we cannot recover from the error!
+ p = this.constructParseErrorInfo(errStr, null, expected, false);
+ r = this.parseError(p.errStr, p, this.JisonParserError);
+ if (typeof r !== 'undefined') {
+ retval = r;
+ }
+ break;
+ }
+
+
+ }
+
+
+
+
+
+
+
+
+
+
+ switch (action) {
+ // catch misc. parse failures:
+ default:
+ // this shouldn't happen, unless resolve defaults are off
+ if (action instanceof Array) {
+ p = this.constructParseErrorInfo('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol, null, null, false);
+ r = this.parseError(p.errStr, p, this.JisonParserError);
+ if (typeof r !== 'undefined') {
+ retval = r;
+ }
+ break;
+ }
+ // Another case of better safe than sorry: in case state transitions come out of another error recovery process
+ // or a buggy LUT (LookUp Table):
+ p = this.constructParseErrorInfo('Parsing halted. No viable error recovery approach available due to internal system failure.', null, null, false);
+ r = this.parseError(p.errStr, p, this.JisonParserError);
+ if (typeof r !== 'undefined') {
+ retval = r;
+ }
+ break;
+
+ // shift:
+ case 1:
+ stack[sp] = symbol;
+ vstack[sp] = lexer.yytext;
+
+ sstack[sp] = newState; // push state
+
+ ++sp;
+ symbol = 0;
+
+
+
+
+ // Pick up the lexer details for the current symbol as that one is not 'look-ahead' any more:
+
+
+
+
+ continue;
+
+ // reduce:
+ case 2:
+
+
+
+ this_production = this.productions_[newState - 1]; // `this.productions_[]` is zero-based indexed while states start from 1 upwards...
+ yyrulelen = this_production[1];
+
+
+
+
+
+
+
+
+
+
+ r = this.performAction.call(yyval, newState, sp - 1, vstack);
+
+ if (typeof r !== 'undefined') {
+ retval = r;
+ break;
+ }
+
+ // pop off stack
+ sp -= yyrulelen;
+
+ // don't overwrite the `symbol` variable: use a local var to speed things up:
+ var ntsymbol = this_production[0]; // push nonterminal (reduce)
+ stack[sp] = ntsymbol;
+ vstack[sp] = yyval.$;
+
+ // goto new state = table[STATE][NONTERMINAL]
+ newState = table[sstack[sp - 1]][ntsymbol];
+ sstack[sp] = newState;
+ ++sp;
+
+
+
+
+
+
+
+
+
+ continue;
+
+ // accept:
+ case 3:
+ if (sp !== -2) {
+ retval = true;
+ // Return the `$accept` rule's `$$` result, if available.
+ //
+ // Also note that JISON always adds this top-most `$accept` rule (with implicit,
+ // default, action):
+ //
+ // $accept: <startSymbol> $end
+ // %{ $$ = $1; @$ = @1; %}
+ //
+ // which, combined with the parse kernel's `$accept` state behaviour coded below,
+ // will produce the `$$` value output of the <startSymbol> rule as the parse result,
+ // IFF that result is *not* `undefined`. (See also the parser kernel code.)
+ //
+ // In code:
+ //
+ // %{
+ // @$ = @1; // if location tracking support is included
+ // if (typeof $1 !== 'undefined')
+ // return $1;
+ // else
+ // return true; // the default parse result if the rule actions don't produce anything
+ // %}
+ sp--;
+ if (typeof vstack[sp] !== 'undefined') {
+ retval = vstack[sp];
+ }
+ }
+ break;
+ }
+
+ // break out of loop: we accept or fail with error
+ break;
+ }
+ } catch (ex) {
+ // report exceptions through the parseError callback too, but keep the exception intact
+ // if it is a known parser or lexer error which has been thrown by parseError() already:
+ if (ex instanceof this.JisonParserError) {
+ throw ex;
+ }
+ else if (lexer && typeof lexer.JisonLexerError === 'function' && ex instanceof lexer.JisonLexerError) {
+ throw ex;
+ }
+
+ p = this.constructParseErrorInfo('Parsing aborted due to exception.', ex, null, false);
+ retval = false;
+ r = this.parseError(p.errStr, p, this.JisonParserError);
+ if (typeof r !== 'undefined') {
+ retval = r;
+ }
+ } finally {
+ retval = this.cleanupAfterParse(retval, true, true);
+ this.__reentrant_call_depth--;
+ } // /finally
+
+ return retval;
+}
+};
+parser.originalParseError = parser.parseError;
+parser.originalQuoteName = parser.quoteName;
+/* lexer generated by jison-lex 0.6.1-215 */
+
+/*
+ * Returns a Lexer object of the following structure:
+ *
+ * Lexer: {
+ * yy: {} The so-called "shared state" or rather the *source* of it;
+ * the real "shared state" `yy` passed around to
+ * the rule actions, etc. is a direct reference!
+ *
+ * This "shared context" object was passed to the lexer by way of
+ * the `lexer.setInput(str, yy)` API before you may use it.
+ *
+ * This "shared context" object is passed to the lexer action code in `performAction()`
+ * so userland code in the lexer actions may communicate with the outside world
+ * and/or other lexer rules' actions in more or less complex ways.
+ *
+ * }
+ *
+ * Lexer.prototype: {
+ * EOF: 1,
+ * ERROR: 2,
+ *
+ * yy: The overall "shared context" object reference.
+ *
+ * JisonLexerError: function(msg, hash),
+ *
+ * performAction: function lexer__performAction(yy, yyrulenumber, YY_START),
+ *
+ * The function parameters and `this` have the following value/meaning:
+ * - `this` : reference to the `lexer` instance.
+ * `yy_` is an alias for `this` lexer instance reference used internally.
+ *
+ * - `yy` : a reference to the `yy` "shared state" object which was passed to the lexer
+ * by way of the `lexer.setInput(str, yy)` API before.
+ *
+ * Note:
+ * The extra arguments you specified in the `%parse-param` statement in your
+ * **parser** grammar definition file are passed to the lexer via this object
+ * reference as member variables.
+ *
+ * - `yyrulenumber` : index of the matched lexer rule (regex), used internally.
+ *
+ * - `YY_START`: the current lexer "start condition" state.
+ *
+ * parseError: function(str, hash, ExceptionClass),
+ *
+ * constructLexErrorInfo: function(error_message, is_recoverable),
+ * Helper function.
+ * Produces a new errorInfo 'hash object' which can be passed into `parseError()`.
+ * See it's use in this lexer kernel in many places; example usage:
+ *
+ * var infoObj = lexer.constructParseErrorInfo('fail!', true);
+ * var retVal = lexer.parseError(infoObj.errStr, infoObj, lexer.JisonLexerError);
+ *
+ * options: { ... lexer %options ... },
+ *
+ * lex: function(),
+ * Produce one token of lexed input, which was passed in earlier via the `lexer.setInput()` API.
+ * You MAY use the additional `args...` parameters as per `%parse-param` spec of the **lexer** grammar:
+ * these extra `args...` are added verbatim to the `yy` object reference as member variables.
+ *
+ * WARNING:
+ * Lexer's additional `args...` parameters (via lexer's `%parse-param`) MAY conflict with
+ * any attributes already added to `yy` by the **parser** or the jison run-time;
+ * when such a collision is detected an exception is thrown to prevent the generated run-time
+ * from silently accepting this confusing and potentially hazardous situation!
+ *
+ * cleanupAfterLex: function(do_not_nuke_errorinfos),
+ * Helper function.
+ *
+ * This helper API is invoked when the **parse process** has completed: it is the responsibility
+ * of the **parser** (or the calling userland code) to invoke this method once cleanup is desired.
+ *
+ * This helper may be invoked by user code to ensure the internal lexer gets properly garbage collected.
+ *
+ * setInput: function(input, [yy]),
+ *
+ *
+ * input: function(),
+ *
+ *
+ * unput: function(str),
+ *
+ *
+ * more: function(),
+ *
+ *
+ * reject: function(),
+ *
+ *
+ * less: function(n),
+ *
+ *
+ * pastInput: function(n),
+ *
+ *
+ * upcomingInput: function(n),
+ *
+ *
+ * showPosition: function(),
+ *
+ *
+ * test_match: function(regex_match_array, rule_index),
+ *
+ *
+ * next: function(),
+ *
+ *
+ * begin: function(condition),
+ *
+ *
+ * pushState: function(condition),
+ *
+ *
+ * popState: function(),
+ *
+ *
+ * topState: function(),
+ *
+ *
+ * _currentRules: function(),
+ *
+ *
+ * stateStackSize: function(),
+ *
+ *
+ * performAction: function(yy, yy_, yyrulenumber, YY_START),
+ *
+ *
+ * rules: [...],
+ *
+ *
+ * conditions: {associative list: name ==> set},
+ * }
+ *
+ *
+ * token location info (`yylloc`): {
+ * first_line: n,
+ * last_line: n,
+ * first_column: n,
+ * last_column: n,
+ * range: [start_number, end_number]
+ * (where the numbers are indexes into the input string, zero-based)
+ * }
+ *
+ * ---
+ *
+ * The `parseError` function receives a 'hash' object with these members for lexer errors:
+ *
+ * {
+ * text: (matched text)
+ * token: (the produced terminal token, if any)
+ * token_id: (the produced terminal token numeric ID, if any)
+ * line: (yylineno)
+ * loc: (yylloc)
+ * recoverable: (boolean: TRUE when the parser MAY have an error recovery rule
+ * available for this particular error)
+ * yy: (object: the current parser internal "shared state" `yy`
+ * as is also available in the rule actions; this can be used,
+ * for instance, for advanced error analysis and reporting)
+ * lexer: (reference to the current lexer instance used by the parser)
+ * }
+ *
+ * while `this` will reference the current lexer instance.
+ *
+ * When `parseError` is invoked by the lexer, the default implementation will
+ * attempt to invoke `yy.parser.parseError()`; when this callback is not provided
+ * it will try to invoke `yy.parseError()` instead. When that callback is also not
+ * provided, a `JisonLexerError` exception will be thrown containing the error
+ * message and `hash`, as constructed by the `constructLexErrorInfo()` API.
+ *
+ * Note that the lexer's `JisonLexerError` error class is passed via the
+ * `ExceptionClass` argument, which is invoked to construct the exception
+ * instance to be thrown, so technically `parseError` will throw the object
+ * produced by the `new ExceptionClass(str, hash)` JavaScript expression.
+ *
+ * ---
+ *
+ * You can specify lexer options by setting / modifying the `.options` object of your Lexer instance.
+ * These options are available:
+ *
+ * (Options are permanent.)
+ *
+ * yy: {
+ * parseError: function(str, hash, ExceptionClass)
+ * optional: overrides the default `parseError` function.
+ * }
+ *
+ * lexer.options: {
+ * pre_lex: function()
+ * optional: is invoked before the lexer is invoked to produce another token.
+ * `this` refers to the Lexer object.
+ * post_lex: function(token) { return token; }
+ * optional: is invoked when the lexer has produced a token `token`;
+ * this function can override the returned token value by returning another.
+ * When it does not return any (truthy) value, the lexer will return
+ * the original `token`.
+ * `this` refers to the Lexer object.
+ *
+ * WARNING: the next set of options are not meant to be changed. They echo the abilities of
+ * the lexer as per when it was compiled!
+ *
+ * ranges: boolean
+ * optional: `true` ==> token location info will include a .range[] member.
+ * flex: boolean
+ * optional: `true` ==> flex-like lexing behaviour where the rules are tested
+ * exhaustively to find the longest match.
+ * backtrack_lexer: boolean
+ * optional: `true` ==> lexer regexes are tested in order and for invoked;
+ * the lexer terminates the scan when a token is returned by the action code.
+ * xregexp: boolean
+ * optional: `true` ==> lexer rule regexes are "extended regex format" requiring the
+ * `XRegExp` library. When this %option has not been specified at compile time, all lexer
+ * rule regexes have been written as standard JavaScript RegExp expressions.
+ * }
+ */
+
+
+var lexer = function() {
+ /**
+ * See also:
+ * http://stackoverflow.com/questions/1382107/whats-a-good-way-to-extend-error-in-javascript/#35881508
+ * but we keep the prototype.constructor and prototype.name assignment lines too for compatibility
+ * with userland code which might access the derived class in a 'classic' way.
+ *
+ * @public
+ * @constructor
+ * @nocollapse
+ */
+ function JisonLexerError(msg, hash) {
+ Object.defineProperty(this, 'name', {
+ enumerable: false,
+ writable: false,
+ value: 'JisonLexerError'
+ });
+
+ if (msg == null)
+ msg = '???';
+
+ Object.defineProperty(this, 'message', {
+ enumerable: false,
+ writable: true,
+ value: msg
+ });
+
+ this.hash = hash;
+ var stacktrace;
+
+ if (hash && hash.exception instanceof Error) {
+ var ex2 = hash.exception;
+ this.message = ex2.message || msg;
+ stacktrace = ex2.stack;
+ }
+
+ if (!stacktrace) {
+ if (Error.hasOwnProperty('captureStackTrace')) {
+ // V8
+ Error.captureStackTrace(this, this.constructor);
+ } else {
+ stacktrace = new Error(msg).stack;
+ }
+ }
+
+ if (stacktrace) {
+ Object.defineProperty(this, 'stack', {
+ enumerable: false,
+ writable: false,
+ value: stacktrace
+ });
+ }
+ }
+
+ if (typeof Object.setPrototypeOf === 'function') {
+ Object.setPrototypeOf(JisonLexerError.prototype, Error.prototype);
+ } else {
+ JisonLexerError.prototype = Object.create(Error.prototype);
+ }
+
+ JisonLexerError.prototype.constructor = JisonLexerError;
+ JisonLexerError.prototype.name = 'JisonLexerError';
+
+ var lexer = {
+
+// Code Generator Information Report
+// ---------------------------------
+//
+// Options:
+//
+// backtracking: .................... false
+// location.ranges: ................. false
+// location line+column tracking: ... true
+//
+//
+// Forwarded Parser Analysis flags:
+//
+// uses yyleng: ..................... false
+// uses yylineno: ................... false
+// uses yytext: ..................... false
+// uses yylloc: ..................... false
+// uses lexer values: ............... true / true
+// location tracking: ............... false
+// location assignment: ............. false
+//
+//
+// Lexer Analysis flags:
+//
+// uses yyleng: ..................... ???
+// uses yylineno: ................... ???
+// uses yytext: ..................... ???
+// uses yylloc: ..................... ???
+// uses ParseError API: ............. ???
+// uses yyerror: .................... ???
+// uses location tracking & editing: ???
+// uses more() API: ................. ???
+// uses unput() API: ................ ???
+// uses reject() API: ............... ???
+// uses less() API: ................. ???
+// uses display APIs pastInput(), upcomingInput(), showPosition():
+// ............................. ???
+// uses describeYYLLOC() API: ....... ???
+//
+// --------- END OF REPORT -----------
+
+EOF: 1,
+ ERROR: 2,
+
+ // JisonLexerError: JisonLexerError, /// <-- injected by the code generator
+
+ // options: {}, /// <-- injected by the code generator
+
+ // yy: ..., /// <-- injected by setInput()
+
+ __currentRuleSet__: null, /// INTERNAL USE ONLY: internal rule set cache for the current lexer state
+
+ __error_infos: [], /// INTERNAL USE ONLY: the set of lexErrorInfo objects created since the last cleanup
+ __decompressed: false, /// INTERNAL USE ONLY: mark whether the lexer instance has been 'unfolded' completely and is now ready for use
+ done: false, /// INTERNAL USE ONLY
+ _backtrack: false, /// INTERNAL USE ONLY
+ _input: '', /// INTERNAL USE ONLY
+ _more: false, /// INTERNAL USE ONLY
+ _signaled_error_token: false, /// INTERNAL USE ONLY
+ conditionStack: [], /// INTERNAL USE ONLY; managed via `pushState()`, `popState()`, `topState()` and `stateStackSize()`
+ match: '', /// READ-ONLY EXTERNAL ACCESS - ADVANCED USE ONLY: tracks input which has been matched so far for the lexer token under construction. `match` is identical to `yytext` except that this one still contains the matched input string after `lexer.performAction()` has been invoked, where userland code MAY have changed/replaced the `yytext` value entirely!
+ matched: '', /// READ-ONLY EXTERNAL ACCESS - ADVANCED USE ONLY: tracks entire input which has been matched so far
+ matches: false, /// READ-ONLY EXTERNAL ACCESS - ADVANCED USE ONLY: tracks RE match result for last (successful) match attempt
+ yytext: '', /// ADVANCED USE ONLY: tracks input which has been matched so far for the lexer token under construction; this value is transferred to the parser as the 'token value' when the parser consumes the lexer token produced through a call to the `lex()` API.
+ offset: 0, /// READ-ONLY EXTERNAL ACCESS - ADVANCED USE ONLY: tracks the 'cursor position' in the input string, i.e. the number of characters matched so far
+ yyleng: 0, /// READ-ONLY EXTERNAL ACCESS - ADVANCED USE ONLY: length of matched input for the token under construction (`yytext`)
+ yylineno: 0, /// READ-ONLY EXTERNAL ACCESS - ADVANCED USE ONLY: 'line number' at which the token under construction is located
+ yylloc: null, /// READ-ONLY EXTERNAL ACCESS - ADVANCED USE ONLY: tracks location info (lines + columns) for the token under construction
+
+ /**
+ * INTERNAL USE: construct a suitable error info hash object instance for `parseError`.
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ constructLexErrorInfo: function lexer_constructLexErrorInfo(msg, recoverable, show_input_position) {
+ msg = '' + msg;
+
+ // heuristic to determine if the error message already contains a (partial) source code dump
+ // as produced by either `showPosition()` or `prettyPrintRange()`:
+ if (show_input_position == undefined) {
+ show_input_position = !(msg.indexOf('\n') > 0 && msg.indexOf('^') > 0);
+ }
+
+ if (this.yylloc && show_input_position) {
+ if (typeof this.prettyPrintRange === 'function') {
+ var pretty_src = this.prettyPrintRange(this.yylloc);
+
+ if (!/\n\s*$/.test(msg)) {
+ msg += '\n';
+ }
+
+ msg += '\n Erroneous area:\n' + this.prettyPrintRange(this.yylloc);
+ } else if (typeof this.showPosition === 'function') {
+ var pos_str = this.showPosition();
+
+ if (pos_str) {
+ if (msg.length && msg[msg.length - 1] !== '\n' && pos_str[0] !== '\n') {
+ msg += '\n' + pos_str;
+ } else {
+ msg += pos_str;
+ }
+ }
+ }
+ }
+
+ /** @constructor */
+ var pei = {
+ errStr: msg,
+ recoverable: !!recoverable,
+ text: this.match, // This one MAY be empty; userland code should use the `upcomingInput` API to obtain more text which follows the 'lexer cursor position'...
+ token: null,
+ line: this.yylineno,
+ loc: this.yylloc,
+ yy: this.yy,
+ lexer: this,
+
+ /**
+ * and make sure the error info doesn't stay due to potential
+ * ref cycle via userland code manipulations.
+ * These would otherwise all be memory leak opportunities!
+ *
+ * Note that only array and object references are nuked as those
+ * constitute the set of elements which can produce a cyclic ref.
+ * The rest of the members is kept intact as they are harmless.
+ *
+ * @public
+ * @this {LexErrorInfo}
+ */
+ destroy: function destructLexErrorInfo() {
+ // remove cyclic references added to error info:
+ // info.yy = null;
+ // info.lexer = null;
+ // ...
+ var rec = !!this.recoverable;
+
+ for (var key in this) {
+ if (this.hasOwnProperty(key) && typeof key === 'object') {
+ this[key] = undefined;
+ }
+ }
+
+ this.recoverable = rec;
+ }
+ };
+
+ // track this instance so we can `destroy()` it once we deem it superfluous and ready for garbage collection!
+ this.__error_infos.push(pei);
+
+ return pei;
+ },
+
+ /**
+ * handler which is invoked when a lexer error occurs.
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ parseError: function lexer_parseError(str, hash, ExceptionClass) {
+ if (!ExceptionClass) {
+ ExceptionClass = this.JisonLexerError;
+ }
+
+ if (this.yy) {
+ if (this.yy.parser && typeof this.yy.parser.parseError === 'function') {
+ return this.yy.parser.parseError.call(this, str, hash, ExceptionClass) || this.ERROR;
+ } else if (typeof this.yy.parseError === 'function') {
+ return this.yy.parseError.call(this, str, hash, ExceptionClass) || this.ERROR;
+ }
+ }
+
+ throw new ExceptionClass(str, hash);
+ },
+
+ /**
+ * method which implements `yyerror(str, ...args)` functionality for use inside lexer actions.
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ yyerror: function yyError(str /*, ...args */) {
+ var lineno_msg = '';
+
+ if (this.yylloc) {
+ lineno_msg = ' on line ' + (this.yylineno + 1);
+ }
+
+ var p = this.constructLexErrorInfo(
+ 'Lexical error' + lineno_msg + ': ' + str,
+ this.options.lexerErrorsAreRecoverable
+ );
+
+ // Add any extra args to the hash under the name `extra_error_attributes`:
+ var args = Array.prototype.slice.call(arguments, 1);
+
+ if (args.length) {
+ p.extra_error_attributes = args;
+ }
+
+ return this.parseError(p.errStr, p, this.JisonLexerError) || this.ERROR;
+ },
+
+ /**
+ * final cleanup function for when we have completed lexing the input;
+ * make it an API so that external code can use this one once userland
+ * code has decided it's time to destroy any lingering lexer error
+ * hash object instances and the like: this function helps to clean
+ * up these constructs, which *may* carry cyclic references which would
+ * otherwise prevent the instances from being properly and timely
+ * garbage-collected, i.e. this function helps prevent memory leaks!
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ cleanupAfterLex: function lexer_cleanupAfterLex(do_not_nuke_errorinfos) {
+ // prevent lingering circular references from causing memory leaks:
+ this.setInput('', {});
+
+ // nuke the error hash info instances created during this run.
+ // Userland code must COPY any data/references
+ // in the error hash instance(s) it is more permanently interested in.
+ if (!do_not_nuke_errorinfos) {
+ for (var i = this.__error_infos.length - 1; i >= 0; i--) {
+ var el = this.__error_infos[i];
+
+ if (el && typeof el.destroy === 'function') {
+ el.destroy();
+ }
+ }
+
+ this.__error_infos.length = 0;
+ }
+
+ return this;
+ },
+
+ /**
+ * clear the lexer token context; intended for internal use only
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ clear: function lexer_clear() {
+ this.yytext = '';
+ this.yyleng = 0;
+ this.match = '';
+
+ // - DO NOT reset `this.matched`
+ this.matches = false;
+
+ this._more = false;
+ this._backtrack = false;
+ var col = (this.yylloc ? this.yylloc.last_column : 0);
+
+ this.yylloc = {
+ first_line: this.yylineno + 1,
+ first_column: col,
+ last_line: this.yylineno + 1,
+ last_column: col,
+ range: [this.offset, this.offset]
+ };
+ },
+
+ /**
+ * resets the lexer, sets new input
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ setInput: function lexer_setInput(input, yy) {
+ this.yy = yy || this.yy || {};
+
+ // also check if we've fully initialized the lexer instance,
+ // including expansion work to be done to go from a loaded
+ // lexer to a usable lexer:
+ if (!this.__decompressed) {
+ // step 1: decompress the regex list:
+ var rules = this.rules;
+
+ for (var i = 0, len = rules.length; i < len; i++) {
+ var rule_re = rules[i];
+
+ // compression: is the RE an xref to another RE slot in the rules[] table?
+ if (typeof rule_re === 'number') {
+ rules[i] = rules[rule_re];
+ }
+ }
+
+ // step 2: unfold the conditions[] set to make these ready for use:
+ var conditions = this.conditions;
+
+ for (var k in conditions) {
+ var spec = conditions[k];
+ var rule_ids = spec.rules;
+ var len = rule_ids.length;
+ var rule_regexes = new Array(len + 1); // slot 0 is unused; we use a 1-based index approach here to keep the hottest code in `lexer_next()` fast and simple!
+ var rule_new_ids = new Array(len + 1);
+
+ for (var i = 0; i < len; i++) {
+ var idx = rule_ids[i];
+ var rule_re = rules[idx];
+ rule_regexes[i + 1] = rule_re;
+ rule_new_ids[i + 1] = idx;
+ }
+
+ spec.rules = rule_new_ids;
+ spec.__rule_regexes = rule_regexes;
+ spec.__rule_count = len;
+ }
+
+ this.__decompressed = true;
+ }
+
+ this._input = input || '';
+ this.clear();
+ this._signaled_error_token = false;
+ this.done = false;
+ this.yylineno = 0;
+ this.matched = '';
+ this.conditionStack = ['INITIAL'];
+ this.__currentRuleSet__ = null;
+
+ this.yylloc = {
+ first_line: 1,
+ first_column: 0,
+ last_line: 1,
+ last_column: 0,
+ range: [0, 0]
+ };
+
+ this.offset = 0;
+ return this;
+ },
+
+ /**
+ * edit the remaining input via user-specified callback.
+ * This can be used to forward-adjust the input-to-parse,
+ * e.g. inserting macro expansions and alike in the
+ * input which has yet to be lexed.
+ * The behaviour of this API contrasts the `unput()` et al
+ * APIs as those act on the *consumed* input, while this
+ * one allows one to manipulate the future, without impacting
+ * the current `yyloc` cursor location or any history.
+ *
+ * Use this API to help implement C-preprocessor-like
+ * `#include` statements, etc.
+ *
+ * The provided callback must be synchronous and is
+ * expected to return the edited input (string).
+ *
+ * The `cpsArg` argument value is passed to the callback
+ * as-is.
+ *
+ * `callback` interface:
+ * `function callback(input, cpsArg)`
+ *
+ * - `input` will carry the remaining-input-to-lex string
+ * from the lexer.
+ * - `cpsArg` is `cpsArg` passed into this API.
+ *
+ * The `this` reference for the callback will be set to
+ * reference this lexer instance so that userland code
+ * in the callback can easily and quickly access any lexer
+ * API.
+ *
+ * When the callback returns a non-string-type falsey value,
+ * we assume the callback did not edit the input and we
+ * will using the input as-is.
+ *
+ * When the callback returns a non-string-type value, it
+ * is converted to a string for lexing via the `"" + retval`
+ * operation. (See also why: http://2ality.com/2012/03/converting-to-string.html
+ * -- that way any returned object's `toValue()` and `toString()`
+ * methods will be invoked in a proper/desirable order.)
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ editRemainingInput: function lexer_editRemainingInput(callback, cpsArg) {
+ var rv = callback.call(this, this._input, cpsArg);
+
+ if (typeof rv !== 'string') {
+ if (rv) {
+ this._input = '' + rv;
+ }
+ // else: keep `this._input` as is.
+ } else {
+ this._input = rv;
+ }
+
+ return this;
+ },
+
+ /**
+ * consumes and returns one char from the input
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ input: function lexer_input() {
+ if (!this._input) {
+ //this.done = true; -- don't set `done` as we want the lex()/next() API to be able to produce one custom EOF token match after this anyhow. (lexer can match special <<EOF>> tokens and perform user action code for a <<EOF>> match, but only does so *once*)
+ return null;
+ }
+
+ var ch = this._input[0];
+ this.yytext += ch;
+ this.yyleng++;
+ this.offset++;
+ this.match += ch;
+ this.matched += ch;
+
+ // Count the linenumber up when we hit the LF (or a stand-alone CR).
+ // On CRLF, the linenumber is incremented when you fetch the CR or the CRLF combo
+ // and we advance immediately past the LF as well, returning both together as if
+ // it was all a single 'character' only.
+ var slice_len = 1;
+
+ var lines = false;
+
+ if (ch === '\n') {
+ lines = true;
+ } else if (ch === '\r') {
+ lines = true;
+ var ch2 = this._input[1];
+
+ if (ch2 === '\n') {
+ slice_len++;
+ ch += ch2;
+ this.yytext += ch2;
+ this.yyleng++;
+ this.offset++;
+ this.match += ch2;
+ this.matched += ch2;
+ this.yylloc.range[1]++;
+ }
+ }
+
+ if (lines) {
+ this.yylineno++;
+ this.yylloc.last_line++;
+ this.yylloc.last_column = 0;
+ } else {
+ this.yylloc.last_column++;
+ }
+
+ this.yylloc.range[1]++;
+ this._input = this._input.slice(slice_len);
+ return ch;
+ },
+
+ /**
+ * unshifts one char (or an entire string) into the input
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ unput: function lexer_unput(ch) {
+ var len = ch.length;
+ var lines = ch.split(/(?:\r\n?|\n)/g);
+ this._input = ch + this._input;
+ this.yytext = this.yytext.substr(0, this.yytext.length - len);
+ this.yyleng = this.yytext.length;
+ this.offset -= len;
+ this.match = this.match.substr(0, this.match.length - len);
+ this.matched = this.matched.substr(0, this.matched.length - len);
+
+ if (lines.length > 1) {
+ this.yylineno -= lines.length - 1;
+ this.yylloc.last_line = this.yylineno + 1;
+
+ // Get last entirely matched line into the `pre_lines[]` array's
+ // last index slot; we don't mind when other previously
+ // matched lines end up in the array too.
+ var pre = this.match;
+
+ var pre_lines = pre.split(/(?:\r\n?|\n)/g);
+
+ if (pre_lines.length === 1) {
+ pre = this.matched;
+ pre_lines = pre.split(/(?:\r\n?|\n)/g);
+ }
+
+ this.yylloc.last_column = pre_lines[pre_lines.length - 1].length;
+ } else {
+ this.yylloc.last_column -= len;
+ }
+
+ this.yylloc.range[1] = this.yylloc.range[0] + this.yyleng;
+ this.done = false;
+ return this;
+ },
+
+ /**
+ * cache matched text and append it on next action
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ more: function lexer_more() {
+ this._more = true;
+ return this;
+ },
+
+ /**
+ * signal the lexer that this rule fails to match the input, so the
+ * next matching rule (regex) should be tested instead.
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ reject: function lexer_reject() {
+ if (this.options.backtrack_lexer) {
+ this._backtrack = true;
+ } else {
+ // when the `parseError()` call returns, we MUST ensure that the error is registered.
+ // We accomplish this by signaling an 'error' token to be produced for the current
+ // `.lex()` run.
+ var lineno_msg = '';
+
+ if (this.yylloc) {
+ lineno_msg = ' on line ' + (this.yylineno + 1);
+ }
+
+ var p = this.constructLexErrorInfo(
+ 'Lexical error' + lineno_msg + ': You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).',
+ false
+ );
+
+ this._signaled_error_token = this.parseError(p.errStr, p, this.JisonLexerError) || this.ERROR;
+ }
+
+ return this;
+ },
+
+ /**
+ * retain first n characters of the match
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ less: function lexer_less(n) {
+ return this.unput(this.match.slice(n));
+ },
+
+ /**
+ * return (part of the) already matched input, i.e. for error
+ * messages.
+ *
+ * Limit the returned string length to `maxSize` (default: 20).
+ *
+ * Limit the returned string to the `maxLines` number of lines of
+ * input (default: 1).
+ *
+ * Negative limit values equal *unlimited*.
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ pastInput: function lexer_pastInput(maxSize, maxLines) {
+ var past = this.matched.substring(0, this.matched.length - this.match.length);
+
+ if (maxSize < 0)
+ maxSize = past.length;
+ else if (!maxSize)
+ maxSize = 20;
+
+ if (maxLines < 0)
+ maxLines = past.length; // can't ever have more input lines than this!
+ else if (!maxLines)
+ maxLines = 1;
+
+ // `substr` anticipation: treat \r\n as a single character and take a little
+ // more than necessary so that we can still properly check against maxSize
+ // after we've transformed and limited the newLines in here:
+ past = past.substr(-maxSize * 2 - 2);
+
+ // now that we have a significantly reduced string to process, transform the newlines
+ // and chop them, then limit them:
+ var a = past.replace(/\r\n|\r/g, '\n').split('\n');
+
+ a = a.slice(-maxLines);
+ past = a.join('\n');
+
+ // When, after limiting to maxLines, we still have too much to return,
+ // do add an ellipsis prefix...
+ if (past.length > maxSize) {
+ past = '...' + past.substr(-maxSize);
+ }
+
+ return past;
+ },
+
+ /**
+ * return (part of the) upcoming input, i.e. for error messages.
+ *
+ * Limit the returned string length to `maxSize` (default: 20).
+ *
+ * Limit the returned string to the `maxLines` number of lines of input (default: 1).
+ *
+ * Negative limit values equal *unlimited*.
+ *
+ * > ### NOTE ###
+ * >
+ * > *"upcoming input"* is defined as the whole of the both
+ * > the *currently lexed* input, together with any remaining input
+ * > following that. *"currently lexed"* input is the input
+ * > already recognized by the lexer but not yet returned with
+ * > the lexer token. This happens when you are invoking this API
+ * > from inside any lexer rule action code block.
+ * >
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ upcomingInput: function lexer_upcomingInput(maxSize, maxLines) {
+ var next = this.match;
+
+ if (maxSize < 0)
+ maxSize = next.length + this._input.length;
+ else if (!maxSize)
+ maxSize = 20;
+
+ if (maxLines < 0)
+ maxLines = maxSize; // can't ever have more input lines than this!
+ else if (!maxLines)
+ maxLines = 1;
+
+ // `substring` anticipation: treat \r\n as a single character and take a little
+ // more than necessary so that we can still properly check against maxSize
+ // after we've transformed and limited the newLines in here:
+ if (next.length < maxSize * 2 + 2) {
+ next += this._input.substring(0, maxSize * 2 + 2); // substring is faster on Chrome/V8
+ }
+
+ // now that we have a significantly reduced string to process, transform the newlines
+ // and chop them, then limit them:
+ var a = next.replace(/\r\n|\r/g, '\n').split('\n');
+
+ a = a.slice(0, maxLines);
+ next = a.join('\n');
+
+ // When, after limiting to maxLines, we still have too much to return,
+ // do add an ellipsis postfix...
+ if (next.length > maxSize) {
+ next = next.substring(0, maxSize) + '...';
+ }
+
+ return next;
+ },
+
+ /**
+ * return a string which displays the character position where the
+ * lexing error occurred, i.e. for error messages
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ showPosition: function lexer_showPosition(maxPrefix, maxPostfix) {
+ var pre = this.pastInput(maxPrefix).replace(/\s/g, ' ');
+ var c = new Array(pre.length + 1).join('-');
+ return pre + this.upcomingInput(maxPostfix).replace(/\s/g, ' ') + '\n' + c + '^';
+ },
+
+ /**
+ * return an YYLLOC info object derived off the given context (actual, preceding, following, current).
+ * Use this method when the given `actual` location is not guaranteed to exist (i.e. when
+ * it MAY be NULL) and you MUST have a valid location info object anyway:
+ * then we take the given context of the `preceding` and `following` locations, IFF those are available,
+ * and reconstruct the `actual` location info from those.
+ * If this fails, the heuristic is to take the `current` location, IFF available.
+ * If this fails as well, we assume the sought location is at/around the current lexer position
+ * and then produce that one as a response. DO NOTE that these heuristic/derived location info
+ * values MAY be inaccurate!
+ *
+ * NOTE: `deriveLocationInfo()` ALWAYS produces a location info object *copy* of `actual`, not just
+ * a *reference* hence all input location objects can be assumed to be 'constant' (function has no side-effects).
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ deriveLocationInfo: function lexer_deriveYYLLOC(actual, preceding, following, current) {
+ var loc = {
+ first_line: 1,
+ first_column: 0,
+ last_line: 1,
+ last_column: 0,
+ range: [0, 0]
+ };
+
+ if (actual) {
+ loc.first_line = actual.first_line | 0;
+ loc.last_line = actual.last_line | 0;
+ loc.first_column = actual.first_column | 0;
+ loc.last_column = actual.last_column | 0;
+
+ if (actual.range) {
+ loc.range[0] = actual.range[0] | 0;
+ loc.range[1] = actual.range[1] | 0;
+ }
+ }
+
+ if (loc.first_line <= 0 || loc.last_line < loc.first_line) {
+ // plan B: heuristic using preceding and following:
+ if (loc.first_line <= 0 && preceding) {
+ loc.first_line = preceding.last_line | 0;
+ loc.first_column = preceding.last_column | 0;
+
+ if (preceding.range) {
+ loc.range[0] = actual.range[1] | 0;
+ }
+ }
+
+ if ((loc.last_line <= 0 || loc.last_line < loc.first_line) && following) {
+ loc.last_line = following.first_line | 0;
+ loc.last_column = following.first_column | 0;
+
+ if (following.range) {
+ loc.range[1] = actual.range[0] | 0;
+ }
+ }
+
+ // plan C?: see if the 'current' location is useful/sane too:
+ if (loc.first_line <= 0 && current && (loc.last_line <= 0 || current.last_line <= loc.last_line)) {
+ loc.first_line = current.first_line | 0;
+ loc.first_column = current.first_column | 0;
+
+ if (current.range) {
+ loc.range[0] = current.range[0] | 0;
+ }
+ }
+
+ if (loc.last_line <= 0 && current && (loc.first_line <= 0 || current.first_line >= loc.first_line)) {
+ loc.last_line = current.last_line | 0;
+ loc.last_column = current.last_column | 0;
+
+ if (current.range) {
+ loc.range[1] = current.range[1] | 0;
+ }
+ }
+ }
+
+ // sanitize: fix last_line BEFORE we fix first_line as we use the 'raw' value of the latter
+ // or plan D heuristics to produce a 'sensible' last_line value:
+ if (loc.last_line <= 0) {
+ if (loc.first_line <= 0) {
+ loc.first_line = this.yylloc.first_line;
+ loc.last_line = this.yylloc.last_line;
+ loc.first_column = this.yylloc.first_column;
+ loc.last_column = this.yylloc.last_column;
+ loc.range[0] = this.yylloc.range[0];
+ loc.range[1] = this.yylloc.range[1];
+ } else {
+ loc.last_line = this.yylloc.last_line;
+ loc.last_column = this.yylloc.last_column;
+ loc.range[1] = this.yylloc.range[1];
+ }
+ }
+
+ if (loc.first_line <= 0) {
+ loc.first_line = loc.last_line;
+ loc.first_column = 0; // loc.last_column;
+ loc.range[1] = loc.range[0];
+ }
+
+ if (loc.first_column < 0) {
+ loc.first_column = 0;
+ }
+
+ if (loc.last_column < 0) {
+ loc.last_column = (loc.first_column > 0 ? loc.first_column : 80);
+ }
+
+ return loc;
+ },
+
+ /**
+ * return a string which displays the lines & columns of input which are referenced
+ * by the given location info range, plus a few lines of context.
+ *
+ * This function pretty-prints the indicated section of the input, with line numbers
+ * and everything!
+ *
+ * This function is very useful to provide highly readable error reports, while
+ * the location range may be specified in various flexible ways:
+ *
+ * - `loc` is the location info object which references the area which should be
+ * displayed and 'marked up': these lines & columns of text are marked up by `^`
+ * characters below each character in the entire input range.
+ *
+ * - `context_loc` is the *optional* location info object which instructs this
+ * pretty-printer how much *leading* context should be displayed alongside
+ * the area referenced by `loc`. This can help provide context for the displayed
+ * error, etc.
+ *
+ * When this location info is not provided, a default context of 3 lines is
+ * used.
+ *
+ * - `context_loc2` is another *optional* location info object, which serves
+ * a similar purpose to `context_loc`: it specifies the amount of *trailing*
+ * context lines to display in the pretty-print output.
+ *
+ * When this location info is not provided, a default context of 1 line only is
+ * used.
+ *
+ * Special Notes:
+ *
+ * - when the `loc`-indicated range is very large (about 5 lines or more), then
+ * only the first and last few lines of this block are printed while a
+ * `...continued...` message will be printed between them.
+ *
+ * This serves the purpose of not printing a huge amount of text when the `loc`
+ * range happens to be huge: this way a manageable & readable output results
+ * for arbitrary large ranges.
+ *
+ * - this function can display lines of input which whave not yet been lexed.
+ * `prettyPrintRange()` can access the entire input!
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ prettyPrintRange: function lexer_prettyPrintRange(loc, context_loc, context_loc2) {
+ loc = this.deriveLocationInfo(loc, context_loc, context_loc2);
+ const CONTEXT = 3;
+ const CONTEXT_TAIL = 1;
+ const MINIMUM_VISIBLE_NONEMPTY_LINE_COUNT = 2;
+ var input = this.matched + this._input;
+ var lines = input.split('\n');
+ var l0 = Math.max(1, (context_loc ? context_loc.first_line : loc.first_line - CONTEXT));
+ var l1 = Math.max(1, (context_loc2 ? context_loc2.last_line : loc.last_line + CONTEXT_TAIL));
+ var lineno_display_width = 1 + Math.log10(l1 | 1) | 0;
+ var ws_prefix = new Array(lineno_display_width).join(' ');
+ var nonempty_line_indexes = [];
+
+ var rv = lines.slice(l0 - 1, l1 + 1).map(function injectLineNumber(line, index) {
+ var lno = index + l0;
+ var lno_pfx = (ws_prefix + lno).substr(-lineno_display_width);
+ var rv = lno_pfx + ': ' + line;
+ var errpfx = new Array(lineno_display_width + 1).join('^');
+ var offset = 2 + 1;
+ var len = 0;
+
+ if (lno === loc.first_line) {
+ offset += loc.first_column;
+
+ len = Math.max(
+ 2,
+ ((lno === loc.last_line ? loc.last_column : line.length)) - loc.first_column + 1
+ );
+ } else if (lno === loc.last_line) {
+ len = Math.max(2, loc.last_column + 1);
+ } else if (lno > loc.first_line && lno < loc.last_line) {
+ len = Math.max(2, line.length + 1);
+ }
+
+ if (len) {
+ var lead = new Array(offset).join('.');
+ var mark = new Array(len).join('^');
+ rv += '\n' + errpfx + lead + mark;
+
+ if (line.trim().length > 0) {
+ nonempty_line_indexes.push(index);
+ }
+ }
+
+ rv = rv.replace(/\t/g, ' ');
+ return rv;
+ });
+
+ // now make sure we don't print an overly large amount of error area: limit it
+ // to the top and bottom line count:
+ if (nonempty_line_indexes.length > 2 * MINIMUM_VISIBLE_NONEMPTY_LINE_COUNT) {
+ var clip_start = nonempty_line_indexes[MINIMUM_VISIBLE_NONEMPTY_LINE_COUNT - 1] + 1;
+ var clip_end = nonempty_line_indexes[nonempty_line_indexes.length - MINIMUM_VISIBLE_NONEMPTY_LINE_COUNT] - 1;
+ var intermediate_line = new Array(lineno_display_width + 1).join(' ') + ' (...continued...)';
+ intermediate_line += '\n' + new Array(lineno_display_width + 1).join('-') + ' (---------------)';
+ rv.splice(clip_start, clip_end - clip_start + 1, intermediate_line);
+ }
+
+ return rv.join('\n');
+ },
+
+ /**
+ * helper function, used to produce a human readable description as a string, given
+ * the input `yylloc` location object.
+ *
+ * Set `display_range_too` to TRUE to include the string character index position(s)
+ * in the description if the `yylloc.range` is available.
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ describeYYLLOC: function lexer_describe_yylloc(yylloc, display_range_too) {
+ var l1 = yylloc.first_line;
+ var l2 = yylloc.last_line;
+ var c1 = yylloc.first_column;
+ var c2 = yylloc.last_column;
+ var dl = l2 - l1;
+ var dc = c2 - c1;
+ var rv;
+
+ if (dl === 0) {
+ rv = 'line ' + l1 + ', ';
+
+ if (dc <= 1) {
+ rv += 'column ' + c1;
+ } else {
+ rv += 'columns ' + c1 + ' .. ' + c2;
+ }
+ } else {
+ rv = 'lines ' + l1 + '(column ' + c1 + ') .. ' + l2 + '(column ' + c2 + ')';
+ }
+
+ if (yylloc.range && display_range_too) {
+ var r1 = yylloc.range[0];
+ var r2 = yylloc.range[1] - 1;
+
+ if (r2 <= r1) {
+ rv += ' {String Offset: ' + r1 + '}';
+ } else {
+ rv += ' {String Offset range: ' + r1 + ' .. ' + r2 + '}';
+ }
+ }
+
+ return rv;
+ },
+
+ /**
+ * test the lexed token: return FALSE when not a match, otherwise return token.
+ *
+ * `match` is supposed to be an array coming out of a regex match, i.e. `match[0]`
+ * contains the actually matched text string.
+ *
+ * Also move the input cursor forward and update the match collectors:
+ *
+ * - `yytext`
+ * - `yyleng`
+ * - `match`
+ * - `matches`
+ * - `yylloc`
+ * - `offset`
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ test_match: function lexer_test_match(match, indexed_rule) {
+ var token, lines, backup, match_str, match_str_len;
+
+ if (this.options.backtrack_lexer) {
+ // save context
+ backup = {
+ yylineno: this.yylineno,
+
+ yylloc: {
+ first_line: this.yylloc.first_line,
+ last_line: this.yylloc.last_line,
+ first_column: this.yylloc.first_column,
+ last_column: this.yylloc.last_column,
+ range: this.yylloc.range.slice(0)
+ },
+
+ yytext: this.yytext,
+ match: this.match,
+ matches: this.matches,
+ matched: this.matched,
+ yyleng: this.yyleng,
+ offset: this.offset,
+ _more: this._more,
+ _input: this._input,
+
+ //_signaled_error_token: this._signaled_error_token,
+ yy: this.yy,
+
+ conditionStack: this.conditionStack.slice(0),
+ done: this.done
+ };
+ }
+
+ match_str = match[0];
+ match_str_len = match_str.length;
+
+ // if (match_str.indexOf('\n') !== -1 || match_str.indexOf('\r') !== -1) {
+ lines = match_str.split(/(?:\r\n?|\n)/g);
+
+ if (lines.length > 1) {
+ this.yylineno += lines.length - 1;
+ this.yylloc.last_line = this.yylineno + 1;
+ this.yylloc.last_column = lines[lines.length - 1].length;
+ } else {
+ this.yylloc.last_column += match_str_len;
+ }
+
+ // }
+ this.yytext += match_str;
+
+ this.match += match_str;
+ this.matched += match_str;
+ this.matches = match;
+ this.yyleng = this.yytext.length;
+ this.yylloc.range[1] += match_str_len;
+
+ // previous lex rules MAY have invoked the `more()` API rather than producing a token:
+ // those rules will already have moved this `offset` forward matching their match lengths,
+ // hence we must only add our own match length now:
+ this.offset += match_str_len;
+
+ this._more = false;
+ this._backtrack = false;
+ this._input = this._input.slice(match_str_len);
+
+ // calling this method:
+ //
+ // function lexer__performAction(yy, yyrulenumber, YY_START) {...}
+ token = this.performAction.call(
+ this,
+ this.yy,
+ indexed_rule,
+ this.conditionStack[this.conditionStack.length - 1] /* = YY_START */
+ );
+
+ // otherwise, when the action codes are all simple return token statements:
+ //token = this.simpleCaseActionClusters[indexed_rule];
+
+ if (this.done && this._input) {
+ this.done = false;
+ }
+
+ if (token) {
+ return token;
+ } else if (this._backtrack) {
+ // recover context
+ for (var k in backup) {
+ this[k] = backup[k];
+ }
+
+ this.__currentRuleSet__ = null;
+ return false; // rule action called reject() implying the next rule should be tested instead.
+ } else if (this._signaled_error_token) {
+ // produce one 'error' token as `.parseError()` in `reject()`
+ // did not guarantee a failure signal by throwing an exception!
+ token = this._signaled_error_token;
+
+ this._signaled_error_token = false;
+ return token;
+ }
+
+ return false;
+ },
+
+ /**
+ * return next match in input
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ next: function lexer_next() {
+ if (this.done) {
+ this.clear();
+ return this.EOF;
+ }
+
+ if (!this._input) {
+ this.done = true;
+ }
+
+ var token, match, tempMatch, index;
+
+ if (!this._more) {
+ this.clear();
+ }
+
+ var spec = this.__currentRuleSet__;
+
+ if (!spec) {
+ // Update the ruleset cache as we apparently encountered a state change or just started lexing.
+ // The cache is set up for fast lookup -- we assume a lexer will switch states much less often than it will
+ // invoke the `lex()` token-producing API and related APIs, hence caching the set for direct access helps
+ // speed up those activities a tiny bit.
+ spec = this.__currentRuleSet__ = this._currentRules();
+
+ // Check whether a *sane* condition has been pushed before: this makes the lexer robust against
+ // user-programmer bugs such as https://github.com/zaach/jison-lex/issues/19
+ if (!spec || !spec.rules) {
+ var lineno_msg = '';
+
+ if (this.options.trackPosition) {
+ lineno_msg = ' on line ' + (this.yylineno + 1);
+ }
+
+ var p = this.constructLexErrorInfo(
+ 'Internal lexer engine error' + lineno_msg + ': The lex grammar programmer pushed a non-existing condition name "' + this.topState() + '"; this is a fatal error and should be reported to the application programmer team!',
+ false
+ );
+
+ // produce one 'error' token until this situation has been resolved, most probably by parse termination!
+ return this.parseError(p.errStr, p, this.JisonLexerError) || this.ERROR;
+ }
+ }
+
+ var rule_ids = spec.rules;
+ var regexes = spec.__rule_regexes;
+ var len = spec.__rule_count;
+
+ // Note: the arrays are 1-based, while `len` itself is a valid index,
+ // hence the non-standard less-or-equal check in the next loop condition!
+ for (var i = 1; i <= len; i++) {
+ tempMatch = this._input.match(regexes[i]);
+
+ if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
+ match = tempMatch;
+ index = i;
+
+ if (this.options.backtrack_lexer) {
+ token = this.test_match(tempMatch, rule_ids[i]);
+
+ if (token !== false) {
+ return token;
+ } else if (this._backtrack) {
+ match = undefined;
+ continue; // rule action called reject() implying a rule MISmatch.
+ } else {
+ // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)
+ return false;
+ }
+ } else if (!this.options.flex) {
+ break;
+ }
+ }
+ }
+
+ if (match) {
+ token = this.test_match(match, rule_ids[index]);
+
+ if (token !== false) {
+ return token;
+ }
+
+ // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)
+ return false;
+ }
+
+ if (!this._input) {
+ this.done = true;
+ this.clear();
+ return this.EOF;
+ } else {
+ var lineno_msg = '';
+
+ if (this.options.trackPosition) {
+ lineno_msg = ' on line ' + (this.yylineno + 1);
+ }
+
+ var p = this.constructLexErrorInfo(
+ 'Lexical error' + lineno_msg + ': Unrecognized text.',
+ this.options.lexerErrorsAreRecoverable
+ );
+
+ var pendingInput = this._input;
+ var activeCondition = this.topState();
+ var conditionStackDepth = this.conditionStack.length;
+ token = this.parseError(p.errStr, p, this.JisonLexerError) || this.ERROR;
+
+ if (token === this.ERROR) {
+ // we can try to recover from a lexer error that `parseError()` did not 'recover' for us
+ // by moving forward at least one character at a time IFF the (user-specified?) `parseError()`
+ // has not consumed/modified any pending input or changed state in the error handler:
+ if (!this.matches && // and make sure the input has been modified/consumed ...
+ pendingInput === this._input && // ...or the lexer state has been modified significantly enough
+ // to merit a non-consuming error handling action right now.
+ activeCondition === this.topState() && conditionStackDepth === this.conditionStack.length) {
+ this.input();
+ }
+ }
+
+ return token;
+ }
+ },
+
+ /**
+ * return next match that has a token
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ lex: function lexer_lex() {
+ var r;
+
+ // allow the PRE/POST handlers set/modify the return token for maximum flexibility of the generated lexer:
+ if (typeof this.pre_lex === 'function') {
+ r = this.pre_lex.call(this, 0);
+ }
+
+ if (typeof this.options.pre_lex === 'function') {
+ // (also account for a userdef function which does not return any value: keep the token as is)
+ r = this.options.pre_lex.call(this, r) || r;
+ }
+
+ if (this.yy && typeof this.yy.pre_lex === 'function') {
+ // (also account for a userdef function which does not return any value: keep the token as is)
+ r = this.yy.pre_lex.call(this, r) || r;
+ }
+
+ while (!r) {
+ r = this.next();
+ }
+
+ if (this.yy && typeof this.yy.post_lex === 'function') {
+ // (also account for a userdef function which does not return any value: keep the token as is)
+ r = this.yy.post_lex.call(this, r) || r;
+ }
+
+ if (typeof this.options.post_lex === 'function') {
+ // (also account for a userdef function which does not return any value: keep the token as is)
+ r = this.options.post_lex.call(this, r) || r;
+ }
+
+ if (typeof this.post_lex === 'function') {
+ // (also account for a userdef function which does not return any value: keep the token as is)
+ r = this.post_lex.call(this, r) || r;
+ }
+
+ return r;
+ },
+
+ /**
+ * return next match that has a token. Identical to the `lex()` API but does not invoke any of the
+ * `pre_lex()` nor any of the `post_lex()` callbacks.
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ fastLex: function lexer_fastLex() {
+ var r;
+
+ while (!r) {
+ r = this.next();
+ }
+
+ return r;
+ },
+
+ /**
+ * return info about the lexer state that can help a parser or other lexer API user to use the
+ * most efficient means available. This API is provided to aid run-time performance for larger
+ * systems which employ this lexer.
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ canIUse: function lexer_canIUse() {
+ var rv = {
+ fastLex: !(typeof this.pre_lex === 'function' || typeof this.options.pre_lex === 'function' || this.yy && typeof this.yy.pre_lex === 'function' || this.yy && typeof this.yy.post_lex === 'function' || typeof this.options.post_lex === 'function' || typeof this.post_lex === 'function') && typeof this.fastLex === 'function'
+ };
+
+ return rv;
+ },
+
+ /**
+ * backwards compatible alias for `pushState()`;
+ * the latter is symmetrical with `popState()` and we advise to use
+ * those APIs in any modern lexer code, rather than `begin()`.
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ begin: function lexer_begin(condition) {
+ return this.pushState(condition);
+ },
+
+ /**
+ * activates a new lexer condition state (pushes the new lexer
+ * condition state onto the condition stack)
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ pushState: function lexer_pushState(condition) {
+ this.conditionStack.push(condition);
+ this.__currentRuleSet__ = null;
+ return this;
+ },
+
+ /**
+ * pop the previously active lexer condition state off the condition
+ * stack
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ popState: function lexer_popState() {
+ var n = this.conditionStack.length - 1;
+
+ if (n > 0) {
+ this.__currentRuleSet__ = null;
+ return this.conditionStack.pop();
+ } else {
+ return this.conditionStack[0];
+ }
+ },
+
+ /**
+ * return the currently active lexer condition state; when an index
+ * argument is provided it produces the N-th previous condition state,
+ * if available
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ topState: function lexer_topState(n) {
+ n = this.conditionStack.length - 1 - Math.abs(n || 0);
+
+ if (n >= 0) {
+ return this.conditionStack[n];
+ } else {
+ return 'INITIAL';
+ }
+ },
+
+ /**
+ * (internal) determine the lexer rule set which is active for the
+ * currently active lexer condition state
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ _currentRules: function lexer__currentRules() {
+ if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
+ return this.conditions[this.conditionStack[this.conditionStack.length - 1]];
+ } else {
+ return this.conditions['INITIAL'];
+ }
+ },
+
+ /**
+ * return the number of states currently on the stack
+ *
+ * @public
+ * @this {RegExpLexer}
+ */
+ stateStackSize: function lexer_stateStackSize() {
+ return this.conditionStack.length;
+ },
+
+ options: {
+ trackPosition: true
+ },
+
+ JisonLexerError: JisonLexerError,
+
+ performAction: function lexer__performAction(yy, yyrulenumber, YY_START) {
+ var yy_ = this;
+ var YYSTATE = YY_START;
+
+ switch (yyrulenumber) {
+ case 1:
+ /*! Conditions:: INITIAL */
+ /*! Rule:: \s+ */
+ /* skip whitespace */
+ break;
+
+ default:
+ return this.simpleCaseActionClusters[yyrulenumber];
+ }
+ },
+
+ simpleCaseActionClusters: {
+ /*! Conditions:: INITIAL */
+ /*! Rule:: (--[0-9a-z-A-Z-]*) */
+ 0: 13,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: \* */
+ 2: 5,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: \/ */
+ 3: 6,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: \+ */
+ 4: 3,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: - */
+ 5: 4,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)px\b */
+ 6: 15,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)cm\b */
+ 7: 15,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)mm\b */
+ 8: 15,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)in\b */
+ 9: 15,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)pt\b */
+ 10: 15,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)pc\b */
+ 11: 15,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)deg\b */
+ 12: 16,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)grad\b */
+ 13: 16,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)rad\b */
+ 14: 16,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)turn\b */
+ 15: 16,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)s\b */
+ 16: 17,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)ms\b */
+ 17: 17,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)Hz\b */
+ 18: 18,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)kHz\b */
+ 19: 18,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)dpi\b */
+ 20: 19,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)dpcm\b */
+ 21: 19,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)dppx\b */
+ 22: 19,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)em\b */
+ 23: 20,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)ex\b */
+ 24: 21,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)ch\b */
+ 25: 22,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)rem\b */
+ 26: 23,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)vw\b */
+ 27: 25,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)vh\b */
+ 28: 24,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)vmin\b */
+ 29: 26,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)vmax\b */
+ 30: 27,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)% */
+ 31: 28,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([0-9]+(\.[0-9]*)?|\.[0-9]+)\b */
+ 32: 11,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: (calc) */
+ 33: 9,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: (var) */
+ 34: 12,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: ([a-z]+) */
+ 35: 10,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: \( */
+ 36: 7,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: \) */
+ 37: 8,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: , */
+ 38: 14,
+
+ /*! Conditions:: INITIAL */
+ /*! Rule:: $ */
+ 39: 1
+ },
+
+ rules: [
+ /* 0: */ /^(?:(--[\d\-A-Za-z]*))/,
+ /* 1: */ /^(?:\s+)/,
+ /* 2: */ /^(?:\*)/,
+ /* 3: */ /^(?:\/)/,
+ /* 4: */ /^(?:\+)/,
+ /* 5: */ /^(?:-)/,
+ /* 6: */ /^(?:(\d+(\.\d*)?|\.\d+)px\b)/,
+ /* 7: */ /^(?:(\d+(\.\d*)?|\.\d+)cm\b)/,
+ /* 8: */ /^(?:(\d+(\.\d*)?|\.\d+)mm\b)/,
+ /* 9: */ /^(?:(\d+(\.\d*)?|\.\d+)in\b)/,
+ /* 10: */ /^(?:(\d+(\.\d*)?|\.\d+)pt\b)/,
+ /* 11: */ /^(?:(\d+(\.\d*)?|\.\d+)pc\b)/,
+ /* 12: */ /^(?:(\d+(\.\d*)?|\.\d+)deg\b)/,
+ /* 13: */ /^(?:(\d+(\.\d*)?|\.\d+)grad\b)/,
+ /* 14: */ /^(?:(\d+(\.\d*)?|\.\d+)rad\b)/,
+ /* 15: */ /^(?:(\d+(\.\d*)?|\.\d+)turn\b)/,
+ /* 16: */ /^(?:(\d+(\.\d*)?|\.\d+)s\b)/,
+ /* 17: */ /^(?:(\d+(\.\d*)?|\.\d+)ms\b)/,
+ /* 18: */ /^(?:(\d+(\.\d*)?|\.\d+)Hz\b)/,
+ /* 19: */ /^(?:(\d+(\.\d*)?|\.\d+)kHz\b)/,
+ /* 20: */ /^(?:(\d+(\.\d*)?|\.\d+)dpi\b)/,
+ /* 21: */ /^(?:(\d+(\.\d*)?|\.\d+)dpcm\b)/,
+ /* 22: */ /^(?:(\d+(\.\d*)?|\.\d+)dppx\b)/,
+ /* 23: */ /^(?:(\d+(\.\d*)?|\.\d+)em\b)/,
+ /* 24: */ /^(?:(\d+(\.\d*)?|\.\d+)ex\b)/,
+ /* 25: */ /^(?:(\d+(\.\d*)?|\.\d+)ch\b)/,
+ /* 26: */ /^(?:(\d+(\.\d*)?|\.\d+)rem\b)/,
+ /* 27: */ /^(?:(\d+(\.\d*)?|\.\d+)vw\b)/,
+ /* 28: */ /^(?:(\d+(\.\d*)?|\.\d+)vh\b)/,
+ /* 29: */ /^(?:(\d+(\.\d*)?|\.\d+)vmin\b)/,
+ /* 30: */ /^(?:(\d+(\.\d*)?|\.\d+)vmax\b)/,
+ /* 31: */ /^(?:(\d+(\.\d*)?|\.\d+)%)/,
+ /* 32: */ /^(?:(\d+(\.\d*)?|\.\d+)\b)/,
+ /* 33: */ /^(?:(calc))/,
+ /* 34: */ /^(?:(var))/,
+ /* 35: */ /^(?:([a-z]+))/,
+ /* 36: */ /^(?:\()/,
+ /* 37: */ /^(?:\))/,
+ /* 38: */ /^(?:,)/,
+ /* 39: */ /^(?:$)/
+ ],
+
+ conditions: {
+ 'INITIAL': {
+ rules: [
+ 0,
+ 1,
+ 2,
+ 3,
+ 4,
+ 5,
+ 6,
+ 7,
+ 8,
+ 9,
+ 10,
+ 11,
+ 12,
+ 13,
+ 14,
+ 15,
+ 16,
+ 17,
+ 18,
+ 19,
+ 20,
+ 21,
+ 22,
+ 23,
+ 24,
+ 25,
+ 26,
+ 27,
+ 28,
+ 29,
+ 30,
+ 31,
+ 32,
+ 33,
+ 34,
+ 35,
+ 36,
+ 37,
+ 38,
+ 39
+ ],
+
+ inclusive: true
+ }
+ }
+ };
+
+ return lexer;
+}();
+parser.lexer = lexer;
+
+
+
+function Parser() {
+ this.yy = {};
+}
+Parser.prototype = parser;
+parser.Parser = Parser;
+
+return new Parser();
+})();
+
+
+
+
+if (typeof require !== 'undefined' && typeof exports !== 'undefined') {
+ exports.parser = parser;
+ exports.Parser = parser.Parser;
+ exports.parse = function () {
+ return parser.parse.apply(parser, arguments);
+ };
+
+}
diff --git a/node_modules/postcss-calc/node_modules/reduce-css-calc/package.json b/node_modules/postcss-calc/node_modules/reduce-css-calc/package.json
new file mode 100644
index 00000000..e68caf24
--- /dev/null
+++ b/node_modules/postcss-calc/node_modules/reduce-css-calc/package.json
@@ -0,0 +1,49 @@
+{
+ "name": "reduce-css-calc",
+ "version": "2.1.8",
+ "description": "Reduce CSS calc() function to the maximum",
+ "keywords": [
+ "css",
+ "calculation",
+ "calc"
+ ],
+ "main": "dist/index.js",
+ "files": [
+ "dist"
+ ],
+ "scripts": {
+ "prepublish": "npm run build && del-cli dist/__tests__",
+ "build": "del-cli dist && cross-env BABEL_ENV=publish babel src --out-dir dist && jison parser.jison -o dist/parser.js",
+ "pretest": "eslint src && npm run build",
+ "test": "ava dist/__tests__/",
+ "release": "npmpub"
+ },
+ "author": "Maxime Thirouin",
+ "license": "MIT",
+ "repository": "https://github.com/MoOx/reduce-css-calc.git",
+ "devDependencies": {
+ "ava": "^0.18.2",
+ "babel-cli": "^6.18.0",
+ "babel-core": "^6.21.0",
+ "babel-eslint": "^7.1.1",
+ "babel-plugin-add-module-exports": "^0.2.1",
+ "babel-preset-env": "^1.6.0",
+ "babel-register": "^6.18.0",
+ "cross-env": "^3.1.4",
+ "del-cli": "^0.2.1",
+ "eslint": "^3.12.2",
+ "eslint-config-i-am-meticulous": "^6.0.1",
+ "eslint-plugin-babel": "^4.0.0",
+ "eslint-plugin-import": "^2.2.0",
+ "jison-gho": "^0.6.1-216",
+ "npmpub": "^5.0.0"
+ },
+ "dependencies": {
+ "css-unit-converter": "^1.1.1",
+ "postcss-value-parser": "^3.3.0"
+ },
+ "eslintConfig": {
+ "parser": "babel-eslint",
+ "extends": "eslint-config-i-am-meticulous"
+ }
+}
diff --git a/node_modules/postcss-calc/package.json b/node_modules/postcss-calc/package.json
index 68867715..c23cc0c1 100644
--- a/node_modules/postcss-calc/package.json
+++ b/node_modules/postcss-calc/package.json
@@ -1,6 +1,6 @@
{
"name": "postcss-calc",
- "version": "9.0.1",
+ "version": "6.0.2",
"description": "PostCSS plugin to reduce calc()",
"keywords": [
"css",
@@ -9,60 +9,46 @@
"calculation",
"calc"
],
- "homepage": "https://github.com/postcss/postcss-calc",
- "repository": {
- "type": "git",
- "url": "https://github.com/postcss/postcss-calc.git"
- },
- "main": "src/index.js",
- "types": "types/index.d.ts",
+ "main": "dist/index.js",
"files": [
- "src",
- "types",
+ "dist",
"LICENSE"
],
"scripts": {
- "prepare": "pnpm run build && tsc",
- "build": "jison ./parser.jison -o src/parser.js",
- "lint": "eslint . && tsc",
- "test": "uvu test"
+ "prepublish": "npm run build && del-cli dist/__tests__",
+ "build": "del-cli dist && cross-env BABEL_ENV=publish babel src --out-dir dist",
+ "pretest": "eslint src && npm run build",
+ "test": "ava src/__tests__/"
},
- "author": "Andy Jansson",
+ "author": "Maxime Thirouin",
"license": "MIT",
+ "repository": "https://github.com/postcss/postcss-calc.git",
"eslintConfig": {
- "extends": [
- "eslint:recommended",
- "prettier"
- ],
- "env": {
- "node": true,
- "es2017": true
- },
- "ignorePatterns": [
- "src/parser.js"
- ],
- "rules": {
- "curly": "error"
- }
- },
- "engines": {
- "node": "^14 || ^16 || >=18.0"
+ "parser": "babel-eslint",
+ "extends": "eslint-config-i-am-meticulous"
},
"devDependencies": {
- "@types/node": "^18.16.2",
- "eslint": "^8.39.0",
- "eslint-config-prettier": "^8.8.0",
- "jison-gho": "^0.6.1-216",
- "postcss": "^8.2.2",
- "prettier": "^2.8.8",
- "typescript": "~5.0.4",
- "uvu": "^0.5.6"
+ "ava": "^0.19.1",
+ "babel-cli": "^6.18.0",
+ "babel-core": "^6.21.0",
+ "babel-eslint": "^7.1.1",
+ "babel-plugin-add-module-exports": "^0.2.1",
+ "babel-preset-env": "^1.4.0",
+ "babel-register": "^6.18.0",
+ "cross-env": "^4.0.0",
+ "del-cli": "^0.2.1",
+ "eslint": "^3.12.2",
+ "eslint-config-i-am-meticulous": "^6.0.1",
+ "eslint-plugin-babel": "^4.0.0",
+ "eslint-plugin-import": "^2.2.0"
},
"dependencies": {
- "postcss-selector-parser": "^6.0.11",
- "postcss-value-parser": "^4.2.0"
+ "css-unit-converter": "^1.1.1",
+ "postcss": "^7.0.2",
+ "postcss-selector-parser": "^2.2.2",
+ "reduce-css-calc": "^2.0.0"
},
- "peerDependencies": {
- "postcss": "^8.2.2"
+ "ava": {
+ "require": "babel-register"
}
}
diff --git a/node_modules/laggard/node_modules/postcss-reporter/LICENSE b/node_modules/postcss-cli/node_modules/postcss-reporter/LICENSE
index 6d347c06..6d347c06 100644
--- a/node_modules/laggard/node_modules/postcss-reporter/LICENSE
+++ b/node_modules/postcss-cli/node_modules/postcss-reporter/LICENSE
diff --git a/node_modules/postcss-cli/node_modules/postcss-reporter/README.md b/node_modules/postcss-cli/node_modules/postcss-reporter/README.md
new file mode 100644
index 00000000..ca6c43b9
--- /dev/null
+++ b/node_modules/postcss-cli/node_modules/postcss-reporter/README.md
@@ -0,0 +1,12 @@
+# postcss-reporter
+
+A PostCSS plugin to `console.log()` the messages (warnings, etc.) registered by other PostCSS plugins.
+
+---
+
+**SEEKING A NEW MAINTAINER!** Interested in contributing to the ecosystem of PostCSS and Stylelint? Please open an issue if you'd like to take over maintenance of this package.
+
+---
+
+## Docs
+Read **[full docs](https://github.com/postcss/postcss-reporter#readme)** on GitHub.
diff --git a/node_modules/postcss-cli/node_modules/postcss-reporter/index.js b/node_modules/postcss-cli/node_modules/postcss-reporter/index.js
new file mode 100644
index 00000000..01116aa4
--- /dev/null
+++ b/node_modules/postcss-cli/node_modules/postcss-reporter/index.js
@@ -0,0 +1,4 @@
+var reporter = require('./lib/reporter');
+
+module.exports = reporter;
+module.exports.postcss = true;
diff --git a/node_modules/postcss-cli/node_modules/postcss-reporter/lib/formatter.js b/node_modules/postcss-cli/node_modules/postcss-reporter/lib/formatter.js
new file mode 100644
index 00000000..7358cc61
--- /dev/null
+++ b/node_modules/postcss-cli/node_modules/postcss-reporter/lib/formatter.js
@@ -0,0 +1,95 @@
+var pico = require('picocolors');
+var path = require('path');
+var firstBy = require('thenby');
+var util = require('./util');
+
+var supportsLargeCharset =
+ process.platform !== 'win32' ||
+ process.env.CI ||
+ process.env.TERM === 'xterm-256color';
+var warningSymbol = supportsLargeCharset ? '⚠' : '!!';
+
+function createSortFunction(positionless, sortByPosition) {
+ var positionValue = 0
+
+ if (positionless === 'any') { positionValue = 1; }
+ if (positionless === 'first') { positionValue = 2; }
+ if (positionless === 'last') { positionValue = 0; }
+
+ var sortFunction = firstBy((m) => {
+ if (!m.line) return 1;
+ return positionValue;
+ })
+
+ if (sortByPosition) {
+ sortFunction = sortFunction.thenBy('line').thenBy('column');
+ }
+
+ return sortFunction;
+}
+
+module.exports = function (opts) {
+ var options = opts || {};
+ var sortByPosition =
+ typeof options.sortByPosition !== 'undefined'
+ ? options.sortByPosition
+ : true;
+ var positionless = options.positionless || 'first';
+
+ var sortFunction = createSortFunction(positionless, sortByPosition);
+
+ return function (input) {
+ var messages = input.messages.filter(function (message) {
+ return typeof message.text === 'string';
+ });
+ var source = input.source;
+
+ if (!messages.length) return '';
+
+ var orderedMessages = messages.sort(sortFunction);
+
+ var output = '\n';
+
+ if (source) {
+ output += pico.bold(pico.underline(logFrom(source))) + '\n';
+ }
+
+ orderedMessages.forEach(function (w) {
+ output += messageToString(w) + '\n';
+ });
+
+ return output;
+
+ function messageToString(message) {
+ var location = util.getLocation(message);
+ var str = '';
+
+ if (location.line) {
+ str += pico.bold(location.line);
+ }
+
+ if (location.column) {
+ str += pico.bold(':' + location.column);
+ }
+
+ if (location.line || location.column) {
+ str += '\t';
+ }
+
+ if (!options.noIcon && message.type === 'warning') {
+ str += pico.yellow(warningSymbol + ' ');
+ }
+
+ str += message.text;
+ if (!options.noPlugin) {
+ str += pico.yellow(' [' + message.plugin + ']');
+ }
+ return str;
+ }
+
+ function logFrom(fromValue) {
+ if (fromValue.charAt(0) === '<') return fromValue;
+ return path.relative(process.cwd(), fromValue).split(path.sep).join('/');
+ }
+ };
+};
diff --git a/node_modules/postcss-cli/node_modules/postcss-reporter/lib/reporter.js b/node_modules/postcss-cli/node_modules/postcss-reporter/lib/reporter.js
new file mode 100644
index 00000000..71872a97
--- /dev/null
+++ b/node_modules/postcss-cli/node_modules/postcss-reporter/lib/reporter.js
@@ -0,0 +1,101 @@
+var defaultFormatter = require('./formatter');
+var pico = require('picocolors');
+var util = require('./util');
+
+module.exports = function (opts = {}) {
+ var formatter =
+ opts.formatter ||
+ defaultFormatter({
+ noIcon: opts.noIcon,
+ noPlugin: opts.noPlugin,
+ });
+
+ var pluginFilter;
+ if (!opts.plugins) {
+ // Every plugin
+ pluginFilter = function () {
+ return true;
+ };
+ } else if (
+ opts.plugins.every(function (plugin) {
+ return plugin[0] === '!';
+ })
+ ) {
+ // Deny list
+ pluginFilter = function (message) {
+ return opts.plugins.indexOf('!' + message.plugin) === -1;
+ };
+ } else {
+ // Allow list
+ pluginFilter = function (message) {
+ return opts.plugins.indexOf(message.plugin) !== -1;
+ };
+ }
+
+ var messageFilter = opts.filter || ((message) => message.type === 'warning');
+
+ return {
+ postcssPlugin: 'postcss-reporter',
+ OnceExit(css, { result }) {
+ var messagesToLog = result.messages
+ .filter(pluginFilter)
+ .filter(messageFilter);
+
+ var resultSource = !result.root.source
+ ? ''
+ : result.root.source.input.file || result.root.source.input.id;
+
+ var sourceGroupedMessages = messagesToLog.reduce((grouped, message) => {
+ const key = util.getLocation(message).file || resultSource;
+
+ if (!grouped.hasOwnProperty(key)) {
+ grouped[key] = [];
+ }
+
+ grouped[key].push(message);
+
+ return grouped;
+ }, {});
+
+ var report = '';
+ for (const source in sourceGroupedMessages) {
+ if (sourceGroupedMessages.hasOwnProperty(source)) {
+ report += formatter({
+ messages: sourceGroupedMessages[source],
+ source: source,
+ });
+ }
+ }
+
+ if (opts.clearReportedMessages) {
+ result.messages = result.messages.filter(message => !messagesToLog.includes(message));
+ }
+
+ if (opts.clearAllMessages) {
+ var messagesToClear = result.messages.filter(pluginFilter);
+ result.messages = result.messages.filter(message => !messagesToClear.includes(message));
+ }
+
+ if (!report) return;
+
+ console.log(report);
+
+ if (opts.throwError && shouldThrowError()) {
+ throw new Error(
+ pico.red(
+ pico.bold('\n** postcss-reporter: warnings or errors were found **')
+ )
+ );
+ }
+
+ function shouldThrowError() {
+ return (
+ messagesToLog.length &&
+ messagesToLog.some((message) => {
+ return message.type === 'warning' || message.type === 'error';
+ })
+ );
+ }
+ },
+ };
+};
diff --git a/node_modules/postcss-cli/node_modules/postcss-reporter/lib/util.js b/node_modules/postcss-cli/node_modules/postcss-reporter/lib/util.js
new file mode 100644
index 00000000..094b3acc
--- /dev/null
+++ b/node_modules/postcss-cli/node_modules/postcss-reporter/lib/util.js
@@ -0,0 +1,19 @@
+exports.getLocation = function (message) {
+ var messageNode = message.node;
+
+ var location = {
+ line: message.line,
+ column: message.column,
+ };
+
+ var messageInput = messageNode && messageNode.source && messageNode.source.input;
+
+ if (!messageInput) return location;
+
+ var originLocation =
+ messageInput.origin && messageInput.origin(message.line, message.column);
+ if (originLocation) return originLocation;
+
+ location.file = messageInput.file || messageInput.id;
+ return location;
+};
diff --git a/node_modules/postcss-cli/node_modules/postcss-reporter/package.json b/node_modules/postcss-cli/node_modules/postcss-reporter/package.json
new file mode 100644
index 00000000..15a9867c
--- /dev/null
+++ b/node_modules/postcss-cli/node_modules/postcss-reporter/package.json
@@ -0,0 +1,31 @@
+{
+ "name": "postcss-reporter",
+ "version": "7.0.5",
+ "description": "Log PostCSS messages in the console",
+ "main": "index.js",
+ "files": [
+ "index.js",
+ "lib"
+ ],
+ "engines": {
+ "node": ">=10"
+ },
+ "repository": "postcss/postcss-reporter",
+ "author": {
+ "name": "David Clark",
+ "email": "david.dave.clark@gmail.com",
+ "url": "https://davidtheclark.com"
+ },
+ "license": "MIT",
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/postcss/"
+ },
+ "peerDependencies": {
+ "postcss": "^8.1.0"
+ },
+ "dependencies": {
+ "picocolors": "^1.0.0",
+ "thenby": "^1.3.4"
+ }
+}
diff --git a/node_modules/slash/index.d.ts b/node_modules/postcss-cli/node_modules/slash/index.d.ts
index 692c7fda..692c7fda 100644
--- a/node_modules/slash/index.d.ts
+++ b/node_modules/postcss-cli/node_modules/slash/index.d.ts
diff --git a/node_modules/postcss-cli/node_modules/slash/index.js b/node_modules/postcss-cli/node_modules/slash/index.js
new file mode 100644
index 00000000..1b7ee1ed
--- /dev/null
+++ b/node_modules/postcss-cli/node_modules/slash/index.js
@@ -0,0 +1,9 @@
+export default function slash(path) {
+ const isExtendedLengthPath = path.startsWith('\\\\?\\');
+
+ if (isExtendedLengthPath) {
+ return path;
+ }
+
+ return path.replace(/\\/g, '/');
+}
diff --git a/node_modules/postcss-cli/node_modules/slash/license b/node_modules/postcss-cli/node_modules/slash/license
new file mode 100644
index 00000000..fa7ceba3
--- /dev/null
+++ b/node_modules/postcss-cli/node_modules/slash/license
@@ -0,0 +1,9 @@
+MIT License
+
+Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/@babel/cli/node_modules/slash/package.json b/node_modules/postcss-cli/node_modules/slash/package.json
index 1e360070..a0f507c9 100644
--- a/node_modules/@babel/cli/node_modules/slash/package.json
+++ b/node_modules/postcss-cli/node_modules/slash/package.json
@@ -1,34 +1,39 @@
{
"name": "slash",
- "version": "2.0.0",
+ "version": "5.1.0",
"description": "Convert Windows backslash paths to slash paths",
"license": "MIT",
"repository": "sindresorhus/slash",
+ "funding": "https://github.com/sponsors/sindresorhus",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
- "url": "sindresorhus.com"
+ "url": "https://sindresorhus.com"
},
+ "type": "module",
+ "exports": "./index.js",
+ "types": "./index.d.ts",
"engines": {
- "node": ">=6"
+ "node": ">=14.16"
},
"scripts": {
- "test": "xo && ava"
+ "test": "xo && ava && tsd"
},
"files": [
- "index.js"
+ "index.js",
+ "index.d.ts"
],
"keywords": [
"path",
"seperator",
- "sep",
"slash",
"backslash",
"windows",
- "win"
+ "convert"
],
"devDependencies": {
- "ava": "*",
- "xo": "*"
+ "ava": "^5.2.0",
+ "tsd": "^0.28.1",
+ "xo": "^0.54.2"
}
}
diff --git a/node_modules/postcss-cli/node_modules/slash/readme.md b/node_modules/postcss-cli/node_modules/slash/readme.md
new file mode 100644
index 00000000..42f74f90
--- /dev/null
+++ b/node_modules/postcss-cli/node_modules/slash/readme.md
@@ -0,0 +1,36 @@
+# slash
+
+> Convert Windows backslash paths to slash paths: `foo\\bar` ➔ `foo/bar`
+
+[Forward-slash paths can be used in Windows](http://superuser.com/a/176395/6877) as long as they're not extended-length paths.
+
+This was created since the `path` methods in Node.js outputs `\\` paths on Windows.
+
+## Install
+
+```sh
+npm install slash
+```
+
+## Usage
+
+```js
+import path from 'node:path';
+import slash from 'slash';
+
+const string = path.join('foo', 'bar');
+// Unix => foo/bar
+// Windows => foo\\bar
+
+slash(string);
+// Unix => foo/bar
+// Windows => foo/bar
+```
+
+## API
+
+### slash(path)
+
+Type: `string`
+
+Accepts a Windows backslash path and returns a path with forward slashes.
diff --git a/node_modules/postcss-colormin/node_modules/.bin/browserslist b/node_modules/postcss-colormin/node_modules/.bin/browserslist
new file mode 120000
index 00000000..c4cc06e3
--- /dev/null
+++ b/node_modules/postcss-colormin/node_modules/.bin/browserslist
@@ -0,0 +1 @@
+../../../browserslist/cli.js \ No newline at end of file
diff --git a/node_modules/postcss-convert-values/node_modules/.bin/browserslist b/node_modules/postcss-convert-values/node_modules/.bin/browserslist
new file mode 120000
index 00000000..c4cc06e3
--- /dev/null
+++ b/node_modules/postcss-convert-values/node_modules/.bin/browserslist
@@ -0,0 +1 @@
+../../../browserslist/cli.js \ No newline at end of file
diff --git a/node_modules/postcss-fixes/node_modules/.bin/browserslist b/node_modules/postcss-fixes/node_modules/.bin/browserslist
deleted file mode 120000
index 3cd991b2..00000000
--- a/node_modules/postcss-fixes/node_modules/.bin/browserslist
+++ /dev/null
@@ -1 +0,0 @@
-../browserslist/cli.js \ No newline at end of file
diff --git a/node_modules/postcss-fixes/node_modules/ansi-regex/index.js b/node_modules/postcss-fixes/node_modules/ansi-regex/index.js
deleted file mode 100644
index b9574ed7..00000000
--- a/node_modules/postcss-fixes/node_modules/ansi-regex/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-'use strict';
-module.exports = function () {
- return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g;
-};
diff --git a/node_modules/postcss-fixes/node_modules/ansi-regex/license b/node_modules/postcss-fixes/node_modules/ansi-regex/license
deleted file mode 100644
index 654d0bfe..00000000
--- a/node_modules/postcss-fixes/node_modules/ansi-regex/license
+++ /dev/null
@@ -1,21 +0,0 @@
-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.
diff --git a/node_modules/postcss-fixes/node_modules/ansi-regex/package.json b/node_modules/postcss-fixes/node_modules/ansi-regex/package.json
deleted file mode 100644
index eb44fb5c..00000000
--- a/node_modules/postcss-fixes/node_modules/ansi-regex/package.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
- "name": "ansi-regex",
- "version": "2.1.1",
- "description": "Regular expression for matching ANSI escape codes",
- "license": "MIT",
- "repository": "chalk/ansi-regex",
- "author": {
- "name": "Sindre Sorhus",
- "email": "sindresorhus@gmail.com",
- "url": "sindresorhus.com"
- },
- "maintainers": [
- "Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)",
- "Joshua Appelman <jappelman@xebia.com> (jbnicolai.com)",
- "JD Ballard <i.am.qix@gmail.com> (github.com/qix-)"
- ],
- "engines": {
- "node": ">=0.10.0"
- },
- "scripts": {
- "test": "xo && ava --verbose",
- "view-supported": "node fixtures/view-codes.js"
- },
- "files": [
- "index.js"
- ],
- "keywords": [
- "ansi",
- "styles",
- "color",
- "colour",
- "colors",
- "terminal",
- "console",
- "cli",
- "string",
- "tty",
- "escape",
- "formatting",
- "rgb",
- "256",
- "shell",
- "xterm",
- "command-line",
- "text",
- "regex",
- "regexp",
- "re",
- "match",
- "test",
- "find",
- "pattern"
- ],
- "devDependencies": {
- "ava": "0.17.0",
- "xo": "0.16.0"
- },
- "xo": {
- "rules": {
- "guard-for-in": 0,
- "no-loop-func": 0
- }
- }
-}
diff --git a/node_modules/postcss-fixes/node_modules/ansi-regex/readme.md b/node_modules/postcss-fixes/node_modules/ansi-regex/readme.md
deleted file mode 100644
index 6a928edf..00000000
--- a/node_modules/postcss-fixes/node_modules/ansi-regex/readme.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# ansi-regex [![Build Status](https://travis-ci.org/chalk/ansi-regex.svg?branch=master)](https://travis-ci.org/chalk/ansi-regex)
-
-> Regular expression for matching [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)
-
-
-## Install
-
-```
-$ npm install --save ansi-regex
-```
-
-
-## Usage
-
-```js
-const ansiRegex = require('ansi-regex');
-
-ansiRegex().test('\u001b[4mcake\u001b[0m');
-//=> true
-
-ansiRegex().test('cake');
-//=> false
-
-'\u001b[4mcake\u001b[0m'.match(ansiRegex());
-//=> ['\u001b[4m', '\u001b[0m']
-```
-
-## FAQ
-
-### Why do you test for codes not in the ECMA 48 standard?
-
-Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. If I recall correctly, we test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them.
-
-On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out.
-
-
-## License
-
-MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/node_modules/postcss-fixes/node_modules/balanced-match/.npmignore b/node_modules/postcss-fixes/node_modules/balanced-match/.npmignore
deleted file mode 100644
index ae5d8c36..00000000
--- a/node_modules/postcss-fixes/node_modules/balanced-match/.npmignore
+++ /dev/null
@@ -1,5 +0,0 @@
-test
-.gitignore
-.travis.yml
-Makefile
-example.js
diff --git a/node_modules/postcss-fixes/node_modules/balanced-match/README.md b/node_modules/postcss-fixes/node_modules/balanced-match/README.md
deleted file mode 100644
index 08e918c0..00000000
--- a/node_modules/postcss-fixes/node_modules/balanced-match/README.md
+++ /dev/null
@@ -1,91 +0,0 @@
-# balanced-match
-
-Match balanced string pairs, like `{` and `}` or `<b>` and `</b>`. Supports regular expressions as well!
-
-[![build status](https://secure.travis-ci.org/juliangruber/balanced-match.svg)](http://travis-ci.org/juliangruber/balanced-match)
-[![downloads](https://img.shields.io/npm/dm/balanced-match.svg)](https://www.npmjs.org/package/balanced-match)
-
-[![testling badge](https://ci.testling.com/juliangruber/balanced-match.png)](https://ci.testling.com/juliangruber/balanced-match)
-
-## Example
-
-Get the first matching pair of braces:
-
-```js
-var balanced = require('balanced-match');
-
-console.log(balanced('{', '}', 'pre{in{nested}}post'));
-console.log(balanced('{', '}', 'pre{first}between{second}post'));
-console.log(balanced(/\s+\{\s+/, /\s+\}\s+/, 'pre { in{nest} } post'));
-```
-
-The matches are:
-
-```bash
-$ node example.js
-{ start: 3, end: 14, pre: 'pre', body: 'in{nested}', post: 'post' }
-{ start: 3,
- end: 9,
- pre: 'pre',
- body: 'first',
- post: 'between{second}post' }
-{ start: 3, end: 17, pre: 'pre', body: 'in{nest}', post: 'post' }
-```
-
-## API
-
-### var m = balanced(a, b, str)
-
-For the first non-nested matching pair of `a` and `b` in `str`, return an
-object with those keys:
-
-* **start** the index of the first match of `a`
-* **end** the index of the matching `b`
-* **pre** the preamble, `a` and `b` not included
-* **body** the match, `a` and `b` not included
-* **post** the postscript, `a` and `b` not included
-
-If there's no match, `undefined` will be returned.
-
-If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `['{', 'a', '']` and `{a}}` will match `['', 'a', '}']`.
-
-### var r = balanced.range(a, b, str)
-
-For the first non-nested matching pair of `a` and `b` in `str`, return an
-array with indexes: `[ <a index>, <b index> ]`.
-
-If there's no match, `undefined` will be returned.
-
-If the `str` contains more `a` than `b` / there are unmatched pairs, the first match that was closed will be used. For example, `{{a}` will match `[ 1, 3 ]` and `{a}}` will match `[0, 2]`.
-
-## Installation
-
-With [npm](https://npmjs.org) do:
-
-```bash
-npm install balanced-match
-```
-
-## License
-
-(MIT)
-
-Copyright (c) 2013 Julian Gruber &lt;julian@juliangruber.com&gt;
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/node_modules/postcss-fixes/node_modules/pixrem/node_modules/.bin/browserslist b/node_modules/postcss-fixes/node_modules/pixrem/node_modules/.bin/browserslist
new file mode 120000
index 00000000..c4cc06e3
--- /dev/null
+++ b/node_modules/postcss-fixes/node_modules/pixrem/node_modules/.bin/browserslist
@@ -0,0 +1 @@
+../../../browserslist/cli.js \ No newline at end of file
diff --git a/node_modules/postcss-fixes/node_modules/pixrem/node_modules/reduce-css-calc/CHANGELOG.md b/node_modules/postcss-fixes/node_modules/pixrem/node_modules/reduce-css-calc/CHANGELOG.md
deleted file mode 100755
index fff0c07c..00000000
--- a/node_modules/postcss-fixes/node_modules/pixrem/node_modules/reduce-css-calc/CHANGELOG.md
+++ /dev/null
@@ -1,87 +0,0 @@
-# 1.3.0 - 2016-08-26
-
-- Added: calc identifier from unresolved nested expressions are removed for
- better browser support
- ([#19](https://github.com/MoOx/reduce-css-calc/pull/19) - @ben-eb)
-
-# 1.2.8 - 2016-08-26
-
-- Fixed: regression from 1.2.5 on calc() with value without leading 0
- ([#17](https://github.com/MoOx/reduce-css-calc/pull/17) - @ben-eb)
-
-# 1.2.7 - 2016-08-22
-
-- Fixed: regression from 1.2.5 on calc() with value without leading 0
- (@MoOx)
-
-# 1.2.6 - 2016-08-22
-
-- Fixed: regression from 1.2.5 on calc() on multiple lines
- (@MoOx)
-
-# 1.2.5 - 2016-08-22
-
-- Fixed: security issue due to the usage of ``eval()``.
- This is to avoid an arbitrary code execution.
- Now operations are resolved using
- [``math-expression-evaluator``](https://github.com/redhivesoftware/math-expression-evaluator)
-
-# 1.2.4 - 2016-06-09
-
-- Fixed: zero values are not unitless anymore.
- Browsers do not calculate calc() with 0 unitless values.
- http://jsbin.com/punivivipo/edit?html,css,output
- ([#11](https://github.com/MoOx/reduce-css-calc/pull/11))

-
-# 1.2.3 - 2016-04-28
-
-- Fixed: wrong rouding in some edge cases
- ([#10](https://github.com/MoOx/reduce-css-calc/pull/10))
-
-# 1.2.2 - 2016-04-19
-
-- Fixed: Don't reduce expression containing CSS variables.
- ([#9](https://github.com/MoOx/reduce-css-calc/pull/9))
-
-# 1.2.1 - 2016-02-22
-
-- Fixed: uppercase letters in units are now supported
- ([#8](https://github.com/MoOx/reduce-css-calc/pull/8))
-
-# 1.2.0 - 2014-11-24
-
-- Decimal precision is now customisable as the `precision` option
-
-# 1.1.4 - 2014-11-12
-
-- 5 decimals rounding for everything
-
-# 1.1.3 - 2014-08-13
-
-- 5 decimals rounding for percentage
-
-# 1.1.2 - 2014-08-10
-
-- Prevent infinite loop by adding a `Call stack overflow`
-- Correctly ignore unrecognized values (safer evaluation for nested expressions,
- see [postcss/postcss-calc#2](https://github.com/postcss/postcss-calc/issues/2))
-- Handle rounding issues (eg: 10% * 20% now give 2%, not 2.0000000000000004%)
-
-# 1.1.1 - 2014-08-06
-
-- Fix issue when using mutiples differents prefixes in the same function
-
-# 1.1.0 - 2014-08-06
-
-- support more complex formulas
-- use `reduce-function-call`
-- better error message
-
-
-# 1.0.0 - 2014-08-04
-
-First release
-
-- based on [rework-calc](https://github.com/reworkcss/rework-calc) v1.1.0
-- add error if the calc() embed an empty calc() or empty ()
-- jscs + jshint added before tests
diff --git a/node_modules/postcss-fixes/node_modules/pixrem/node_modules/reduce-css-calc/index.js b/node_modules/postcss-fixes/node_modules/pixrem/node_modules/reduce-css-calc/index.js
deleted file mode 100755
index 3ec72471..00000000
--- a/node_modules/postcss-fixes/node_modules/pixrem/node_modules/reduce-css-calc/index.js
+++ /dev/null
@@ -1,164 +0,0 @@
-/**
- * Module dependencies
- */
-var balanced = require("balanced-match")
-var reduceFunctionCall = require("reduce-function-call")
-var mexp = require("math-expression-evaluator")
-
-/**
- * Constantes
- */
-var MAX_STACK = 100 // should be enough for a single calc()...
-var NESTED_CALC_RE = /(\+|\-|\*|\\|[^a-z]|)(\s*)(\()/g
-
-/**
- * Global variables
- */
-var stack
-
-/**
- * Expose reduceCSSCalc plugin
- *
- * @type {Function}
- */
-module.exports = reduceCSSCalc
-
-/**
- * Reduce CSS calc() in a string, whenever it's possible
- *
- * @param {String} value css input
- */
-function reduceCSSCalc(value, decimalPrecision) {
- stack = 0
- decimalPrecision = Math.pow(10, decimalPrecision === undefined ? 5 : decimalPrecision)
-
- // Allow calc() on multiple lines
- value = value.replace(/\n+/g, " ")
-
- /**
- * Evaluates an expression
- *
- * @param {String} expression
- * @returns {String}
- */
- function evaluateExpression (expression, functionIdentifier, call) {
- if (stack++ > MAX_STACK) {
- stack = 0
- throw new Error("Call stack overflow for " + call)
- }
-
- if (expression === "") {
- throw new Error(functionIdentifier + "(): '" + call + "' must contain a non-whitespace string")
- }
-
- expression = evaluateNestedExpression(expression, call)
-
- var units = getUnitsInExpression(expression)
-
- // If the expression contains multiple units or CSS variables,
- // then let the expression be (i.e. browser calc())
- if (units.length > 1 || expression.indexOf("var(") > -1) {
- return functionIdentifier + "(" + expression + ")"
- }
-
- var unit = units[0] || ""
-
- if (unit === "%") {
- // Convert percentages to numbers, to handle expressions like: 50% * 50% (will become: 25%):
- // console.log(expression)
- expression = expression.replace(/\b[0-9\.]+%/g, function(percent) {
- return parseFloat(percent.slice(0, -1)) * 0.01
- })
- }
-
- // Remove units in expression:
- var toEvaluate = expression.replace(new RegExp(unit, "gi"), "")
- var result
-
- try {
- result = mexp.eval(toEvaluate)
- }
- catch (e) {
- return functionIdentifier + "(" + expression + ")"
- }
-
- // Transform back to a percentage result:
- if (unit === "%") {
- result *= 100
- }
-
- // adjust rounding shit
- // (0.1 * 0.2 === 0.020000000000000004)
- if (functionIdentifier.length || unit === "%") {
- result = Math.round(result * decimalPrecision) / decimalPrecision
- }
-
- // Add unit
- result += unit
-
- return result
- }
-
- /**
- * Evaluates nested expressions
- *
- * @param {String} expression
- * @returns {String}
- */
- function evaluateNestedExpression(expression, call) {
- // Remove the calc part from nested expressions to ensure
- // better browser compatibility
- expression = expression.replace(/((?:\-[a-z]+\-)?calc)/g, "")
- var evaluatedPart = ""
- var nonEvaluatedPart = expression
- var matches
- while ((matches = NESTED_CALC_RE.exec(nonEvaluatedPart))) {
- if (matches[0].index > 0) {
- evaluatedPart += nonEvaluatedPart.substring(0, matches[0].index)
- }
-
- var balancedExpr = balanced("(", ")", nonEvaluatedPart.substring([0].index))
- if (balancedExpr.body === "") {
- throw new Error("'" + expression + "' must contain a non-whitespace string")
- }
-
- var evaluated = evaluateExpression(balancedExpr.body, "", call)
-
- evaluatedPart += balancedExpr.pre + evaluated
- nonEvaluatedPart = balancedExpr.post
- }
-
- return evaluatedPart + nonEvaluatedPart
- }
-
- return reduceFunctionCall(value, /((?:\-[a-z]+\-)?calc)\(/, evaluateExpression)
-}
-
-/**
- * Checks what units are used in an expression
- *
- * @param {String} expression
- * @returns {Array}
- */
-
-function getUnitsInExpression(expression) {
- var uniqueUnits = []
- var uniqueLowerCaseUnits = []
- var unitRegEx = /[\.0-9]([%a-z]+)/gi
- var matches = unitRegEx.exec(expression)
-
- while (matches) {
- if (!matches || !matches[1]) {
- continue
- }
-
- if (uniqueLowerCaseUnits.indexOf(matches[1].toLowerCase()) === -1) {
- uniqueUnits.push(matches[1])
- uniqueLowerCaseUnits.push(matches[1].toLowerCase())
- }
-
- matches = unitRegEx.exec(expression)
- }
-
- return uniqueUnits
-}
diff --git a/node_modules/postcss-fixes/node_modules/pixrem/node_modules/reduce-css-calc/package.json b/node_modules/postcss-fixes/node_modules/pixrem/node_modules/reduce-css-calc/package.json
deleted file mode 100644
index 6baa0601..00000000
--- a/node_modules/postcss-fixes/node_modules/pixrem/node_modules/reduce-css-calc/package.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "name": "reduce-css-calc",
- "version": "1.3.0",
- "description": "Reduce CSS calc() function to the maximum",
- "keywords": [
- "css",
- "calculation",
- "calc"
- ],
- "author": "Maxime Thirouin",
- "license": "MIT",
- "repository": "https://github.com/MoOx/reduce-css-calc.git",
- "files": [
- "index.js"
- ],
- "dependencies": {
- "balanced-match": "^0.4.2",
- "math-expression-evaluator": "^1.2.14",
- "reduce-function-call": "^1.0.1"
- },
- "devDependencies": {
- "jscs": "^1.5.9",
- "jshint": "^2.5.2",
- "npmpub": "^3.0.3",
- "tape": "^2.13.4"
- },
- "scripts": {
- "jscs": "jscs *.js **/*.js",
- "jshint": "jshint . --exclude node_modules",
- "test": "npm run jscs && npm run jshint && tape test",
- "release": "npmpub"
- }
-}
diff --git a/node_modules/postcss-merge-rules/node_modules/.bin/browserslist b/node_modules/postcss-merge-rules/node_modules/.bin/browserslist
new file mode 120000
index 00000000..c4cc06e3
--- /dev/null
+++ b/node_modules/postcss-merge-rules/node_modules/.bin/browserslist
@@ -0,0 +1 @@
+../../../browserslist/cli.js \ No newline at end of file
diff --git a/node_modules/postcss-minify-params/node_modules/.bin/browserslist b/node_modules/postcss-minify-params/node_modules/.bin/browserslist
new file mode 120000
index 00000000..c4cc06e3
--- /dev/null
+++ b/node_modules/postcss-minify-params/node_modules/.bin/browserslist
@@ -0,0 +1 @@
+../../../browserslist/cli.js \ No newline at end of file
diff --git a/node_modules/postcss-normalize-unicode/node_modules/.bin/browserslist b/node_modules/postcss-normalize-unicode/node_modules/.bin/browserslist
new file mode 120000
index 00000000..c4cc06e3
--- /dev/null
+++ b/node_modules/postcss-normalize-unicode/node_modules/.bin/browserslist
@@ -0,0 +1 @@
+../../../browserslist/cli.js \ No newline at end of file
diff --git a/node_modules/postcss-preset-env/node_modules/.bin/autoprefixer b/node_modules/postcss-preset-env/node_modules/.bin/autoprefixer
new file mode 120000
index 00000000..98390fb2
--- /dev/null
+++ b/node_modules/postcss-preset-env/node_modules/.bin/autoprefixer
@@ -0,0 +1 @@
+../../../autoprefixer/bin/autoprefixer \ No newline at end of file
diff --git a/node_modules/postcss-preset-env/node_modules/.bin/browserslist b/node_modules/postcss-preset-env/node_modules/.bin/browserslist
new file mode 120000
index 00000000..c4cc06e3
--- /dev/null
+++ b/node_modules/postcss-preset-env/node_modules/.bin/browserslist
@@ -0,0 +1 @@
+../../../browserslist/cli.js \ No newline at end of file
diff --git a/node_modules/postcss-quantity-queries/node_modules/balanced-match/.npmignore b/node_modules/postcss-quantity-queries/node_modules/balanced-match/.npmignore
deleted file mode 100644
index ae5d8c36..00000000
--- a/node_modules/postcss-quantity-queries/node_modules/balanced-match/.npmignore
+++ /dev/null
@@ -1,5 +0,0 @@
-test
-.gitignore
-.travis.yml
-Makefile
-example.js
diff --git a/node_modules/postcss-quantity-queries/node_modules/balanced-match/LICENSE.md b/node_modules/postcss-quantity-queries/node_modules/balanced-match/LICENSE.md
deleted file mode 100644
index 2cdc8e41..00000000
--- a/node_modules/postcss-quantity-queries/node_modules/balanced-match/LICENSE.md
+++ /dev/null
@@ -1,21 +0,0 @@
-(MIT)
-
-Copyright (c) 2013 Julian Gruber &lt;julian@juliangruber.com&gt;
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/node_modules/postcss-quantity-queries/node_modules/balanced-match/package.json b/node_modules/postcss-quantity-queries/node_modules/balanced-match/package.json
deleted file mode 100644
index 720eb4d1..00000000
--- a/node_modules/postcss-quantity-queries/node_modules/balanced-match/package.json
+++ /dev/null
@@ -1,47 +0,0 @@
-{
- "name": "balanced-match",
- "description": "Match balanced character pairs, like \"{\" and \"}\"",
- "version": "0.4.2",
- "repository": {
- "type": "git",
- "url": "git://github.com/juliangruber/balanced-match.git"
- },
- "homepage": "https://github.com/juliangruber/balanced-match",
- "main": "index.js",
- "scripts": {
- "test": "make test"
- },
- "dependencies": {},
- "devDependencies": {
- "tape": "^4.6.0"
- },
- "keywords": [
- "match",
- "regexp",
- "test",
- "balanced",
- "parse"
- ],
- "author": {
- "name": "Julian Gruber",
- "email": "mail@juliangruber.com",
- "url": "http://juliangruber.com"
- },
- "license": "MIT",
- "testling": {
- "files": "test/*.js",
- "browsers": [
- "ie/8..latest",
- "firefox/20..latest",
- "firefox/nightly",
- "chrome/25..latest",
- "chrome/canary",
- "opera/12..latest",
- "opera/next",
- "safari/5.1..latest",
- "ipad/6.0..latest",
- "iphone/6.0..latest",
- "android-browser/4.2..latest"
- ]
- }
-}
diff --git a/node_modules/postcss-reduce-initial/node_modules/.bin/browserslist b/node_modules/postcss-reduce-initial/node_modules/.bin/browserslist
new file mode 120000
index 00000000..c4cc06e3
--- /dev/null
+++ b/node_modules/postcss-reduce-initial/node_modules/.bin/browserslist
@@ -0,0 +1 @@
+../../../browserslist/cli.js \ No newline at end of file
diff --git a/node_modules/laggard/node_modules/postcss-reporter/CHANGELOG.md b/node_modules/postcss-reporter/CHANGELOG.md
index 97e25532..97e25532 100644
--- a/node_modules/laggard/node_modules/postcss-reporter/CHANGELOG.md
+++ b/node_modules/postcss-reporter/CHANGELOG.md
diff --git a/node_modules/postcss-reporter/README.md b/node_modules/postcss-reporter/README.md
index ca6c43b9..6842f131 100644
--- a/node_modules/postcss-reporter/README.md
+++ b/node_modules/postcss-reporter/README.md
@@ -1,12 +1,143 @@
# postcss-reporter
+[![Build Status](https://travis-ci.org/postcss/postcss-reporter.svg?branch=master)](https://travis-ci.org/postcss/postcss-reporter)
+[![AppVeyor Build Status](https://img.shields.io/appveyor/ci/davidtheclark/postcss-reporter/master.svg?label=windows%20build)](https://ci.appveyor.com/project/davidtheclark/postcss-reporter)
A PostCSS plugin to `console.log()` the messages (warnings, etc.) registered by other PostCSS plugins.
----
+## Purpose
-**SEEKING A NEW MAINTAINER!** Interested in contributing to the ecosystem of PostCSS and Stylelint? Please open an issue if you'd like to take over maintenance of this package.
+As of PostCSS 4.1, a single PostCSS process can accumulate messages from all of the plugins it uses.
+Most of these messages are [warnings](https://github.com/postcss/postcss/blob/master/docs/guidelines/plugin.md#32-use-resultwarn-for-warnings).
+Presumably, plugin authors want you to see those messages.
+So this plugin exists to read the accumulated messages (or messages from only the plugins you've specified), format them, and print them to the console.
----
+By default, the messages are formatted for human legibility and sorted according to the line/column positions attached to the messages. But another formatting function can be passed in with an option, and sorting can be turned of with an option.
-## Docs
-Read **[full docs](https://github.com/postcss/postcss-reporter#readme)** on GitHub.
+*By default, only warnings are logged*. If you would like to see more messages, you can change the `filter` function.
+
+## Example Output
+
+![Example](example.png?raw=true)
+
+## Installation
+
+```
+npm install postcss-reporter
+```
+
+Version 1.0.0+ is compatible with PostCSS 5+. (Earlier versions are compatible with PostCSS 4.)
+
+## Usage
+
+Add it to your plugin list *after any plugins whose messages you want to log*, and optionally pass it an object of options.
+
+For example, using [gulp-postcss](https://github.com/postcss/gulp-postcss):
+
+```js
+gulp.task('css', function() {
+ return gulp.src('./src/*.css')
+ .pipe(postcss([
+ bemLinter(),
+ customProperties(),
+ calc(),
+ rejectAllColors(),
+ reporter(myOptions) // <------ ding
+ ]))
+ .pipe(gulp.dest('./dist'));
+});
+```
+
+## Options
+
+**clearReportedMessages** (boolean, default = `false`)
+
+If true, the plugin will clear the result's messages after it logs them. This prevents other plugins, or the whatever runner you use, from logging the same information again and causing confusion.
+
+**formatter** (function, default = the default formatter)
+
+By default, this reporter will format the messages for human legibility in the console.
+To use another formatter, pass a function that
+
+ - accepts an object containing a `messages` array and a `source` string
+ - returns the string to report
+
+For example, you could write a formatter like this:
+
+```js
+reporter({
+ formatter: function(input) {
+ return input.source + ' produced ' + input.messages.length + ' messages';
+ }
+})
+```
+
+**plugins** (array of strings, default = `[]`)
+
+If `plugins` is empty (as it is by default), the reporter will log messages from every PostCSS plugin.
+
+There are 2 ways to limit output:
+
+- **Whitelist:** Provide an array of the plugins whose messages you would like to show.
+ For example, `{ plugins: ['postcss-bem-linter'] }` will only log messages from the `postcss-bem-linter` plugin.
+- **Blacklist:** Prefix all plugins in the array with `!` to specify only those plugins whose messages you would like to hide.
+ (All other plugins will be shown.)
+ For example, `{ plugins: ['!postcss-bem-linter'] }` will never log messages from the `postcss-bem-linter` plugin; but will log messages from every other plugin.
+
+**filter** (function)
+
+Provide a filter function. It receives the message object and returns a truthy or falsy value, indicating whether that particular message should be reported or not.
+
+By default, only messages with `type: "warning"` warnings are logged. (These are the messages produced when the plugin author uses PostCSS's `warn()` function.)
+
+For example, `function(message) { return true }` will only every message, regardless of the plugin or whether it's a warning or not.
+
+**clearAllMessages** (boolean, default = `false`)
+
+If `true`, not pass any messages into other plugins, or the whatever runner you use, for logging.
+
+**throwError** (boolean, default = `false`)
+
+If `true`, after the plugin logs your messages it will throw an error if it found any warnings.
+
+**sortByPosition** (boolean, default = `true`)
+
+If `false`, messages will not be sorted by line/column position.
+
+**positionless** (`"first"|"last"|"any"`, default = `"first"`)
+
+By default, messages without line/column positions will be grouped at the beginning of the output.
+To put them at the end, instead, use `"last"`.
+To not bother sorting these, use `"any"`.
+
+**noIcon** (boolean, default = `false`)
+
+If `true`, no exclamatory triangle icons will be printed next to warnings.
+
+**noPlugin** (boolean, default = `false`)
+
+If `true`, plugin names will not be printed in brackets after messages.
+
+## How to get output without colors
+
+If you would like no colors in the console output, simply pass `--no-colors` when you invoke whatever command runs this plugin. (This works because of [chalk](https://github.com/sindresorhus/chalk).)
+
+## Standalone formatter
+
+You can also use this module's formatter as a library, with following API:
+
+```js
+var formatter = require('postcss-reporter/lib/formatter');
+var myFormatter = formatter(myOptions);
+// to use defaults, just pass no options: `formatter()`
+var warningLog = myFormatter({
+ messages: someMessages,
+ source: someSource
+});
+console.log(warningLog);
+```
+
+These are the formatter's options:
+
+- sortByPosition (boolean, default = `true`)
+- noIcon (boolean, default = `false`) - Do not print any warning exclamatory triangle icons
+- noPlugin (boolean, default = `false`) - Do not print plugin names
diff --git a/node_modules/postcss-reporter/index.js b/node_modules/postcss-reporter/index.js
index 01116aa4..2a4e4136 100644
--- a/node_modules/postcss-reporter/index.js
+++ b/node_modules/postcss-reporter/index.js
@@ -1,4 +1,4 @@
+var postcss = require('postcss');
var reporter = require('./lib/reporter');
-module.exports = reporter;
-module.exports.postcss = true;
+module.exports = postcss.plugin('postcss-reporter', reporter);
diff --git a/node_modules/postcss-reporter/lib/formatter.js b/node_modules/postcss-reporter/lib/formatter.js
index 7358cc61..b5719b8f 100644
--- a/node_modules/postcss-reporter/lib/formatter.js
+++ b/node_modules/postcss-reporter/lib/formatter.js
@@ -1,60 +1,45 @@
-var pico = require('picocolors');
+var chalk = require('chalk');
var path = require('path');
-var firstBy = require('thenby');
+var symbols = require('log-symbols');
+var _ = require('lodash');
var util = require('./util');
-var supportsLargeCharset =
- process.platform !== 'win32' ||
- process.env.CI ||
- process.env.TERM === 'xterm-256color';
-var warningSymbol = supportsLargeCharset ? '⚠' : '!!';
-
-function createSortFunction(positionless, sortByPosition) {
- var positionValue = 0
-
- if (positionless === 'any') { positionValue = 1; }
- if (positionless === 'first') { positionValue = 2; }
- if (positionless === 'last') { positionValue = 0; }
-
- var sortFunction = firstBy((m) => {
- if (!m.line) return 1;
- return positionValue;
- })
-
- if (sortByPosition) {
- sortFunction = sortFunction.thenBy('line').thenBy('column');
- }
-
- return sortFunction;
-}
-
-module.exports = function (opts) {
+module.exports = function(opts) {
var options = opts || {};
- var sortByPosition =
- typeof options.sortByPosition !== 'undefined'
- ? options.sortByPosition
- : true;
+ var sortByPosition = (typeof options.sortByPosition !== 'undefined') ? options.sortByPosition : true;
var positionless = options.positionless || 'first';
- var sortFunction = createSortFunction(positionless, sortByPosition);
-
- return function (input) {
- var messages = input.messages.filter(function (message) {
- return typeof message.text === 'string';
- });
+ return function(input) {
+ var messages = input.messages;
var source = input.source;
if (!messages.length) return '';
- var orderedMessages = messages.sort(sortFunction);
+ var orderedMessages = _.sortBy(
+ messages,
+ function(m) {
+ if (!m.line) return 1;
+ if (positionless === 'any') return 1;
+ if (positionless === 'first') return 2;
+ if (positionless === 'last') return 0;
+ },
+ function(m) {
+ if (!sortByPosition) return 1;
+ return m.line;
+ },
+ function(m) {
+ if (!sortByPosition) return 1;
+ return m.column;
+ }
+ );
var output = '\n';
if (source) {
- output += pico.bold(pico.underline(logFrom(source))) + '\n';
+ output += chalk.bold.underline(logFrom(source)) + '\n';
}
- orderedMessages.forEach(function (w) {
+ orderedMessages.forEach(function(w) {
output += messageToString(w) + '\n';
});
@@ -65,11 +50,11 @@ module.exports = function (opts) {
var str = '';
if (location.line) {
- str += pico.bold(location.line);
+ str += chalk.bold(location.line);
}
if (location.column) {
- str += pico.bold(':' + location.column);
+ str += chalk.bold(':' + location.column)
}
if (location.line || location.column) {
@@ -77,12 +62,12 @@ module.exports = function (opts) {
}
if (!options.noIcon && message.type === 'warning') {
- str += pico.yellow(warningSymbol + ' ');
+ str += chalk.yellow(symbols.warning + ' ');
}
str += message.text;
if (!options.noPlugin) {
- str += pico.yellow(' [' + message.plugin + ']');
+ str += chalk.yellow(' [' + message.plugin + ']');
}
return str;
}
diff --git a/node_modules/postcss-reporter/lib/reporter.js b/node_modules/postcss-reporter/lib/reporter.js
index 71872a97..70781fba 100644
--- a/node_modules/postcss-reporter/lib/reporter.js
+++ b/node_modules/postcss-reporter/lib/reporter.js
@@ -1,101 +1,81 @@
+var chalk = require('chalk');
+var _ = require('lodash');
var defaultFormatter = require('./formatter');
-var pico = require('picocolors');
var util = require('./util');
-module.exports = function (opts = {}) {
- var formatter =
- opts.formatter ||
- defaultFormatter({
- noIcon: opts.noIcon,
- noPlugin: opts.noPlugin,
- });
+module.exports = function(opts) {
+ var options = opts || {};
+
+ var formatter = options.formatter || defaultFormatter({
+ sortByPosition: (typeof options.sortByPosition !== 'undefined') ? options.sortByPosition : true,
+ positionless: options.positionless || 'first',
+ noIcon: options.noIcon,
+ noPlugin: options.noPlugin,
+ });
var pluginFilter;
- if (!opts.plugins) {
+ if (!options.plugins) {
// Every plugin
- pluginFilter = function () {
- return true;
- };
- } else if (
- opts.plugins.every(function (plugin) {
- return plugin[0] === '!';
- })
- ) {
- // Deny list
- pluginFilter = function (message) {
- return opts.plugins.indexOf('!' + message.plugin) === -1;
+ pluginFilter = function() { return true; };
+ } else if (options.plugins.every(function(plugin) { return plugin[0] === '!'; })) {
+ // Blacklist
+ pluginFilter = function(message) {
+ return options.plugins.indexOf('!' + message.plugin) === -1;
};
} else {
- // Allow list
- pluginFilter = function (message) {
- return opts.plugins.indexOf(message.plugin) !== -1;
+ // Whitelist
+ pluginFilter = function(message) {
+ return options.plugins.indexOf(message.plugin) !== -1;
};
}
- var messageFilter = opts.filter || ((message) => message.type === 'warning');
-
- return {
- postcssPlugin: 'postcss-reporter',
- OnceExit(css, { result }) {
- var messagesToLog = result.messages
- .filter(pluginFilter)
- .filter(messageFilter);
+ var messageFilter = options.filter || function(message) { return (message.type === 'warning'); };
- var resultSource = !result.root.source
- ? ''
- : result.root.source.input.file || result.root.source.input.id;
+ return function(css, result) {
+ var messagesToLog = result.messages
+ .filter(pluginFilter)
+ .filter(messageFilter);
- var sourceGroupedMessages = messagesToLog.reduce((grouped, message) => {
- const key = util.getLocation(message).file || resultSource;
+ var resultSource = (!result.root.source) ? ''
+ : result.root.source.input.file || result.root.source.input.id
- if (!grouped.hasOwnProperty(key)) {
- grouped[key] = [];
- }
-
- grouped[key].push(message);
+ var sourceGroupedMessages = _.groupBy(messagesToLog, function(message) {
+ return util.getLocation(message).file || resultSource;
+ });
- return grouped;
- }, {});
+ var report = '';
+ _.forOwn(sourceGroupedMessages, function(messages, source) {
+ report += formatter({
+ messages: messages,
+ source: source,
+ });
+ });
- var report = '';
- for (const source in sourceGroupedMessages) {
- if (sourceGroupedMessages.hasOwnProperty(source)) {
- report += formatter({
- messages: sourceGroupedMessages[source],
- source: source,
- });
- }
- }
+ if (options.clearReportedMessages) {
+ result.messages = _.difference(result.messages, messagesToLog);
+ }
- if (opts.clearReportedMessages) {
- result.messages = result.messages.filter(message => !messagesToLog.includes(message));
- }
+ if (options.clearAllMessages) {
+ var messagesToClear = result.messages.filter(pluginFilter);
+ result.messages = _.difference(result.messages, messagesToClear);
+ }
- if (opts.clearAllMessages) {
- var messagesToClear = result.messages.filter(pluginFilter);
- result.messages = result.messages.filter(message => !messagesToClear.includes(message));
- }
- if (!report) return;
+ if (!report) return;
- console.log(report);
+ console.log(report);
- if (opts.throwError && shouldThrowError()) {
- throw new Error(
- pico.red(
- pico.bold('\n** postcss-reporter: warnings or errors were found **')
- )
- );
- }
+ if (options.throwError && shouldThrowError()) {
+ throw new Error(chalk.red.bold('\n** postcss-reporter: warnings or errors were found **'));
+ }
- function shouldThrowError() {
- return (
- messagesToLog.length &&
- messagesToLog.some((message) => {
- return message.type === 'warning' || message.type === 'error';
- })
- );
- }
- },
+ function shouldThrowError() {
+ return (
+ messagesToLog.length
+ && messagesToLog.some(function(message) {
+ return message.type === 'warning' || message.type === 'error';
+ })
+ );
+ }
};
};
diff --git a/node_modules/postcss-reporter/lib/util.js b/node_modules/postcss-reporter/lib/util.js
index 094b3acc..76c649bc 100644
--- a/node_modules/postcss-reporter/lib/util.js
+++ b/node_modules/postcss-reporter/lib/util.js
@@ -1,4 +1,6 @@
-exports.getLocation = function (message) {
+var _ = require('lodash');
+
+exports.getLocation = function(message) {
var messageNode = message.node;
var location = {
@@ -6,13 +8,12 @@ exports.getLocation = function (message) {
column: message.column,
};
- var messageInput = messageNode && messageNode.source && messageNode.source.input;
+ var messageInput = _.get(messageNode, 'source.input');
if (!messageInput) return location;
- var originLocation =
- messageInput.origin && messageInput.origin(message.line, message.column);
- if (originLocation) return originLocation;
+ var originLocation = messageInput.origin && messageInput.origin(message.line, message.column)
+ if (originLocation) return originLocation
location.file = messageInput.file || messageInput.id;
return location;
diff --git a/node_modules/postcss-reporter/node_modules/postcss/CHANGELOG.md b/node_modules/postcss-reporter/node_modules/postcss/CHANGELOG.md
new file mode 100644
index 00000000..e2cd381e
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/CHANGELOG.md
@@ -0,0 +1,552 @@
+# Change Log
+This project adheres to [Semantic Versioning](http://semver.org/).
+
+## 6.0.23
+* Fix parsing nested at-rules without semicolon, params, and spaces.
+
+## 6.0.22
+* Fix `Node#prev` and `Node#next` on missed parent.
+
+## 6.0.21
+* Rename Chinese docs to fix `yarnpkg.com` issue.
+
+## 6.0.20
+* Better error message on `null` as input CSS.
+
+## 6.0.19
+* Fix TypeScript definitions for source maps (by Oleh Kuchuk).
+* Fix `source` field in TypeScript definitions (by Sylvain Pollet-Villard).
+
+## 6.0.18
+* Use primitive object in TypeScript definitions (by Sylvain Pollet-Villard).
+
+## 6.0.17
+* Fix parsing comment in selector between word tokens (by Oleh Kuchuk).
+
+## 6.0.16
+* Fix warning text (by Michael Keller).
+
+## 6.0.15
+* Add warning about missed `from` option on `process().then()` call.
+* Add IE 10 support.
+
+## 6.0.14
+* Fix TypeScript definitions (by Jed Mao).
+
+## 6.0.13
+* Fix TypeScript definitions for case of multiple PostCSS versions
+ in `node_modules` (by Chris Eppstein).
+* Use `source-map` 0.6.
+
+## 6.0.12
+* Don’t copy `*` hack to declaration indent.
+
+## 6.0.11
+* Add upper case `!IMPORTANT` support.
+
+## 6.0.10
+* Reduce PostCSS size in webpack bundle.
+
+## 6.0.9
+* Improve error message for plugin with old PostCSS (by Igor Adamenko).
+
+## 6.0.8
+* Fix Node.js 4.2.2 support.
+
+## 6.0.7
+* Fix base64 decoding for old Node.js and browser.
+
+## 6.0.6
+* Fix `end` position in at-rule without semicolon (by Oleh Kuchuk).
+
+## 6.0.5
+* Move Babel config from `package.json` for `node_modules` compiling cases.
+
+## 6.0.4
+* Fix parsing `;;` after rules.
+* Use Chalk 2.0.
+
+## 6.0.3
+* Fix escape sequences parsing (by Oleh Kuchuk).
+* Added ability to force disable colors with an environment variable.
+* Improved color detection of some terminal apps.
+
+## 6.0.2
+* Keep `raws.before` on moving `Root` children to new `Root`.
+
+## 6.0.1
+* Fix parser extensibility to use it in Safe Parser.
+
+## 6.0 “Marquis Orias”
+* Remove node.js 0.12 support.
+* Remove deprecated method from PostCSS 4.
+* Insert methods remove child from previous parent, instead of closing.
+* Insert methods and cloning doesn’t clean `raws` anymore.
+* Methods `moveTo`, `moveAfter`, `moveBefore` were deprecated.
+* Options was changed in `Plugin#process(css, processOptions, pluginOptions)`.
+* Add stream parser to reduce memory usage (by Oleh Kuchuk).
+* Add `before()`/`after()` shortcuts for `node.parent.insertBefore(node, x)`.
+* Add `Rule#raws.ownSemicolon` for semicolon after templates for `@apply`.
+* Use `babel-preset-env` to compile npm package.
+* Remove `js-base64` from dependencies (by Roman Dvornov).
+* Fix error message on single `:` in CSS.
+* Move tests to Jest.
+* Clean up test (by Gabriel Kalani).
+
+## 5.2.18
+* Fix TypeScript definitions for case of multiple PostCSS versions
+ in `node_modules` (by Chris Eppstein).
+
+## 5.2.17
+* Add `postcss-sass` suggestion to syntax error on `.sass` input.
+
+## 5.2.16
+* Better error on wrong argument in node constructor.
+
+## 5.2.15
+* Fix TypeScript definitions (by bumbleblym).
+
+## 5.2.14
+* Fix browser bundle building in webpack (by janschoenherr).
+
+## 5.2.13
+* Do not add comment to important raws.
+* Fix JSDoc (by Dmitry Semigradsky).
+
+## 5.2.12
+* Fix typo in deprecation message (by Garet McKinley).
+
+## 5.2.11
+* Fix TypeScript definitions (by Jed Mao).
+
+## 5.2.10
+* Fix TypeScript definitions (by Jed Mao).
+
+## 5.2.9
+* Update TypeScript definitions (by Jed Mao).
+
+## 5.2.8
+* Fix error message (by Ben Briggs).
+
+## 5.2.7
+* Better error message on syntax object in plugins list.
+
+## 5.2.6
+* Fix `postcss.vendor` for values with spaces (by 刘祺).
+
+## 5.2.5
+* Better error message on unclosed string (by Ben Briggs).
+
+## 5.2.4
+* Improve terminal CSS syntax highlight (by Simon Lydell).
+
+## 5.2.3
+* Better color highlight in syntax error code frame.
+* Fix color highlight support in old systems.
+
+## 5.2.2
+* Update `Processor#version`.
+
+## 5.2.1
+* Fix source map path for CSS without `from` option (by Michele Locati).
+
+## 5.2 “Duke Vapula”
+* Add syntax highlight to code frame in syntax error (by Andrey Popp).
+* Use Babel code frame style and size in syntax error.
+* Add `[` and `]` tokens to parse `[attr=;] {}` correctly.
+* Add `ignoreErrors` options to tokenizer (by Andrey Popp).
+* Fix error position on tab indent (by Simon Lydell).
+
+## 5.1.2
+* Suggests SCSS/Less parsers on parse errors depends on file extension.
+
+## 5.1.1
+* Fix TypeScript definitions (by Efremov Alexey).
+
+## 5.1 “King and President Zagan”
+* Add URI in source map support (by Mark Finger).
+* Add `map.from` option (by Mark Finger).
+* Add `<no source>` mappings for nodes without source (by Bogdan Chadkin).
+* Add function value support to `map.prev` option (by Chris Montoro).
+* Add declaration value type check in shortcut creating (by 刘祺).
+* `Result#warn` now returns new created warning.
+* Don’t call plugin creator in `postcss.plugin` call.
+* Add source maps to PostCSS ES5 build.
+* Add JSDoc to PostCSS classes.
+* Clean npm package from unnecessary docs.
+
+## 5.0.21
+* Fix support with input source mao with `utf8` encoding name.
+
+## 5.0.20
+* Fix between raw value parsing (by David Clark).
+* Update TypeScript definitions (by Jed Mao).
+* Clean fake node.source after `append(string)`.
+
+## 5.0.19
+* Fix indent-based syntaxes support.
+
+## 5.0.18
+* Parse new lines according W3C CSS syntax specification.
+
+## 5.0.17
+* Fix options argument in `Node#warn` (by Ben Briggs).
+* Fix TypeScript definitions (by Jed Mao).
+
+## 5.0.16
+* Fix CSS syntax error position on unclosed quotes.
+
+## 5.0.15
+* Fix `Node#clone()` on `null` value somewhere in node.
+
+## 5.0.14
+* Allow to use PostCSS in webpack bundle without JSON loader.
+
+## 5.0.13
+* Fix `index` and `word` options in `Warning#toString` (by Bogdan Chadkin).
+* Fix input source content loading in errors.
+* Fix map options on using `LazyResult` as input CSS.
+* 100% test coverage.
+* Use Babel 6.
+
+## 5.0.12
+* Allow passing a previous map with no mappings (by Andreas Lind).
+
+## 5.0.11
+* Increase plugins performance by 1.5 times.
+
+## 5.0.10
+* Fix warning from nodes without source.
+
+## 5.0.9
+* Fix source map type detection (by @asan).
+
+## 5.0.8
+* Fixed a missed step in `5.0.7` that caused the module to be published as
+ ES6 code.
+
+## 5.0.7
+* PostCSS now requires that node 0.12 is installed via the engines property
+ in package.json (by Howard Zuo).
+
+## 5.0.6
+* Fix parsing nested at-rule without semicolon (by Matt Drake).
+* Trim `Declaration#value` (by Bogdan Chadkin).
+
+## 5.0.5
+* Fix multi-tokens property parsing (by Matt Drake).
+
+## 5.0.4
+* Fix start position in `Root#source`.
+* Fix source map annotation, when CSS uses `\r\n` (by Mohammad Younes).
+
+## 5.0.3
+* Fix `url()` parsing.
+* Fix using `selectors` in `Rule` constructor.
+* Add start source to `Root` node.
+
+## 5.0.2
+* Fix `remove(index)` to be compatible with 4.x plugin.
+
+## 5.0.1
+* Fix PostCSS 4.x plugins compatibility.
+* Fix type definition loading (by Jed Mao).
+
+## 5.0 “President Valac”
+* Remove `safe` option. Move Safe Parser to separate project.
+* `Node#toString` does not include `before` for root nodes.
+* Remove plugin returning `Root` API.
+* Remove Promise polyfill for node.js 0.10.
+* Deprecate `eachInside`, `eachDecl`, `eachRule`, `eachAtRule` and `eachComment`
+ in favor of `walk`, `walkDecls`, `walkRules`, `walkAtRules` and `walkComments`
+ (by Jed Mao).
+* Deprecate `Container#remove` and `Node#removeSelf`
+ in favor of `Container#removeChild` and `Node#remove` (by Ben Briggs).
+* Deprecate `Node#replace` in favor of `replaceWith` (by Ben Briggs).
+* Deprecate raw properties in favor of `Node#raws` object.
+* Deprecate `Node#style` in favor of `raw`.
+* Deprecate `CssSyntaxError#generated` in favor of `input`.
+* Deprecate `Node#cleanStyles` in favor of `cleanRaws`.
+* Deprecate `Root#prevMap` in favor of `Root.source.input.map`.
+* Add `syntax`, `parser` and `stringifier` options for Custom Syntaxes.
+* Add stringifier option to `Node#toString`.
+* Add `Result#content` alias for non-CSS syntaxes.
+* Add `plugin.process(css)` shortcut to every plugin function (by Ben Briggs).
+* Add multiple nodes support to insert methods (by Jonathan Neal).
+* Add `Node#warn` shortcut (by Ben Briggs).
+* Add `word` and `index` options to errors and warnings (by David Clark).
+* Add `line`, `column` properties to `Warning`.
+* Use `supports-color` library to detect color support in error output.
+* Add type definitions for TypeScript plugin developers (by Jed Mao).
+* `Rule#selectors` setter detects separators.
+* Add `postcss.stringify` method.
+* Throw descriptive errors for incorrectly formatted plugins.
+* Add docs to npm release.
+* Fix `url()` parsing.
+* Fix Windows support (by Jed Mao).
+
+## 4.1.16
+* Fix errors without stack trace.
+
+## 4.1.15
+* Allow asynchronous plugins to change processor plugins list (by Ben Briggs).
+
+## 4.1.14
+* Fix for plugins packs defined by `postcss.plugin`.
+
+## 4.1.13
+* Fix input inlined source maps with UTF-8 encoding.
+
+## 4.1.12
+* Update Promise polyfill.
+
+## 4.1.11
+* Fix error message on wrong plugin format.
+
+## 4.1.10
+* Fix Promise behavior on sync plugin errors.
+* Automatically fill `plugin` field in `CssSyntaxError`.
+* Fix warning message (by Ben Briggs).
+
+## 4.1.9
+* Speed up `node.clone()`.
+
+## 4.1.8
+* Accepts `Processor` instance in `postcss()` constructor too.
+
+## 4.1.7
+* Speed up `postcss.list` (by Bogdan Chadkin).
+
+## 4.1.6
+* Fix Promise behavior on parsing error.
+
+## 4.1.5
+* Parse at-words in declaration values.
+
+## 4.1.4
+* Fix Promise polyfill dependency (by Anton Yakushev and Matija Marohnić).
+
+## 4.1.3
+* Add Promise polyfill for node.js 0.10 and IE.
+
+## 4.1.2
+* List helpers can be accessed independently `var space = postcss.list.space`.
+
+## 4.1.1
+* Show deprecated message only once.
+
+## 4.1 “Marquis Andras”
+* Asynchronous plugin support.
+* Add warnings from plugins and `Result#messages`.
+* Add `postcss.plugin()` to create plugins with a standard API.
+* Insert nodes by CSS string.
+* Show version warning message on error from an outdated plugin.
+* Send `Result` instance to plugins as the second argument.
+* Add `CssSyntaxError#plugin`.
+* Add `CssSyntaxError#showSourceCode()`.
+* Add `postcss.list` and `postcss.vendor` aliases.
+* Add `Processor#version`.
+* Parse wrong closing bracket.
+* Parse `!important` statement with spaces and comments inside (by Ben Briggs).
+* Throw an error on declaration without `prop` or `value` (by Philip Peterson).
+* Fix source map mappings position.
+* Add indexed source map support.
+* Always set `error.generated`.
+* Clean all source map annotation comments.
+
+## 4.0.6
+* Remove `babel` from released package dependencies (by Andres Suarez).
+
+## 4.0.5
+* Fix error message on double colon in declaration.
+
+## 4.0.4
+* Fix indent detection in some rare cases.
+
+## 4.0.3
+* Faster API with 6to5 Loose mode.
+* Fix indexed source maps support.
+
+## 4.0.2
+* Do not copy IE hacks to code style.
+
+## 4.0.1
+* Add `source.input` to `Root` too.
+
+## 4.0 “Duke Flauros”
+* Rename `Container#childs` to `nodes`.
+* Rename `PostCSS#processors` to `plugins`.
+* Add `Node#replaceValues()` method.
+* Add `Node#moveTo()`, `moveBefore()` and `moveAfter()` methods.
+* Add `Node#cloneBefore()` and `cloneAfter()` shortcuts.
+* Add `Node#next()`, `prev()` and `root()` shortcuts.
+* Add `Node#replaceWith()` method.
+* Add `Node#error()` method.
+* Add `Container#removeAll()` method.
+* Add filter argument to `eachDecl()` and `eachAtRule()`.
+* Add `Node#source.input` and move `source.file` or `source.id` to `input`.
+* Change code indent, when node was moved.
+* Better fix code style on `Rule`, `AtRule` and `Comment` nodes changes.
+* Allow to create rules and at-rules by hash shortcut in append methods.
+* Add class name to CSS syntax error output.
+
+## 3.0.7
+* Fix IE filter parsing with multiple commands.
+* Safer way to consume PostCSS object as plugin (by Maxime Thirouin).
+
+## 3.0.6
+* Fix missing semicolon when comment comes after last declaration.
+* Fix Safe Mode declaration parsing on unclosed blocks.
+
+## 3.0.5
+* Fix parser to support difficult cases with backslash escape and brackets.
+* Add `CssSyntaxError#stack` (by Maxime Thirouin).
+
+## 3.0.4
+* Fix Safe Mode on unknown word before declaration.
+
+## 3.0.3
+* Increase tokenizer speed (by Roman Dvornov).
+
+## 3.0.2
+* Fix empty comment parsing.
+* Fix `Root#normalize` in some inserts.
+
+## 3.0.1
+* Fix Rhino JS runtime support.
+* Typo in deprecated warning (by Maxime Thirouin).
+
+## 3.0 “Marquis Andrealphus”
+* New parser, which become the fastest ever CSS parser written in JavaScript.
+* Parser can now parse declarations and rules in one parent (like in `@page`)
+ and nested declarations for plugins like `postcss-nested`.
+* Child nodes array is now in `childs` property, instead of `decls` and `rules`.
+* `map.inline` and `map.sourcesContent` options are now `true` by default.
+* Fix iterators (`each`, `insertAfter`) on children array changes.
+* Use previous source map to show origin source of CSS syntax error.
+* Use 6to5 ES6 compiler, instead of ES6 Transpiler.
+* Use code style for manually added rules from existing rules.
+* Use `from` option from previous source map `file` field.
+* Set `to` value to `from` if `to` option is missing.
+* Use better node source name when missing `from` option.
+* Show a syntax error when `;` is missed between declarations.
+* Allow to pass `PostCSS` instance or list of plugins to `use()` method.
+* Allow to pass `Result` instance to `process()` method.
+* Trim Unicode BOM on source maps parsing.
+* Parse at-rules without spaces like `@import"file"`.
+* Better previous `sourceMappingURL` annotation comment cleaning.
+* Do not remove previous `sourceMappingURL` comment on `map.annotation: false`.
+* Parse nameless at-rules in Safe Mode.
+* Fix source map generation for nodes without source.
+* Fix next child `before` if `Root` first child got removed.
+
+## 2.2.6
+* Fix map generation for nodes without source (by Josiah Savary).
+
+## 2.2.5
+* Fix source map with BOM marker support (by Mohammad Younes).
+* Fix source map paths (by Mohammad Younes).
+
+## 2.2.4
+* Fix `prepend()` on empty `Root`.
+
+## 2.2.3
+* Allow to use object shortcut in `use()` with functions like `autoprefixer`.
+
+## 2.2.2
+* Add shortcut to set processors in `use()` via object with `.postcss` property.
+
+## 2.2.1
+* Send `opts` from `Processor#process(css, opts)` to processors.
+
+## 2.2 “Marquis Cimeies”
+* Use GNU style syntax error messages.
+* Add `Node#replace` method.
+* Add `CssSyntaxError#reason` property.
+
+## 2.1.2
+* Fix UTF-8 support in inline source map.
+* Fix source map `sourcesContent` if there is no `from` and `to` options.
+
+## 2.1.1
+* Allow to miss `to` and `from` options for inline source maps.
+* Add `Node#source.id` if file name is unknown.
+* Better detect splitter between rules in CSS concatenation tools.
+* Automatically clone node in insert methods.
+
+## 2.1 “King Amdusias”
+* Change Traceur ES6 compiler to ES6 Transpiler.
+* Show broken CSS line in syntax error.
+
+## 2.0 “King Belial”
+* Project was rewritten from CoffeeScript to ES6.
+* Add Safe Mode to works with live input or with hacks from legacy code.
+* More safer parser to pass all hacks from Browserhacks.com.
+* Use real properties instead of magic getter/setter for raw properties.
+
+## 1.0 “Marquis Decarabia”
+* Save previous source map for each node to support CSS concatenation
+ with multiple previous maps.
+* Add `map.sourcesContent` option to add origin content to `sourcesContent`
+ inside map.
+* Allow to set different place of output map in annotation comment.
+* Allow to use arrays and `Root` in `Container#append` and same methods.
+* Add `Root#prevMap` with information about previous map.
+* Allow to use latest PostCSS from GitHub by npm.
+* `Result` now is lazy and it will generate output CSS only if you use `css`
+ or `map` property.
+* Use separated `map.prev` option to set previous map.
+* Rename `inlineMap` option to `map.inline`.
+* Rename `mapAnnotation` option to `map.annotation`.
+* `Result#map` now return `SourceMapGenerator` object, instead of string.
+* Run previous map autodetect only if input CSS contains annotation comment.
+* Add `map: 'inline'` shortcut for `map: { inline: true }` option.
+* `Node#source.file` now will contains absolute path.
+* Clean `Declaration#between` style on node clone.
+
+## 0.3.5
+* Allow to use `Root` or `Result` as first argument in `process()`.
+* Save parsed AST to `Result#root`.
+
+## 0.3.4
+* Better space symbol detect to read UTF-8 BOM correctly.
+
+## 0.3.3
+* Remove source map hacks by using new Mozilla’s `source-map` (by Simon Lydell).
+
+## 0.3.2
+* Add URI encoding support for inline source maps.
+
+## 0.3.1
+* Fix relative paths from previous source map.
+* Safer space split in `Rule#selectors` (by Simon Lydell).
+
+## 0.3 “Prince Seere”
+* Add `Comment` node for comments between declarations or rules.
+* Add source map annotation comment to output CSS.
+* Allow to inline source map to annotation comment by data:uri.
+* Fix source maps on Windows.
+* Fix source maps for subdirectory (by Dmitry Nikitenko and Simon Lydell).
+* Autodetect previous source map.
+* Add `first` and `last` shortcuts to container nodes.
+* Parse `!important` to separated property in `Declaration`.
+* Allow to break iteration by returning `false`.
+* Copy code style to new nodes.
+* Add `eachInside` method to recursively iterate all nodes.
+* Add `selectors` shortcut to get selectors array.
+* Add `toResult` method to `Rule` to simplify work with several input files.
+* Clean declaration’s `value`, rule’s `selector` and at-rule’s `params`
+ by storing spaces in `between` property.
+
+## 0.2 “Duke Dantalion”
+* Add source map support.
+* Add shortcuts to create nodes.
+* Method `process()` now returns object with `css` and `map` keys.
+* Origin CSS file option was renamed from `file` to `from`.
+* Rename `Node#remove()` method to `removeSelf()` to fix name conflict.
+* Node source was moved to `source` property with origin file
+ and node end position.
+* You can set own CSS generate function.
+
+## 0.1 “Count Andromalius”
+* Initial release.
diff --git a/node_modules/postcss-reporter/node_modules/postcss/CONTRIBUTING.md b/node_modules/postcss-reporter/node_modules/postcss/CONTRIBUTING.md
new file mode 100644
index 00000000..227caa27
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/CONTRIBUTING.md
@@ -0,0 +1,78 @@
+# Contributing Guide to PostCSS
+
+If you want contribute to PostCSS, there are few things that you should
+be familiar with.
+
+
+## In Case You Have Question About Using PostCSS
+
+* **Ask for help in [the chat]**
+
+ If you stuck on something there is a big chance
+ that someone had similar problem before.
+
+[the chat]: https://gitter.im/postcss/postcss
+
+
+## Adding Your Plugin to the List
+
+If you created or found a plugin and want to add it to PostCSS plugins list
+follow this simple steps.
+
+PR should not change plugins defined in README it contains only favorite plugins
+and moderated by PostCSS author.
+
+Plugins submitted by community located in [`docs/plugins`].
+
+* **Keep plugins order**
+
+ Be sure that plugin not presented yet and find suitable position
+ in alphabetic order for it.
+ But plugins with `postcss-` prefix should come first.
+
+* **Check spelling**
+
+ Before submitting PR be sure that spelling check pass.
+ For that run command `npm test`.
+ If it fails with unknown word error, add it as word
+ to `.yaspellerrc` dictionary.
+
+* **Check PostCSS plugin guideline**
+
+ Provided plugin should match plugin [guidelines].
+
+- **Provide link to suggested plugin**
+
+ Make sure your pull request description contains link to plugin
+ you are willing to add.
+
+[`docs/plugins`]: https://github.com/postcss/postcss/blob/master/docs/plugins.md
+[guidelines]: https://github.com/postcss/postcss/blob/master/docs/guidelines/plugin.md
+
+
+## TypeScript Declaration Improvements
+
+If you found a bug or want to add certain improvements to types declaration file
+
+* **Check current TypeScript styling**
+
+ Be sure that your changes match TypeScript styling rules defined in typings file.
+ * We use classes for existing JS classes like `Stringifier`.
+ * Namespaces used for separating functions related to same subject.
+ * Interfaces used for defining custom types.
+
+ Make sure you read through declaration file writing [best practices]
+ by TypeScript team.
+
+[best practices]: https://www.typescriptlang.org/docs/handbook/declaration-files/do-s-and-don-ts.html
+
+
+## Core Development
+
+If you want to add new feature or fix existed issue
+
+- **Become familiar with PostCSS architecture**
+
+ For gentle intro to PostCSS architecture look through our [guide].
+
+[guide]: https://github.com/postcss/postcss/blob/master/docs/architecture.md
diff --git a/node_modules/postcss-reporter/node_modules/postcss/LICENSE b/node_modules/postcss-reporter/node_modules/postcss/LICENSE
new file mode 100644
index 00000000..da057b45
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/LICENSE
@@ -0,0 +1,20 @@
+The MIT License (MIT)
+
+Copyright 2013 Andrey Sitnik <andrey@sitnik.ru>
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/postcss-reporter/node_modules/postcss/README-cn.md b/node_modules/postcss-reporter/node_modules/postcss/README-cn.md
new file mode 100644
index 00000000..4846ed96
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/README-cn.md
@@ -0,0 +1,349 @@
+# PostCSS [![Gitter][chat-img]][chat]
+
+<img align="right" width="95" height="95"
+ alt="哲学家的石头 - PostCSS 的 logo"
+ src="http://postcss.github.io/postcss/logo.svg">
+
+[chat-img]: https://img.shields.io/badge/Gitter-Join_the_PostCSS_chat-brightgreen.svg
+[chat]: https://gitter.im/postcss/postcss
+
+PostCSS 是一个允许使用 JS 插件转换样式的工具。
+这些插件可以检查(lint)你的 CSS,支持 CSS Variables 和 Mixins,
+编译尚未被浏览器广泛支持的先进的 CSS 语法,内联图片,以及其它很多优秀的功能。
+
+PostCSS 在工业界被广泛地应用,其中不乏很多有名的行业领导者,如:维基百科,Twitter,阿里巴巴,
+JetBrains。PostCSS 的 [Autoprefixer] 插件是最流行的 CSS 处理工具之一。
+
+PostCSS 接收一个 CSS 文件并提供了一个 API 来分析、修改它的规则(通过把 CSS 规则转换成一个[抽象语法树]的方式)。在这之后,这个 API 便可被许多[插件]利用来做有用的事情,比如寻错或自动添加 CSS vendor 前缀。
+
+**Twitter 账号:** [@postcss](https://twitter.com/postcss)<br>
+**支持 / 讨论:** [Gitter](https://gitter.im/postcss/postcss)<br>
+
+如果需要 PostCSS 商业支持(如咨询,提升公司的前端文化,
+PostCSS 插件),请联系 [Evil Martians](https://evilmartians.com/?utm_source=postcss)
+邮箱 <surrender@evilmartians.com>。
+
+[抽象语法树]: https://zh.wikipedia.org/wiki/%E6%8A%BD%E8%B1%A1%E8%AA%9E%E6%B3%95%E6%A8%B9
+[Autoprefixer]: https://github.com/postcss/autoprefixer
+[插件]: https://github.com/postcss/postcss/blob/master/README-cn.md#%E6%8F%92%E4%BB%B6
+
+<a href="https://evilmartians.com/?utm_source=postcss">
+ <img src="https://evilmartians.com/badges/sponsored-by-evil-martians.svg"
+ alt="由 Evil Martians 赞助" width="236" height="54">
+</a>
+
+## 插件
+
+截止到目前,PostCSS 有 200 多个插件。你可以在 [插件列表] 或 [搜索目录] 找到它们。
+下方的列表是我们最喜欢的插件 - 它们很好地演示了我们可以用 PostCSS 做些什么。
+
+如果你有任何新的想法,[开发 PostCSS 插件] 非常简单易上手。
+
+[搜索目录]: http://postcss.parts
+[插件列表]: https://github.com/postcss/postcss/blob/master/docs/plugins.md
+
+### 解决全局 CSS 的问题
+
+* [`postcss-use`] 允许你在 CSS 里明确地设置 PostCSS 插件,并且只在当前文件执行它们。
+* [`postcss-modules`] 和 [`react-css-modules`] 可以自动以组件为单位隔绝 CSS 选择器。
+* [`postcss-autoreset`] 是全局样式重置的又一个选择,它更适用于分离的组件。
+* [`postcss-initial`] 添加了 `all: initial` 的支持,重置了所有继承的样式。
+* [`cq-prolyfill`] 添加了容器查询的支持,允许添加响应于父元素宽度的样式.
+
+### 提前使用先进的 CSS 特性
+
+* [`autoprefixer`] 添加了 vendor 浏览器前缀,它使用 Can I Use 上面的数据。
+* [`postcss-preset-env`] 允许你使用未来的 CSS 特性。
+
+### 更佳的 CSS 可读性
+
+* [`precss`] 囊括了许多插件来支持类似 Sass 的特性,比如 CSS 变量,套嵌,mixins 等。
+* [`postcss-sorting`] 给规则的内容以及@规则排序。
+* [`postcss-utilities`] 囊括了最常用的简写方式和书写帮助。
+* [`short`] 添加并拓展了大量的缩写属性。
+
+### 图片和字体
+
+* [`postcss-assets`] 可以插入图片尺寸和内联文件。
+* [`postcss-sprites`] 能生成雪碧图。
+* [`font-magician`] 生成所有在 CSS 里需要的 `@font-face` 规则。
+* [`postcss-inline-svg`] 允许你内联 SVG 并定制它的样式。
+* [`postcss-write-svg`] 允许你在 CSS 里写简单的 SVG。
+
+### 提示器(Linters)
+
+* [`stylelint`] 是一个模块化的样式提示器。
+* [`stylefmt`] 是一个能根据 `stylelint` 规则自动优化 CSS 格式的工具。
+* [`doiuse`] 提示 CSS 的浏览器支持性,使用的数据来自于 Can I Use。
+* [`colorguard`] 帮助你保持一个始终如一的调色板。
+
+### 其它
+
+* [`postcss-rtl`] 在单个 CSS 文件里组合了两个方向(左到右,右到左)的样式。
+* [`cssnano`] 是一个模块化的 CSS 压缩器。
+* [`lost`] 是一个功能强大的 `calc()` 栅格系统。
+* [`rtlcss`] 镜像翻转 CSS 样式,适用于 right-to-left 的应用场景。
+
+[`postcss-inline-svg`]: https://github.com/TrySound/postcss-inline-svg
+[`postcss-preset-env`]: https://github.com/jonathantneal/postcss-preset-env
+[`react-css-modules`]: https://github.com/gajus/react-css-modules
+[`postcss-autoreset`]: https://github.com/maximkoretskiy/postcss-autoreset
+[`postcss-write-svg`]: https://github.com/jonathantneal/postcss-write-svg
+[`postcss-utilities`]: https://github.com/ismamz/postcss-utilities
+[`postcss-initial`]: https://github.com/maximkoretskiy/postcss-initial
+[`postcss-sprites`]: https://github.com/2createStudio/postcss-sprites
+[`postcss-modules`]: https://github.com/outpunk/postcss-modules
+[`postcss-sorting`]: https://github.com/hudochenkov/postcss-sorting
+[`postcss-assets`]: https://github.com/assetsjs/postcss-assets
+[开发 PostCSS 插件]: https://github.com/postcss/postcss/blob/master/docs/writing-a-plugin.md
+[`font-magician`]: https://github.com/jonathantneal/postcss-font-magician
+[`autoprefixer`]: https://github.com/postcss/autoprefixer
+[`cq-prolyfill`]: https://github.com/ausi/cq-prolyfill
+[`postcss-rtl`]: https://github.com/vkalinichev/postcss-rtl
+[`postcss-use`]: https://github.com/postcss/postcss-use
+[`css-modules`]: https://github.com/css-modules/css-modules
+[`colorguard`]: https://github.com/SlexAxton/css-colorguard
+[`stylelint`]: https://github.com/stylelint/stylelint
+[`stylefmt`]: https://github.com/morishitter/stylefmt
+[`cssnano`]: http://cssnano.co
+[`precss`]: https://github.com/jonathantneal/precss
+[`doiuse`]: https://github.com/anandthakker/doiuse
+[`rtlcss`]: https://github.com/MohammadYounes/rtlcss
+[`short`]: https://github.com/jonathantneal/postcss-short
+[`lost`]: https://github.com/peterramsing/lost
+
+## 语法
+
+PostCSS 可以转化样式到任意语法,不仅仅是 CSS。
+如果还没有支持你最喜欢的语法,你可以编写一个解释器以及(或者)一个 stringifier 来拓展 PostCSS。
+
+* [`sugarss`] 是一个以缩进为基础的语法,类似于 Sass 和 Stylus。
+* [`postcss-syntax`] 通过文件扩展名自动切换语法。
+* [`postcss-html`] 解析类 HTML 文件里`<style>`标签中的样式。
+* [`postcss-markdown`] 解析 Markdown 文件里代码块中的样式。
+* [`postcss-jsx`] 解析源文件里模板或对象字面量中的CSS。
+* [`postcss-styled`] 解析源文件里模板字面量中的CSS。
+* [`postcss-scss`] 允许你使用 SCSS *(但并没有将 SCSS 编译到 CSS)*。
+* [`postcss-sass`] 允许你使用 Sass *(但并没有将 Sass 编译到 CSS)*。
+* [`postcss-less`] 允许你使用 Less *(但并没有将 LESS 编译到 CSS)*。
+* [`postcss-less-engine`] 允许你使用 Less *(并且使用真正的 Less.js 把 LESS 编译到 CSS)*。
+* [`postcss-js`] 允许你在 JS 里编写样式,或者转换成 React 的内联样式/Radium/JSS。
+* [`postcss-safe-parser`] 查找并修复 CSS 语法错误。
+* [`midas`] 将 CSS 字符串转化成高亮的 HTML。
+
+[`postcss-less-engine`]: https://github.com/Crunch/postcss-less
+[`postcss-safe-parser`]: https://github.com/postcss/postcss-safe-parser
+[`postcss-syntax`]: https://github.com/gucong3000/postcss-syntax
+[`postcss-html`]: https://github.com/gucong3000/postcss-html
+[`postcss-markdown`]: https://github.com/gucong3000/postcss-markdown
+[`postcss-jsx`]: https://github.com/gucong3000/postcss-jsx
+[`postcss-styled`]: https://github.com/gucong3000/postcss-styled
+[`postcss-scss`]: https://github.com/postcss/postcss-scss
+[`postcss-sass`]: https://github.com/AleshaOleg/postcss-sass
+[`postcss-less`]: https://github.com/webschik/postcss-less
+[`postcss-js`]: https://github.com/postcss/postcss-js
+[`sugarss`]: https://github.com/postcss/sugarss
+[`midas`]: https://github.com/ben-eb/midas
+
+## 文章
+
+* [一些你对 PostCSS 可能产生的误解](http://julian.io/some-things-you-may-think-about-postcss-and-you-might-be-wrong)
+* [PostCSS 究竟是什么,是做什么的](http://davidtheclark.com/its-time-for-everyone-to-learn-about-postcss)
+* [PostCSS 指南](http://webdesign.tutsplus.com/series/postcss-deep-dive--cms-889)
+
+你可以在 [awesome-postcss](https://github.com/jjaderg/awesome-postcss) 列表里找到更多优秀的文章和视频。
+
+## 书籍
+
+* Alex Libby, Packt 的 [网页设计之精通 PostCSS](https://www.packtpub.com/web-development/mastering-postcss-web-design) (2016年6月)
+
+## 使用方法
+
+你可以通过简单的两步便开始使用 PostCSS:
+
+1. 在你的构建工具中查找并添加 PostCSS 拓展。
+2. [选择插件]并将它们添加到你的 PostCSS 处理队列中。
+
+[选择插件]: http://postcss.parts
+
+### Webpack
+
+在 `webpack.config.js` 里使用 [`postcss-loader`] :
+
+```js
+module.exports = {
+ module: {
+ rules: [
+ {
+ test: /\.css$/,
+ exclude: /node_modules/,
+ use: [
+ {
+ loader: 'style-loader',
+ },
+ {
+ loader: 'css-loader',
+ options: {
+ importLoaders: 1,
+ }
+ },
+ {
+ loader: 'postcss-loader'
+ }
+ ]
+ }
+ ]
+ }
+}
+```
+
+然后创建 `postcss.config.js`:
+
+```js
+module.exports = {
+ plugins: [
+ require('precss'),
+ require('autoprefixer')
+ ]
+}
+```
+
+[`postcss-loader`]: https://github.com/postcss/postcss-loader
+
+### Gulp
+
+使用 [`gulp-postcss`] 和 [`gulp-sourcemaps`].
+
+```js
+gulp.task('css', function () {
+ var postcss = require('gulp-postcss');
+ var sourcemaps = require('gulp-sourcemaps');
+
+ return gulp.src('src/**/*.css')
+ .pipe( sourcemaps.init() )
+ .pipe( postcss([ require('precss'), require('autoprefixer') ]) )
+ .pipe( sourcemaps.write('.') )
+ .pipe( gulp.dest('build/') );
+});
+```
+
+[`gulp-sourcemaps`]: https://github.com/floridoo/gulp-sourcemaps
+[`gulp-postcss`]: https://github.com/postcss/gulp-postcss
+
+### npm run / CLI
+
+如果需要在你的命令行界面或 npm 脚本里使用 PostCSS,你可以使用 [`postcss-cli`]。
+
+```sh
+postcss --use autoprefixer -c options.json -o main.css css/*.css
+```
+
+[`postcss-cli`]: https://github.com/postcss/postcss-cli
+
+### 浏览器
+
+如果你想编译浏览器里的 CSS 字符串(例如像 CodePen 一样的在线编辑器),
+只需使用 [Browserify] 或 [webpack]。它们会把 PostCSS 和插件文件打包进一个独立文件。
+
+如果想要在 React 内联样式/JSS/Radium/其它 [CSS-in-JS] 里使用 PostCSS,
+你可以用 [`postcss-js`] 然后转换样式对象。
+
+```js
+var postcss = require('postcss-js');
+var prefixer = postcss.sync([ require('autoprefixer') ]);
+
+prefixer({ display: 'flex' }); //=> { display: ['-webkit-box', '-webkit-flex', '-ms-flexbox', 'flex'] }
+```
+
+[`postcss-js`]: https://github.com/postcss/postcss-js
+[Browserify]: http://browserify.org/
+[CSS-in-JS]: https://github.com/MicheleBertoli/css-in-js
+[webpack]: https://webpack.github.io/
+
+### 运行器
+
+* **Grunt**: [`grunt-postcss`](https://github.com/nDmitry/grunt-postcss)
+* **HTML**: [`posthtml-postcss`](https://github.com/posthtml/posthtml-postcss)
+* **Stylus**: [`poststylus`](https://github.com/seaneking/poststylus)
+* **Rollup**: [`rollup-plugin-postcss`](https://github.com/egoist/rollup-plugin-postcss)
+* **Brunch**: [`postcss-brunch`](https://github.com/brunch/postcss-brunch)
+* **Broccoli**: [`broccoli-postcss`](https://github.com/jeffjewiss/broccoli-postcss)
+* **Meteor**: [`postcss`](https://atmospherejs.com/juliancwirko/postcss)
+* **ENB**: [`enb-postcss`](https://github.com/awinogradov/enb-postcss)
+* **Taskr**: [`taskr-postcss`](https://github.com/lukeed/taskr/tree/master/packages/postcss)
+* **Start**: [`start-postcss`](https://github.com/start-runner/postcss)
+* **Connect/Express**: [`postcss-middleware`](https://github.com/jedmao/postcss-middleware)
+
+### JS API
+
+对于其它的应用环境,你可以使用 JS API:
+
+```js
+const fs = require('fs');
+const postcss = require('postcss');
+const precss = require('precss');
+const autoprefixer = require('autoprefixer');
+
+fs.readFile('src/app.css', (err, css) => {
+ postcss([precss, autoprefixer])
+ .process(css, { from: 'src/app.css', to: 'dest/app.css' })
+ .then(result => {
+ fs.writeFile('dest/app.css', result.css);
+ if ( result.map ) fs.writeFile('dest/app.css.map', result.map);
+ });
+});
+```
+
+阅读 [PostCSS API 文档] 获取更多有关 JS API 的信息.
+
+所有的 PostCSS 运行器应当通过 [PostCSS 运行器指南]。
+
+[PostCSS 运行器指南]: https://github.com/postcss/postcss/blob/master/docs/guidelines/runner.md
+[PostCSS API 文档]: http://api.postcss.org/postcss.html
+
+### 配置选项
+
+绝大多数 PostCSS 运行器接受两个参数:
+
+* 一个包含所需插件的数组
+* 一个配置选项的对象
+
+常见的选项:
+
+* `syntax`: 一个提供了语法解释器和 stringifier 的对象。
+* `parser`: 一个特殊的语法解释器(例如 [SCSS])。
+* `stringifier`: 一个特殊的语法 output 生成器(例如 [Midas])。
+* `map`: [source map 选项].
+* `from`: input 文件名称(大多数运行器自动设置了这个)。
+* `to`: output 文件名称(大多数运行器自动设置了这个)。
+
+[source map 选项]: https://github.com/postcss/postcss/blob/master/docs/source-maps.md
+[Midas]: https://github.com/ben-eb/midas
+[SCSS]: https://github.com/postcss/postcss-scss
+
+### Atom
+
+* [`language-postcss`] 添加了 PostCSS 和 [SugarSS] 代码高亮。
+* [`source-preview-postcss`] 在一个独立窗口里实时预览生成的 CSS。
+
+[SugarSS]: https://github.com/postcss/sugarss
+
+### Sublime Text
+
+* [`Syntax-highlighting-for-PostCSS`] 添加了 PostCSS 代码高亮。
+
+[`Syntax-highlighting-for-PostCSS`]: https://github.com/hudochenkov/Syntax-highlighting-for-PostCSS
+[`source-preview-postcss`]: https://atom.io/packages/source-preview-postcss
+[`language-postcss`]: https://atom.io/packages/language-postcss
+
+### Vim
+
+* [`postcss.vim`] 添加了 PostCSS 代码高亮。
+
+[`postcss.vim`]: https://github.com/stephenway/postcss.vim
+
+### WebStorm
+
+自 WebStorm 2016.3 开始,[提供了] 内建的 PostCSS 支持。
+
+[提供了]: https://blog.jetbrains.com/webstorm/2016/08/webstorm-2016-3-early-access-preview/
diff --git a/node_modules/postcss-reporter/node_modules/postcss/README.md b/node_modules/postcss-reporter/node_modules/postcss/README.md
new file mode 100644
index 00000000..05e6a9be
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/README.md
@@ -0,0 +1,376 @@
+# PostCSS [![Gitter][chat-img]][chat]
+
+<img align="right" width="95" height="95"
+ alt="Philosopher’s stone, logo of PostCSS"
+ src="http://postcss.github.io/postcss/logo.svg">
+
+[chat-img]: https://img.shields.io/badge/Gitter-Join_the_PostCSS_chat-brightgreen.svg
+[chat]: https://gitter.im/postcss/postcss
+
+PostCSS is a tool for transforming styles with JS plugins.
+These plugins can lint your CSS, support variables and mixins,
+transpile future CSS syntax, inline images, and more.
+
+PostCSS is used by industry leaders including Wikipedia, Twitter, Alibaba,
+and JetBrains. The [Autoprefixer] PostCSS plugin is one of the most popular
+CSS processors.
+
+PostCSS takes a CSS file and provides an API to analyze and modify its rules
+(by transforming them into an [Abstract Syntax Tree]).
+This API can then be used by [plugins] to do a lot of useful things,
+e.g. to find errors automatically insert vendor prefixes.
+
+**Support / Discussion:** [Gitter](https://gitter.im/postcss/postcss)<br>
+**Twitter account:** [@postcss](https://twitter.com/postcss)<br>
+**VK.com page:** [postcss](https://vk.com/postcss)<br>
+**中文翻译**: [`README-cn.md`](./README-cn.md)
+
+For PostCSS commercial support (consulting, improving the front-end culture
+of your company, PostCSS plugins), contact [Evil Martians](https://evilmartians.com/?utm_source=postcss)
+at <surrender@evilmartians.com>.
+
+[Abstract Syntax Tree]: https://en.wikipedia.org/wiki/Abstract_syntax_tree
+[Autoprefixer]: https://github.com/postcss/autoprefixer
+[plugins]: https://github.com/postcss/postcss#plugins
+
+<a href="https://evilmartians.com/?utm_source=postcss">
+ <img src="https://evilmartians.com/badges/sponsored-by-evil-martians.svg"
+ alt="Sponsored by Evil Martians" width="236" height="54">
+</a>
+
+## Plugins
+
+Currently, PostCSS has more than 200 plugins. You can find all of the plugins
+in the [plugins list] or in the [searchable catalog]. Below is a list
+of our favorite plugins — the best demonstrations of what can be built
+on top of PostCSS.
+
+If you have any new ideas, [PostCSS plugin development] is really easy.
+
+[searchable catalog]: http://postcss.parts
+[plugins list]: https://github.com/postcss/postcss/blob/master/docs/plugins.md
+
+### Solve Global CSS Problem
+
+* [`postcss-use`] allows you to explicitly set PostCSS plugins within CSS
+ and execute them only for the current file.
+* [`postcss-modules`] and [`react-css-modules`] automatically isolate
+ selectors within components.
+* [`postcss-autoreset`] is an alternative to using a global reset
+ that is better for isolatable components.
+* [`postcss-initial`] adds `all: initial` support, which resets
+ all inherited styles.
+* [`cq-prolyfill`] adds container query support, allowing styles that respond
+ to the width of the parent.
+
+### Use Future CSS, Today
+
+* [`autoprefixer`] adds vendor prefixes, using data from Can I Use.
+* [`postcss-preset-env`] allows you to use future CSS features today.
+
+### Better CSS Readability
+
+* [`precss`] contains plugins for Sass-like features, like variables, nesting,
+ and mixins.
+* [`postcss-sorting`] sorts the content of rules and at-rules.
+* [`postcss-utilities`] includes the most commonly used shortcuts and helpers.
+* [`short`] adds and extends numerous shorthand properties.
+
+### Images and Fonts
+
+* [`postcss-assets`] inserts image dimensions and inlines files.
+* [`postcss-sprites`] generates image sprites.
+* [`font-magician`] generates all the `@font-face` rules needed in CSS.
+* [`postcss-inline-svg`] allows you to inline SVG and customize its styles.
+* [`postcss-write-svg`] allows you to write simple SVG directly in your CSS.
+
+### Linters
+
+* [`stylelint`] is a modular stylesheet linter.
+* [`stylefmt`] is a tool that automatically formats CSS
+ according `stylelint` rules.
+* [`doiuse`] lints CSS for browser support, using data from Can I Use.
+* [`colorguard`] helps you maintain a consistent color palette.
+
+### Other
+
+* [`postcss-rtl`] combines both-directional (left-to-right and right-to-left) styles in one CSS file.
+* [`cssnano`] is a modular CSS minifier.
+* [`lost`] is a feature-rich `calc()` grid system.
+* [`rtlcss`] mirrors styles for right-to-left locales.
+
+[PostCSS plugin development]: https://github.com/postcss/postcss/blob/master/docs/writing-a-plugin.md
+[`postcss-inline-svg`]: https://github.com/TrySound/postcss-inline-svg
+[`postcss-preset-env`]: https://github.com/jonathantneal/postcss-preset-env
+[`react-css-modules`]: https://github.com/gajus/react-css-modules
+[`postcss-autoreset`]: https://github.com/maximkoretskiy/postcss-autoreset
+[`postcss-write-svg`]: https://github.com/jonathantneal/postcss-write-svg
+[`postcss-utilities`]: https://github.com/ismamz/postcss-utilities
+[`postcss-initial`]: https://github.com/maximkoretskiy/postcss-initial
+[`postcss-sprites`]: https://github.com/2createStudio/postcss-sprites
+[`postcss-modules`]: https://github.com/outpunk/postcss-modules
+[`postcss-sorting`]: https://github.com/hudochenkov/postcss-sorting
+[`postcss-assets`]: https://github.com/assetsjs/postcss-assets
+[`font-magician`]: https://github.com/jonathantneal/postcss-font-magician
+[`autoprefixer`]: https://github.com/postcss/autoprefixer
+[`cq-prolyfill`]: https://github.com/ausi/cq-prolyfill
+[`postcss-rtl`]: https://github.com/vkalinichev/postcss-rtl
+[`postcss-use`]: https://github.com/postcss/postcss-use
+[`css-modules`]: https://github.com/css-modules/css-modules
+[`colorguard`]: https://github.com/SlexAxton/css-colorguard
+[`stylelint`]: https://github.com/stylelint/stylelint
+[`stylefmt`]: https://github.com/morishitter/stylefmt
+[`cssnano`]: http://cssnano.co
+[`precss`]: https://github.com/jonathantneal/precss
+[`doiuse`]: https://github.com/anandthakker/doiuse
+[`rtlcss`]: https://github.com/MohammadYounes/rtlcss
+[`short`]: https://github.com/jonathantneal/postcss-short
+[`lost`]: https://github.com/peterramsing/lost
+
+## Syntaxes
+
+PostCSS can transform styles in any syntax, not just CSS.
+If there is not yet support for your favorite syntax,
+you can write a parser and/or stringifier to extend PostCSS.
+
+* [`sugarss`] is a indent-based syntax like Sass or Stylus.
+* [`postcss-syntax`] switch syntax automatically by file extensions.
+* [`postcss-html`] parsing styles in `<style>` tags of HTML-like files.
+* [`postcss-markdown`] parsing styles in code blocks of Markdown files.
+* [`postcss-jsx`] parsing CSS in template / object literals of source files.
+* [`postcss-styled`] parsing CSS in template literals of source files.
+* [`postcss-scss`] allows you to work with SCSS
+ *(but does not compile SCSS to CSS)*.
+* [`postcss-sass`] allows you to work with Sass
+ *(but does not compile Sass to CSS)*.
+* [`postcss-less`] allows you to work with Less
+ *(but does not compile LESS to CSS)*.
+* [`postcss-less-engine`] allows you to work with Less
+ *(and DOES compile LESS to CSS using true Less.js evaluation)*.
+* [`postcss-js`] allows you to write styles in JS or transform
+ React Inline Styles, Radium or JSS.
+* [`postcss-safe-parser`] finds and fixes CSS syntax errors.
+* [`midas`] converts a CSS string to highlighted HTML.
+
+[`postcss-less-engine`]: https://github.com/Crunch/postcss-less
+[`postcss-safe-parser`]: https://github.com/postcss/postcss-safe-parser
+[`postcss-syntax`]: https://github.com/gucong3000/postcss-syntax
+[`postcss-html`]: https://github.com/gucong3000/postcss-html
+[`postcss-markdown`]: https://github.com/gucong3000/postcss-markdown
+[`postcss-jsx`]: https://github.com/gucong3000/postcss-jsx
+[`postcss-styled`]: https://github.com/gucong3000/postcss-styled
+[`postcss-scss`]: https://github.com/postcss/postcss-scss
+[`postcss-sass`]: https://github.com/AleshaOleg/postcss-sass
+[`postcss-less`]: https://github.com/webschik/postcss-less
+[`postcss-js`]: https://github.com/postcss/postcss-js
+[`sugarss`]: https://github.com/postcss/sugarss
+[`midas`]: https://github.com/ben-eb/midas
+
+## Articles
+
+* [Some things you may think about PostCSS… and you might be wrong](http://julian.io/some-things-you-may-think-about-postcss-and-you-might-be-wrong)
+* [What PostCSS Really Is; What It Really Does](http://davidtheclark.com/its-time-for-everyone-to-learn-about-postcss)
+* [PostCSS Guides](http://webdesign.tutsplus.com/series/postcss-deep-dive--cms-889)
+
+More articles and videos you can find on [awesome-postcss](https://github.com/jjaderg/awesome-postcss) list.
+
+## Books
+
+* [Mastering PostCSS for Web Design](https://www.packtpub.com/web-development/mastering-postcss-web-design) by Alex Libby, Packt. (June 2016)
+
+## Usage
+
+You can start using PostCSS in just two steps:
+
+1. Find and add PostCSS extensions for your build tool.
+2. [Select plugins] and add them to your PostCSS process.
+
+[Select plugins]: http://postcss.parts
+
+### Webpack
+
+Use [`postcss-loader`] in `webpack.config.js`:
+
+```js
+module.exports = {
+ module: {
+ rules: [
+ {
+ test: /\.css$/,
+ exclude: /node_modules/,
+ use: [
+ {
+ loader: 'style-loader',
+ },
+ {
+ loader: 'css-loader',
+ options: {
+ importLoaders: 1,
+ }
+ },
+ {
+ loader: 'postcss-loader'
+ }
+ ]
+ }
+ ]
+ }
+}
+```
+
+Then create `postcss.config.js`:
+
+```js
+module.exports = {
+ plugins: [
+ require('precss'),
+ require('autoprefixer')
+ ]
+}
+```
+
+[`postcss-loader`]: https://github.com/postcss/postcss-loader
+
+### Gulp
+
+Use [`gulp-postcss`] and [`gulp-sourcemaps`].
+
+```js
+gulp.task('css', function () {
+ var postcss = require('gulp-postcss');
+ var sourcemaps = require('gulp-sourcemaps');
+
+ return gulp.src('src/**/*.css')
+ .pipe( sourcemaps.init() )
+ .pipe( postcss([ require('precss'), require('autoprefixer') ]) )
+ .pipe( sourcemaps.write('.') )
+ .pipe( gulp.dest('build/') );
+});
+```
+
+[`gulp-sourcemaps`]: https://github.com/floridoo/gulp-sourcemaps
+[`gulp-postcss`]: https://github.com/postcss/gulp-postcss
+
+### npm run / CLI
+
+To use PostCSS from your command-line interface or with npm scripts
+there is [`postcss-cli`].
+
+```sh
+postcss --use autoprefixer -c options.json -o main.css css/*.css
+```
+
+[`postcss-cli`]: https://github.com/postcss/postcss-cli
+
+### Browser
+
+If you want to compile CSS string in browser (for instance, in live edit
+tools like CodePen), just use [Browserify] or [webpack]. They will pack
+PostCSS and plugins files into a single file.
+
+To apply PostCSS plugins to React Inline Styles, JSS, Radium
+and other [CSS-in-JS], you can use [`postcss-js`] and transforms style objects.
+
+```js
+var postcss = require('postcss-js');
+var prefixer = postcss.sync([ require('autoprefixer') ]);
+
+prefixer({ display: 'flex' }); //=> { display: ['-webkit-box', '-webkit-flex', '-ms-flexbox', 'flex'] }
+```
+
+[`postcss-js`]: https://github.com/postcss/postcss-js
+[Browserify]: http://browserify.org/
+[CSS-in-JS]: https://github.com/MicheleBertoli/css-in-js
+[webpack]: https://webpack.github.io/
+
+### Runners
+
+* **Grunt**: [`grunt-postcss`](https://github.com/nDmitry/grunt-postcss)
+* **HTML**: [`posthtml-postcss`](https://github.com/posthtml/posthtml-postcss)
+* **Stylus**: [`poststylus`](https://github.com/seaneking/poststylus)
+* **Rollup**: [`rollup-plugin-postcss`](https://github.com/egoist/rollup-plugin-postcss)
+* **Brunch**: [`postcss-brunch`](https://github.com/brunch/postcss-brunch)
+* **Broccoli**: [`broccoli-postcss`](https://github.com/jeffjewiss/broccoli-postcss)
+* **Meteor**: [`postcss`](https://atmospherejs.com/juliancwirko/postcss)
+* **ENB**: [`enb-postcss`](https://github.com/awinogradov/enb-postcss)
+* **Taskr**: [`taskr-postcss`](https://github.com/lukeed/taskr/tree/master/packages/postcss)
+* **Start**: [`start-postcss`](https://github.com/start-runner/postcss)
+* **Connect/Express**: [`postcss-middleware`](https://github.com/jedmao/postcss-middleware)
+
+### JS API
+
+For other environments, you can use the JS API:
+
+```js
+const fs = require('fs');
+const postcss = require('postcss');
+const precss = require('precss');
+const autoprefixer = require('autoprefixer');
+
+fs.readFile('src/app.css', (err, css) => {
+ postcss([precss, autoprefixer])
+ .process(css, { from: 'src/app.css', to: 'dest/app.css' })
+ .then(result => {
+ fs.writeFile('dest/app.css', result.css, () => true);
+ if ( result.map ) {
+ fs.writeFile('dest/app.css.map', result.map, () => true);
+ }
+ });
+});
+```
+
+Read the [PostCSS API documentation] for more details about the JS API.
+
+All PostCSS runners should pass [PostCSS Runner Guidelines].
+
+[PostCSS Runner Guidelines]: https://github.com/postcss/postcss/blob/master/docs/guidelines/runner.md
+[PostCSS API documentation]: http://api.postcss.org/postcss.html
+
+### Options
+
+Most PostCSS runners accept two parameters:
+
+* An array of plugins.
+* An object of options.
+
+Common options:
+
+* `syntax`: an object providing a syntax parser and a stringifier.
+* `parser`: a special syntax parser (for example, [SCSS]).
+* `stringifier`: a special syntax output generator (for example, [Midas]).
+* `map`: [source map options].
+* `from`: the input file name (most runners set it automatically).
+* `to`: the output file name (most runners set it automatically).
+
+[source map options]: https://github.com/postcss/postcss/blob/master/docs/source-maps.md
+[Midas]: https://github.com/ben-eb/midas
+[SCSS]: https://github.com/postcss/postcss-scss
+
+## Editors & IDE Integration
+
+### Atom
+
+* [`language-postcss`] adds PostCSS and [SugarSS] highlight.
+* [`source-preview-postcss`] previews your output CSS in a separate, live pane.
+
+[SugarSS]: https://github.com/postcss/sugarss
+
+### Sublime Text
+
+* [`Syntax-highlighting-for-PostCSS`] adds PostCSS highlight.
+
+[`Syntax-highlighting-for-PostCSS`]: https://github.com/hudochenkov/Syntax-highlighting-for-PostCSS
+[`source-preview-postcss`]: https://atom.io/packages/source-preview-postcss
+[`language-postcss`]: https://atom.io/packages/language-postcss
+
+### Vim
+
+* [`postcss.vim`] adds PostCSS highlight.
+
+[`postcss.vim`]: https://github.com/stephenway/postcss.vim
+
+### WebStorm
+
+WebStorm 2016.3 [has] built-in PostCSS support.
+
+[has]: https://blog.jetbrains.com/webstorm/2016/08/webstorm-2016-3-early-access-preview/
diff --git a/node_modules/postcss-reporter/node_modules/postcss/docs/architecture.md b/node_modules/postcss-reporter/node_modules/postcss/docs/architecture.md
new file mode 100644
index 00000000..0a69dc88
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/docs/architecture.md
@@ -0,0 +1,156 @@
+## PostCSS Architecture
+
+General overview of PostCSS architecture.
+It can be useful for everyone who wish to contribute to core or develop better understanding of the tool.
+
+**Table of Contents**
+
+- [Overview](#overview)
+- [Workflow](#workflow)
+- [Core Structures](#core-structures)
+ * [Tokenizer](#tokenizer--libtokenizees6-)
+ * [Parser](#parser--libparsees6-libparseres6-)
+ * [Processor](#processor--libprocessores6-)
+ * [Stringifier](#stringifier--libstringifyes6-libstringifieres6-)
+- [API](#api-reference)
+
+### Overview
+
+> This section describes ideas lying behind PostCSS
+
+Before diving deeper into development of PostCSS let's briefly describe what is PostCSS and what is not.
+
+**PostCSS**
+
+- *is **NOT** a style preprocessor like `Sass` or `Less`.*
+
+ It does not define custom syntax and semantic, it's not actually a language.
+ PostCSS works with CSS and can be easily integrated with tools described above. That being said any valid CSS can be processed by PostCSS.
+
+- *is a tool for CSS syntax transformations*
+
+ It allows you to define custom CSS like syntax that could be understandable and transformed by plugins. That being said PostCSS is not strictly about CSS spec but about syntax definition manner of CSS. In such way you can define custom syntax constructs like at-rule, that could be very helpful for tools build around PostCSS. PostCSS plays a role of framework for building outstanding tools for CSS manipulations.
+
+- *is a big player in CSS ecosystem*
+
+ Large amount of lovely tools like `Autoprefixer`, `Stylelint`, `CSSnano` were built on PostCSS ecosystem. There is big chance that you already use it implicitly, just check your `node_modules` :smiley:
+
+### Workflow
+
+This is high level overview of whole PostCSS workflow
+
+<img width="300" src="https://upload.wikimedia.org/wikipedia/commons/thumb/a/aa/PostCSS_scheme.svg/512px-PostCSS_scheme.svg.png" alt="workflow">
+
+As you can see from diagram above, PostCSS architecture is pretty straightforward but some parts of it could be misunderstood.
+
+From diagram above you can see part called *Parser*, this construct will be described in details later on, just for now think about it as a structure that can understand your CSS like syntax and create object representation of it.
+
+That being said, there are few ways to write parser
+
+ - *Write a single file with string to AST transformation*
+
+ This method is quite popular, for example, the [Rework analyzer](https://github.com/reworkcss/css/blob/master/lib/parse/index.js) was written in this style. But with a large code base, the code becomes hard to read and pretty slow.
+
+ - *Split it into lexical analysis/parsing steps (source string → tokens → AST)*
+
+ This is the way of how we do it in PostCSS and also the most popular one.
+ A lot of parsers like [`Babylon` (parser behind Babel)](https://github.com/babel/babel/tree/master/packages/babylon), [`CSSTree`](https://github.com/csstree/csstree) were written in such way.
+ The main reasons to separate tokenization from parsing steps are performance and abstracting complexity.
+
+Let think about why second way is better for our needs.
+
+First of all because string to tokens step takes more time than parsing step. We operate on large source string and process it char by char, this is why it is very inefficient operation in terms of performance and we should perform it only once.
+
+But from other side tokens to AST transformation is logically more complex so with such separation we could write very fast tokenizer (but from this comes sometimes hard to read code) and easy to read (but slow) parser.
+
+Summing it up splitting in two steps improve performance and code readability.
+
+So now lets look more closely on structures that play main role in PostCSS workflow.
+
+### Core Structures
+
+ - #### Tokenizer ( [lib/tokenize.es6](https://github.com/postcss/postcss/blob/master/lib/tokenize.es6) )
+
+ Tokenizer (aka Lexer) plays important role in syntax analysis.
+
+ It accepts CSS string and returns list of tokens.
+
+ Token is a simple structure that describes some part of syntax like `at-rule`, `comment` or `word`. It can also contain positional information for more descriptive errors.
+
+ For example if we consider following css
+
+ ```css
+ .className { color: #FFF; }
+ ```
+
+ corresponding tokens representation from PostCSS will be
+ ```js
+ [
+ ["word", ".className", 1, 1, 1, 10]
+ ["space", " "]
+ ["{", "{", 1, 12]
+ ["space", " "]
+ ["word", "color", 1, 14, 1, 18]
+ [":", ":", 1, 19]
+ ["space", " "]
+ ["word", "#FFF" , 1, 21, 1, 23]
+ [";", ";", 1, 24]
+ ["space", " "]
+ ["}", "}", 1, 26]
+ ]
+ ```
+
+ As you can see from the example above single token represented as a list and also `space` token doesn't have positional information.
+
+ Lets look more closely on single token like `word`. As it was said each token represented as a list and follow such pattern.
+
+ ```js
+ const token = [
+ // represents token type
+ 'word',
+
+ // represents matched word
+ '.className',
+
+ // This two numbers represent start position of token.
+ // It's optional value as we saw in example above,
+ // tokens like `space` don't have such information.
+
+ // Here the first number is line number and the second one is corresponding column.
+ 1, 1,
+
+ // Next two numbers also optional and represent end position for multichar tokens like this one. Numbers follow same rule as was described above
+ 1, 10
+ ];
+ ```
+ There are many patterns how tokenization could be done, PostCSS motto is performance and simplicity. Tokenization is complex computing operation and take large amount of syntax analysis time ( ~90% ), that why PostCSS' Tokenizer looks dirty but it was optimized for speed. Any high-level constructs like classes could dramatically slow down tokenizer.
+
+ PostCSS' Tokenizer use some sort of streaming/chaining API where you exposes [`nextToken()`](https://github.com/postcss/postcss/blob/master/lib/tokenize.es6#L48-L308) method to Parser. In this manner we provide clean interface for Parser and reduce memory usage by storing only few tokens and not whole list of tokens.
+
+- #### Parser ( [lib/parse.es6](https://github.com/postcss/postcss/blob/master/lib/parse.es6), [lib/parser.es6](https://github.com/postcss/postcss/blob/master/lib/parser.es6) )
+
+ Parser is main structure that responsible for [syntax analysis](https://en.wikipedia.org/wiki/Parsing) of incoming CSS. Parser produces structure called [Abstract Syntax Tree (AST)](https://en.wikipedia.org/wiki/Abstract_syntax_tree) that could then be transformed by plugins later on.
+
+ Parser works in common with Tokenizer and operates over tokens not source string, as it would be very inefficient operation.
+
+ It use mostly `nextToken` and `back` methods provided by Tokenizer for obtaining single or multiple tokens and than construct part of AST called `Node`
+
+ There are multiple Node types that PostCSS could produce but all of them inherit from base Node [class](https://github.com/postcss/postcss/blob/master/lib/node.es6#L34).
+
+- #### Processor ( [lib/processor.es6](https://github.com/postcss/postcss/blob/master/lib/processor.es6) )
+
+ Processor is a very plain structure that initializes plugins and run syntax transformations. Plugin is just a function registered with [postcss.plugin](https://github.com/postcss/postcss/blob/master/lib/postcss.es6#L109) call.
+
+ It exposes quite few public API methods. Description of them could be found on [api.postcss.org/Processor](http://api.postcss.org/Processor.html)
+
+- #### Stringifier ( [lib/stringify.es6](https://github.com/postcss/postcss/blob/master/lib/stringify.es6), [lib/stringifier.es6](https://github.com/postcss/postcss/blob/master/lib/stringifier.es6) )
+
+ Stringifier is a base class that translates modified AST to pure CSS string. Stringifier traverse AST starting from provided Node and generate raw string representation of it calling corresponding methods.
+
+ The most essential method is [`Stringifier.stringify`](https://github.com/postcss/postcss/blob/master/lib/stringifier.es6#L25-L27)
+ that accepts initial Node and semicolon indicator.
+ You can learn more by checking [stringifier.es6](https://github.com/postcss/postcss/blob/master/lib/stringifier.es6)
+
+### API Reference
+
+More descriptive API documentation could be found [here](http://api.postcss.org/)
diff --git a/node_modules/postcss-reporter/node_modules/postcss/docs/guidelines/plugin.md b/node_modules/postcss-reporter/node_modules/postcss/docs/guidelines/plugin.md
new file mode 100644
index 00000000..4814b0fa
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/docs/guidelines/plugin.md
@@ -0,0 +1,195 @@
+# PostCSS Plugin Guidelines
+
+A PostCSS plugin is a function that receives and, usually,
+transforms a CSS AST from the PostCSS parser.
+
+The rules below are *mandatory* for all PostCSS plugins.
+
+See also [ClojureWerkz’s recommendations] for open source projects.
+
+[ClojureWerkz’s recommendations]: http://blog.clojurewerkz.org/blog/2013/04/20/how-to-make-your-open-source-project-really-awesome/
+
+## 1. API
+
+### 1.1 Clear name with `postcss-` prefix
+
+The plugin’s purpose should be clear just by reading its name.
+If you wrote a transpiler for CSS 4 Custom Media, `postcss-custom-media`
+would be a good name. If you wrote a plugin to support mixins,
+`postcss-mixins` would be a good name.
+
+The prefix `postcss-` shows that the plugin is part of the PostCSS ecosystem.
+
+This rule is not mandatory for plugins that can run as independent tools,
+without the user necessarily knowing that it is powered by
+PostCSS — for example, [cssnext] and [Autoprefixer].
+
+[Autoprefixer]: https://github.com/postcss/autoprefixer
+[cssnext]: http://cssnext.io/
+
+### 1.2. Do one thing, and do it well
+
+Do not create multitool plugins. Several small, one-purpose plugins bundled into
+a plugin pack is usually a better solution.
+
+For example, [cssnext] contains many small plugins,
+one for each W3C specification. And [cssnano] contains a separate plugin
+for each of its optimization.
+
+[cssnext]: http://cssnext.io/
+[cssnano]: https://github.com/ben-eb/cssnano
+
+### 1.3. Do not use mixins
+
+Preprocessors libraries like Compass provide an API with mixins.
+
+PostCSS plugins are different.
+A plugin cannot be just a set of mixins for [postcss-mixins].
+
+To achieve your goal, consider transforming valid CSS
+or using custom at-rules and custom properties.
+
+[postcss-mixins]: https://github.com/postcss/postcss-mixins
+
+### 1.4. Create plugin by `postcss.plugin`
+
+By wrapping your function in this method,
+you are hooking into a common plugin API:
+
+```js
+module.exports = postcss.plugin('plugin-name', function (opts) {
+ return function (root, result) {
+ // Plugin code
+ };
+});
+```
+
+## 2. Processing
+
+### 2.1. Plugin must be tested
+
+A CI service like [Travis] is also recommended for testing code in
+different environments. You should test in (at least) Node.js [active LTS](https://github.com/nodejs/LTS) and current stable version.
+
+[Travis]: https://travis-ci.org/
+
+### 2.2. Use asynchronous methods whenever possible
+
+For example, use `fs.writeFile` instead of `fs.writeFileSync`:
+
+```js
+postcss.plugin('plugin-sprite', function (opts) {
+ return function (root, result) {
+
+ return new Promise(function (resolve, reject) {
+ var sprite = makeSprite();
+ fs.writeFile(opts.file, function (err) {
+ if ( err ) return reject(err);
+ resolve();
+ })
+ });
+
+ };
+});
+```
+
+### 2.3. Set `node.source` for new nodes
+
+Every node must have a relevant `source` so PostCSS can generate
+an accurate source map.
+
+So if you add new declaration based on some existing declaration, you should
+clone the existing declaration in order to save that original `source`.
+
+```js
+if ( needPrefix(decl.prop) ) {
+ decl.cloneBefore({ prop: '-webkit-' + decl.prop });
+}
+```
+
+You can also set `source` directly, copying from some existing node:
+
+```js
+if ( decl.prop === 'animation' ) {
+ var keyframe = createAnimationByName(decl.value);
+ keyframes.source = decl.source;
+ decl.root().append(keyframes);
+}
+```
+
+### 2.4. Use only the public PostCSS API
+
+PostCSS plugins must not rely on undocumented properties or methods,
+which may be subject to change in any minor release. The public API
+is described in [API docs].
+
+[API docs]: http://api.postcss.org/
+
+## 3. Errors
+
+### 3.1. Use `node.error` on CSS relevant errors
+
+If you have an error because of input CSS (like an unknown name
+in a mixin plugin) you should use `node.error` to create an error
+that includes source position:
+
+```js
+if ( typeof mixins[name] === 'undefined' ) {
+ throw decl.error('Unknown mixin ' + name, { plugin: 'postcss-mixins' });
+}
+```
+
+### 3.2. Use `result.warn` for warnings
+
+Do not print warnings with `console.log` or `console.warn`,
+because some PostCSS runner may not allow console output.
+
+```js
+if ( outdated(decl.prop) ) {
+ result.warn(decl.prop + ' is outdated', { node: decl });
+}
+```
+
+If CSS input is a source of the warning, the plugin must set the `node` option.
+
+## 4. Documentation
+
+### 4.1. Document your plugin in English
+
+PostCSS plugins must have their `README.md` written in English. Do not be afraid
+of your English skills, as the open source community will fix your errors.
+
+Of course, you are welcome to write documentation in other languages;
+just name them appropriately (e.g. `README.ja.md`).
+
+### 4.2. Include input and output examples
+
+The plugin's `README.md` must contain example input and output CSS.
+A clear example is the best way to describe how your plugin works.
+
+The first section of the `README.md` is a good place to put examples.
+See [postcss-opacity](https://github.com/iamvdo/postcss-opacity) for an example.
+
+Of course, this guideline does not apply if your plugin does not
+transform the CSS.
+
+### 4.3. Maintain a changelog
+
+PostCSS plugins must describe the changes of all their releases
+in a separate file, such as `CHANGELOG.md`, `History.md`, or [GitHub Releases].
+Visit [Keep A Changelog] for more information about how to write one of these.
+
+Of course, you should be using [SemVer].
+
+[Keep A Changelog]: http://keepachangelog.com/
+[GitHub Releases]: https://help.github.com/articles/creating-releases/
+[SemVer]: http://semver.org/
+
+### 4.4. Include `postcss-plugin` keyword in `package.json`
+
+PostCSS plugins written for npm must have the `postcss-plugin` keyword
+in their `package.json`. This special keyword will be useful for feedback about
+the PostCSS ecosystem.
+
+For packages not published to npm, this is not mandatory, but is recommended
+if the package format can contain keywords.
diff --git a/node_modules/postcss-reporter/node_modules/postcss/docs/guidelines/runner.md b/node_modules/postcss-reporter/node_modules/postcss/docs/guidelines/runner.md
new file mode 100644
index 00000000..83f20873
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/docs/guidelines/runner.md
@@ -0,0 +1,143 @@
+# PostCSS Runner Guidelines
+
+A PostCSS runner is a tool that processes CSS through a user-defined list
+of plugins; for example, [`postcss-cli`] or [`gulp‑postcss`].
+These rules are mandatory for any such runners.
+
+For single-plugin tools, like [`gulp-autoprefixer`],
+these rules are not mandatory but are highly recommended.
+
+See also [ClojureWerkz’s recommendations] for open source projects.
+
+[ClojureWerkz’s recommendations]: http://blog.clojurewerkz.org/blog/2013/04/20/how-to-make-your-open-source-project-really-awesome/
+[`gulp-autoprefixer`]: https://github.com/sindresorhus/gulp-autoprefixer
+[`gulp‑postcss`]: https://github.com/w0rm/gulp-postcss
+[`postcss-cli`]: https://github.com/postcss/postcss-cli
+
+## 1. API
+
+### 1.1. Accept functions in plugin parameters
+
+If your runner uses a config file, it must be written in JavaScript, so that
+it can support plugins which accept a function, such as [`postcss-assets`]:
+
+```js
+module.exports = [
+ require('postcss-assets')({
+ cachebuster: function (file) {
+ return fs.statSync(file).mtime.getTime().toString(16);
+ }
+ })
+];
+```
+
+[`postcss-assets`]: https://github.com/borodean/postcss-assets
+
+## 2. Processing
+
+### 2.1. Set `from` and `to` processing options
+
+To ensure that PostCSS generates source maps and displays better syntax errors,
+runners must specify the `from` and `to` options. If your runner does not handle
+writing to disk (for example, a gulp transform), you should set both options
+to point to the same file:
+
+```js
+processor.process({ from: file.path, to: file.path });
+```
+
+### 2.2. Use only the asynchronous API
+
+PostCSS runners must use only the asynchronous API.
+The synchronous API is provided only for debugging, is slower,
+and can’t work with asynchronous plugins.
+
+```js
+processor.process(opts).then(function (result) {
+ // processing is finished
+});
+```
+
+### 2.3. Use only the public PostCSS API
+
+PostCSS runners must not rely on undocumented properties or methods,
+which may be subject to change in any minor release. The public API
+is described in [API docs].
+
+[API docs]: http://api.postcss.org/
+
+## 3. Output
+
+### 3.1. Don’t show JS stack for `CssSyntaxError`
+
+PostCSS runners must not show a stack trace for CSS syntax errors,
+as the runner can be used by developers who are not familiar with JavaScript.
+Instead, handle such errors gracefully:
+
+```js
+processor.process(opts).catch(function (error) {
+ if ( error.name === 'CssSyntaxError' ) {
+ process.stderr.write(error.message + error.showSourceCode());
+ } else {
+ throw error;
+ }
+});
+```
+
+### 3.2. Display `result.warnings()`
+
+PostCSS runners must output warnings from `result.warnings()`:
+
+```js
+result.warnings().forEach(function (warn) {
+ process.stderr.write(warn.toString());
+});
+```
+
+See also [postcss-log-warnings] and [postcss-messages] plugins.
+
+[postcss-log-warnings]: https://github.com/davidtheclark/postcss-log-warnings
+[postcss-messages]: https://github.com/postcss/postcss-messages
+
+### 3.3. Allow the user to write source maps to different files
+
+PostCSS by default will inline source maps in the generated file; however,
+PostCSS runners must provide an option to save the source map in a different
+file:
+
+```js
+if ( result.map ) {
+ fs.writeFile(opts.to + '.map', result.map.toString());
+}
+```
+
+## 4. Documentation
+
+### 4.1. Document your runner in English
+
+PostCSS runners must have their `README.md` written in English. Do not be afraid
+of your English skills, as the open source community will fix your errors.
+
+Of course, you are welcome to write documentation in other languages;
+just name them appropriately (e.g. `README.ja.md`).
+
+### 4.2. Maintain a changelog
+
+PostCSS runners must describe changes of all releases in a separate file,
+such as `ChangeLog.md`, `History.md`, or with [GitHub Releases].
+Visit [Keep A Changelog] for more information on how to write one of these.
+
+Of course you should use [SemVer].
+
+[Keep A Changelog]: http://keepachangelog.com/
+[GitHub Releases]: https://help.github.com/articles/creating-releases/
+[SemVer]: http://semver.org/
+
+### 4.3. `postcss-runner` keyword in `package.json`
+
+PostCSS runners written for npm must have the `postcss-runner` keyword
+in their `package.json`. This special keyword will be useful for feedback about
+the PostCSS ecosystem.
+
+For packages not published to npm, this is not mandatory, but recommended
+if the package format is allowed to contain keywords.
diff --git a/node_modules/postcss-reporter/node_modules/postcss/docs/source-maps.md b/node_modules/postcss-reporter/node_modules/postcss/docs/source-maps.md
new file mode 100644
index 00000000..259cd084
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/docs/source-maps.md
@@ -0,0 +1,74 @@
+# PostCSS and Source Maps
+
+PostCSS has great [source maps] support. It can read and interpret maps
+from previous transformation steps, autodetect the format that you expect,
+and output both external and inline maps.
+
+To ensure that you generate an accurate source map, you must indicate the input
+and output CSS file paths — using the options `from` and `to`, respectively.
+
+To generate a new source map with the default options, simply set `map: true`.
+This will generate an inline source map that contains the source content.
+If you don’t want the map inlined, you can set `map.inline: false`.
+
+```js
+processor
+ .process(css, {
+ from: 'app.sass.css',
+ to: 'app.css',
+ map: { inline: false },
+ })
+ .then(function (result) {
+ result.map //=> '{ "version":3,
+ // "file":"app.css",
+ // "sources":["app.sass"],
+ // "mappings":"AAAA,KAAI" }'
+ });
+```
+
+If PostCSS finds source maps from a previous transformation,
+it will automatically update that source map with the same options.
+
+## Options
+
+If you want more control over source map generation, you can define the `map`
+option as an object with the following parameters:
+
+* `inline` boolean: indicates that the source map should be embedded
+ in the output CSS as a Base64-encoded comment. By default, it is `true`.
+ But if all previous maps are external, not inline, PostCSS will not embed
+ the map even if you do not set this option.
+
+ If you have an inline source map, the `result.map` property will be empty,
+ as the source map will be contained within the text of `result.css`.
+
+* `prev` string, object, boolean or function: source map content from
+ a previous processing step (for example, Sass compilation).
+ PostCSS will try to read the previous source map automatically
+ (based on comments within the source CSS), but you can use this option
+ to identify it manually. If desired, you can omit the previous map
+ with `prev: false`.
+
+* `sourcesContent` boolean: indicates that PostCSS should set the origin
+ content (for example, Sass source) of the source map. By default,
+ it is `true`. But if all previous maps do not contain sources content,
+ PostCSS will also leave it out even if you do not set this option.
+
+* `annotation` boolean or string: indicates that PostCSS should add annotation
+ comments to the CSS. By default, PostCSS will always add a comment with a path
+ to the source map. PostCSS will not add annotations to CSS files that
+ do not contain any comments.
+
+ By default, PostCSS presumes that you want to save the source map as
+ `opts.to + '.map'` and will use this path in the annotation comment.
+ A different path can be set by providing a string value for `annotation`.
+
+ If you have set `inline: true`, annotation cannot be disabled.
+
+* `from` string: by default, PostCSS will set the `sources` property of the map
+ to the value of the `from` option. If you want to override this behaviour, you
+ can use `map.from` to explicitly set the source map's `sources` property.
+ Path should be absolute or relative from generated file
+ (`to` option in `process()` method).
+
+[source maps]: http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/
diff --git a/node_modules/postcss-reporter/node_modules/postcss/docs/syntax.md b/node_modules/postcss-reporter/node_modules/postcss/docs/syntax.md
new file mode 100644
index 00000000..2e79c2d6
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/docs/syntax.md
@@ -0,0 +1,231 @@
+# How to Write Custom Syntax
+
+PostCSS can transform styles in any syntax, and is not limited to just CSS.
+By writing a custom syntax, you can transform styles in any desired format.
+
+Writing a custom syntax is much harder than writing a PostCSS plugin, but
+it is an awesome adventure.
+
+There are 3 types of PostCSS syntax packages:
+
+* **Parser** to parse input string to node’s tree.
+* **Stringifier** to generate output string by node’s tree.
+* **Syntax** contains both parser and stringifier.
+
+## Syntax
+
+A good example of a custom syntax is [SCSS]. Some users may want to transform
+SCSS sources with PostCSS plugins, for example if they need to add vendor
+prefixes or change the property order. So this syntax should output SCSS from
+an SCSS input.
+
+The syntax API is a very simple plain object, with `parse` & `stringify`
+functions:
+
+```js
+module.exports = {
+ parse: require('./parse'),
+ stringify: require('./stringify')
+};
+```
+
+[SCSS]: https://github.com/postcss/postcss-scss
+
+## Parser
+
+A good example of a parser is [Safe Parser], which parses malformed/broken CSS.
+Because there is no point to generate broken output, this package only provides
+a parser.
+
+The parser API is a function which receives a string & returns a [`Root`] node.
+The second argument is a function which receives an object with PostCSS options.
+
+```js
+var postcss = require('postcss');
+
+module.exports = function (css, opts) {
+ var root = postcss.root();
+ // Add other nodes to root
+ return root;
+};
+```
+
+[Safe Parser]: https://github.com/postcss/postcss-safe-parser
+[`Root`]: http://api.postcss.org/Root.html
+
+### Main Theory
+
+There are many books about parsers; but do not worry because CSS syntax is
+very easy, and so the parser will be much simpler than a programming language
+parser.
+
+The default PostCSS parser contains two steps:
+
+1. [Tokenizer] which reads input string character by character and builds a
+ tokens array. For example, it joins space symbols to a `['space', '\n ']`
+ token, and detects strings to a `['string', '"\"{"']` token.
+2. [Parser] which reads the tokens array, creates node instances and
+ builds a tree.
+
+[Tokenizer]: https://github.com/postcss/postcss/blob/master/lib/tokenize.es6
+[Parser]: https://github.com/postcss/postcss/blob/master/lib/parser.es6
+
+### Performance
+
+Parsing input is often the most time consuming task in CSS processors. So it
+is very important to have a fast parser.
+
+The main rule of optimization is that there is no performance without a
+benchmark. You can look at [PostCSS benchmarks] to build your own.
+
+Of parsing tasks, the tokenize step will often take the most time, so its
+performance should be prioritized. Unfortunately, classes, functions and
+high level structures can slow down your tokenizer. Be ready to write dirty
+code with repeated statements. This is why it is difficult to extend the
+default [PostCSS tokenizer]; copy & paste will be a necessary evil.
+
+Second optimization is using character codes instead of strings.
+
+```js
+// Slow
+string[i] === '{';
+
+// Fast
+const OPEN_CURLY = 123; // `{'
+string.charCodeAt(i) === OPEN_CURLY;
+```
+
+Third optimization is “fast jumps”. If you find open quotes, you can find
+next closing quote much faster by `indexOf`:
+
+```js
+// Simple jump
+next = string.indexOf('"', currentPosition + 1);
+
+// Jump by RegExp
+regexp.lastIndex = currentPosion + 1;
+regexp.test(string);
+next = regexp.lastIndex;
+```
+
+The parser can be a well written class. There is no need in copy-paste and
+hardcore optimization there. You can extend the default [PostCSS parser].
+
+[PostCSS benchmarks]: https://github.com/postcss/benchmark
+[PostCSS tokenizer]: https://github.com/postcss/postcss/blob/master/lib/tokenize.es6
+[PostCSS parser]: https://github.com/postcss/postcss/blob/master/lib/parser.es6
+
+### Node Source
+
+Every node should have `source` property to generate correct source map.
+This property contains `start` and `end` properties with `{ line, column }`,
+and `input` property with an [`Input`] instance.
+
+Your tokenizer should save the original position so that you can propagate
+the values to the parser, to ensure that the source map is correctly updated.
+
+[`Input`]: https://github.com/postcss/postcss/blob/master/lib/input.es6
+
+### Raw Values
+
+A good PostCSS parser should provide all information (including spaces symbols)
+to generate byte-to-byte equal output. It is not so difficult, but respectful
+for user input and allow integration smoke tests.
+
+A parser should save all additional symbols to `node.raws` object.
+It is an open structure for you, you can add additional keys.
+For example, [SCSS parser] saves comment types (`/* */` or `//`)
+in `node.raws.inline`.
+
+The default parser cleans CSS values from comments and spaces.
+It saves the original value with comments to `node.raws.value.raw` and uses it,
+if the node value was not changed.
+
+[SCSS parser]: https://github.com/postcss/postcss-scss
+
+### Tests
+
+Of course, all parsers in the PostCSS ecosystem must have tests.
+
+If your parser just extends CSS syntax (like [SCSS] or [Safe Parser]),
+you can use the [PostCSS Parser Tests]. It contains unit & integration tests.
+
+[PostCSS Parser Tests]: https://github.com/postcss/postcss-parser-tests
+
+## Stringifier
+
+A style guide generator is a good example of a stringifier. It generates output
+HTML which contains CSS components. For this use case, a parser isn't necessary,
+so the package should just contain a stringifier.
+
+The Stringifier API is little bit more complicated, than the parser API.
+PostCSS generates a source map, so a stringifier can’t just return a string.
+It must link every substring with its source node.
+
+A Stringifier is a function which receives [`Root`] node and builder callback.
+Then it calls builder with every node’s string and node instance.
+
+```js
+module.exports = function (root, builder) {
+ // Some magic
+ var string = decl.prop + ':' + decl.value + ';';
+ builder(string, decl);
+ // Some science
+};
+```
+
+### Main Theory
+
+PostCSS [default stringifier] is just a class with a method for each node type
+and many methods to detect raw properties.
+
+In most cases it will be enough just to extend this class,
+like in [SCSS stringifier].
+
+[default stringifier]: https://github.com/postcss/postcss/blob/master/lib/stringifier.es6
+[SCSS stringifier]: https://github.com/postcss/postcss-scss/blob/master/lib/scss-stringifier.es6
+
+### Builder Function
+
+A builder function will be passed to `stringify` function as second argument.
+For example, the default PostCSS stringifier class saves it
+to `this.builder` property.
+
+Builder receives output substring and source node to append this substring
+to the final output.
+
+Some nodes contain other nodes in the middle. For example, a rule has a `{`
+at the beginning, many declarations inside and a closing `}`.
+
+For these cases, you should pass a third argument to builder function:
+`'start'` or `'end'` string:
+
+```js
+this.builder(rule.selector + '{', rule, 'start');
+// Stringify declarations inside
+this.builder('}', rule, 'end');
+```
+
+### Raw Values
+
+A good PostCSS custom syntax saves all symbols and provide byte-to-byte equal
+output if there were no changes.
+
+This is why every node has `node.raws` object to store space symbol, etc.
+
+Be careful, because sometimes these raw properties will not be present; some
+nodes may be built manually, or may lose their indentation when they are moved
+to another parent node.
+
+This is why the default stringifier has a `raw()` method to autodetect raw
+properties by other nodes. For example, it will look at other nodes to detect
+indent size and them multiply it with the current node depth.
+
+### Tests
+
+A stringifier must have tests too.
+
+You can use unit and integration test cases from [PostCSS Parser Tests].
+Just compare input CSS with CSS after your parser and stringifier.
+
+[PostCSS Parser Tests]: https://github.com/postcss/postcss-parser-tests
diff --git a/node_modules/postcss-reporter/node_modules/postcss/gulpfile.js b/node_modules/postcss-reporter/node_modules/postcss/gulpfile.js
new file mode 100644
index 00000000..4efd1f61
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/gulpfile.js
@@ -0,0 +1,97 @@
+'use strict';
+
+const gulp = require('gulp');
+
+gulp.task('clean', () => {
+ let del = require('del');
+ return del(['lib/*.js', 'postcss.js', 'build/', 'api/']);
+});
+
+// Build
+
+gulp.task('compile', () => {
+ let sourcemaps = require('gulp-sourcemaps');
+ let changed = require('gulp-changed');
+ let babel = require('gulp-babel');
+ return gulp.src('lib/*.es6')
+ .pipe(changed('lib', { extension: '.js' }))
+ .pipe(sourcemaps.init())
+ .pipe(babel({
+ presets: [
+ [
+ 'env',
+ {
+ targets: {
+ browsers: 'last 2 version',
+ node: 4
+ },
+ loose: true
+ }
+ ]
+ ],
+ plugins: ['add-module-exports', 'precompile-charcodes']
+ }))
+ .pipe(sourcemaps.write())
+ .pipe(gulp.dest('lib'));
+});
+
+gulp.task('build:lib', ['compile'], () => {
+ return gulp.src(['lib/*.js', 'lib/*.d.ts']).pipe(gulp.dest('build/lib'));
+});
+
+gulp.task('build:package', () => {
+ const editor = require('gulp-json-editor');
+ return gulp.src('./package.json')
+ .pipe(editor((json) => {
+ delete json.babel;
+ delete json.scripts;
+ delete json.jest;
+ delete json.eslintConfig;
+ delete json['size-limit'];
+ delete json['pre-commit'];
+ delete json['lint-staged'];
+ delete json.devDependencies;
+ return json;
+ }))
+ .pipe(gulp.dest('build'));
+});
+
+gulp.task('build:docs', () => {
+ let ignore = require('fs').readFileSync('.npmignore').toString()
+ .trim().split(/\n+/)
+ .concat([
+ 'package.json', '.npmignore', 'lib/*', 'test/*',
+ 'node_modules/**/*', 'docs/api.md', 'docs/plugins.md',
+ 'docs/writing-a-plugin.md'
+ ]).map( i => '!' + i );
+ return gulp.src(['**/*'].concat(ignore))
+ .pipe(gulp.dest('build'));
+});
+
+gulp.task('build', done => {
+ let runSequence = require('run-sequence');
+ runSequence('clean', ['build:lib', 'build:docs', 'build:package'], done);
+});
+
+// Tests
+
+gulp.task('integration', ['build'], done => {
+ let postcss = require('./build');
+ let real = require('postcss-parser-tests/real');
+ real(done, css => {
+ return postcss.parse(css).toResult({ map: { annotation: false } });
+ });
+});
+
+gulp.task('version', ['build:lib'], () => {
+ let Processor = require('./lib/processor');
+ let instance = new Processor();
+ let pkg = require('./package');
+ if ( pkg.version !== instance.version ) {
+ throw new Error('Version in Processor is not equal to package.json');
+ }
+});
+
+// Common
+
+gulp.task('default', ['version', 'integration']);
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/at-rule.js b/node_modules/postcss-reporter/node_modules/postcss/lib/at-rule.js
new file mode 100644
index 00000000..dd2e6168
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/at-rule.js
@@ -0,0 +1,131 @@
+'use strict';
+
+exports.__esModule = true;
+
+var _container = require('./container');
+
+var _container2 = _interopRequireDefault(_container);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+/**
+ * Represents an at-rule.
+ *
+ * If it’s followed in the CSS by a {} block, this node will have
+ * a nodes property representing its children.
+ *
+ * @extends Container
+ *
+ * @example
+ * const root = postcss.parse('@charset "UTF-8"; @media print {}');
+ *
+ * const charset = root.first;
+ * charset.type //=> 'atrule'
+ * charset.nodes //=> undefined
+ *
+ * const media = root.last;
+ * media.nodes //=> []
+ */
+var AtRule = function (_Container) {
+ _inherits(AtRule, _Container);
+
+ function AtRule(defaults) {
+ _classCallCheck(this, AtRule);
+
+ var _this = _possibleConstructorReturn(this, _Container.call(this, defaults));
+
+ _this.type = 'atrule';
+ return _this;
+ }
+
+ AtRule.prototype.append = function append() {
+ var _Container$prototype$;
+
+ if (!this.nodes) this.nodes = [];
+
+ for (var _len = arguments.length, children = Array(_len), _key = 0; _key < _len; _key++) {
+ children[_key] = arguments[_key];
+ }
+
+ return (_Container$prototype$ = _Container.prototype.append).call.apply(_Container$prototype$, [this].concat(children));
+ };
+
+ AtRule.prototype.prepend = function prepend() {
+ var _Container$prototype$2;
+
+ if (!this.nodes) this.nodes = [];
+
+ for (var _len2 = arguments.length, children = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+ children[_key2] = arguments[_key2];
+ }
+
+ return (_Container$prototype$2 = _Container.prototype.prepend).call.apply(_Container$prototype$2, [this].concat(children));
+ };
+
+ /**
+ * @memberof AtRule#
+ * @member {string} name - the at-rule’s name immediately follows the `@`
+ *
+ * @example
+ * const root = postcss.parse('@media print {}');
+ * media.name //=> 'media'
+ * const media = root.first;
+ */
+
+ /**
+ * @memberof AtRule#
+ * @member {string} params - the at-rule’s parameters, the values
+ * that follow the at-rule’s name but precede
+ * any {} block
+ *
+ * @example
+ * const root = postcss.parse('@media print, screen {}');
+ * const media = root.first;
+ * media.params //=> 'print, screen'
+ */
+
+ /**
+ * @memberof AtRule#
+ * @member {object} raws - Information to generate byte-to-byte equal
+ * node string as it was in the origin input.
+ *
+ * Every parser saves its own properties,
+ * but the default CSS parser uses:
+ *
+ * * `before`: the space symbols before the node. It also stores `*`
+ * and `_` symbols before the declaration (IE hack).
+ * * `after`: the space symbols after the last child of the node
+ * to the end of the node.
+ * * `between`: the symbols between the property and value
+ * for declarations, selector and `{` for rules, or last parameter
+ * and `{` for at-rules.
+ * * `semicolon`: contains true if the last child has
+ * an (optional) semicolon.
+ * * `afterName`: the space between the at-rule name and its parameters.
+ *
+ * PostCSS cleans at-rule parameters from comments and extra spaces,
+ * but it stores origin content in raws properties.
+ * As such, if you don’t change a declaration’s value,
+ * PostCSS will use the raw value with comments.
+ *
+ * @example
+ * const root = postcss.parse(' @media\nprint {\n}')
+ * root.first.first.raws //=> { before: ' ',
+ * // between: ' ',
+ * // afterName: '\n',
+ * // after: '\n' }
+ */
+
+
+ return AtRule;
+}(_container2.default);
+
+exports.default = AtRule;
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImF0LXJ1bGUuZXM2Il0sIm5hbWVzIjpbIkF0UnVsZSIsImRlZmF1bHRzIiwidHlwZSIsImFwcGVuZCIsIm5vZGVzIiwiY2hpbGRyZW4iLCJwcmVwZW5kIiwiQ29udGFpbmVyIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7Ozs7Ozs7Ozs7OztBQUVBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7SUFrQk1BLE07OztBQUVGLGtCQUFZQyxRQUFaLEVBQXNCO0FBQUE7O0FBQUEsaURBQ2xCLHNCQUFNQSxRQUFOLENBRGtCOztBQUVsQixVQUFLQyxJQUFMLEdBQVksUUFBWjtBQUZrQjtBQUdyQjs7bUJBRURDLE0scUJBQW9CO0FBQUE7O0FBQ2hCLFFBQUssQ0FBQyxLQUFLQyxLQUFYLEVBQW1CLEtBQUtBLEtBQUwsR0FBYSxFQUFiOztBQURILHNDQUFWQyxRQUFVO0FBQVZBLGNBQVU7QUFBQTs7QUFFaEIsV0FBTyw4Q0FBTUYsTUFBTixrREFBZ0JFLFFBQWhCLEVBQVA7QUFDSCxHOzttQkFFREMsTyxzQkFBcUI7QUFBQTs7QUFDakIsUUFBSyxDQUFDLEtBQUtGLEtBQVgsRUFBbUIsS0FBS0EsS0FBTCxHQUFhLEVBQWI7O0FBREYsdUNBQVZDLFFBQVU7QUFBVkEsY0FBVTtBQUFBOztBQUVqQixXQUFPLCtDQUFNQyxPQUFOLG1EQUFpQkQsUUFBakIsRUFBUDtBQUNILEc7O0FBRUQ7Ozs7Ozs7Ozs7QUFVQTs7Ozs7Ozs7Ozs7O0FBWUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7RUF2Q2lCRSxtQjs7a0JBd0VOUCxNIiwiZmlsZSI6ImF0LXJ1bGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29udGFpbmVyIGZyb20gJy4vY29udGFpbmVyJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGF0LXJ1bGUuXG4gKlxuICogSWYgaXTigJlzIGZvbGxvd2VkIGluIHRoZSBDU1MgYnkgYSB7fSBibG9jaywgdGhpcyBub2RlIHdpbGwgaGF2ZVxuICogYSBub2RlcyBwcm9wZXJ0eSByZXByZXNlbnRpbmcgaXRzIGNoaWxkcmVuLlxuICpcbiAqIEBleHRlbmRzIENvbnRhaW5lclxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZSgnQGNoYXJzZXQgXCJVVEYtOFwiOyBAbWVkaWEgcHJpbnQge30nKTtcbiAqXG4gKiBjb25zdCBjaGFyc2V0ID0gcm9vdC5maXJzdDtcbiAqIGNoYXJzZXQudHlwZSAgLy89PiAnYXRydWxlJ1xuICogY2hhcnNldC5ub2RlcyAvLz0+IHVuZGVmaW5lZFxuICpcbiAqIGNvbnN0IG1lZGlhID0gcm9vdC5sYXN0O1xuICogbWVkaWEubm9kZXMgICAvLz0+IFtdXG4gKi9cbmNsYXNzIEF0UnVsZSBleHRlbmRzIENvbnRhaW5lciB7XG5cbiAgICBjb25zdHJ1Y3RvcihkZWZhdWx0cykge1xuICAgICAgICBzdXBlcihkZWZhdWx0cyk7XG4gICAgICAgIHRoaXMudHlwZSA9ICdhdHJ1bGUnO1xuICAgIH1cblxuICAgIGFwcGVuZCguLi5jaGlsZHJlbikge1xuICAgICAgICBpZiAoICF0aGlzLm5vZGVzICkgdGhpcy5ub2RlcyA9IFtdO1xuICAgICAgICByZXR1cm4gc3VwZXIuYXBwZW5kKC4uLmNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICBwcmVwZW5kKC4uLmNoaWxkcmVuKSB7XG4gICAgICAgIGlmICggIXRoaXMubm9kZXMgKSB0aGlzLm5vZGVzID0gW107XG4gICAgICAgIHJldHVybiBzdXBlci5wcmVwZW5kKC4uLmNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgQXRSdWxlI1xuICAgICAqIEBtZW1iZXIge3N0cmluZ30gbmFtZSAtIHRoZSBhdC1ydWxl4oCZcyBuYW1lIGltbWVkaWF0ZWx5IGZvbGxvd3MgdGhlIGBAYFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCByb290ICA9IHBvc3Rjc3MucGFyc2UoJ0BtZWRpYSBwcmludCB7fScpO1xuICAgICAqIG1lZGlhLm5hbWUgLy89PiAnbWVkaWEnXG4gICAgICogY29uc3QgbWVkaWEgPSByb290LmZpcnN0O1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIEF0UnVsZSNcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9IHBhcmFtcyAtIHRoZSBhdC1ydWxl4oCZcyBwYXJhbWV0ZXJzLCB0aGUgdmFsdWVzXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IGZvbGxvdyB0aGUgYXQtcnVsZeKAmXMgbmFtZSBidXQgcHJlY2VkZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgYW55IHt9IGJsb2NrXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IHJvb3QgID0gcG9zdGNzcy5wYXJzZSgnQG1lZGlhIHByaW50LCBzY3JlZW4ge30nKTtcbiAgICAgKiBjb25zdCBtZWRpYSA9IHJvb3QuZmlyc3Q7XG4gICAgICogbWVkaWEucGFyYW1zIC8vPT4gJ3ByaW50LCBzY3JlZW4nXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgQXRSdWxlI1xuICAgICAqIEBtZW1iZXIge29iamVjdH0gcmF3cyAtIEluZm9ybWF0aW9uIHRvIGdlbmVyYXRlIGJ5dGUtdG8tYnl0ZSBlcXVhbFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgc3RyaW5nIGFzIGl0IHdhcyBpbiB0aGUgb3JpZ2luIGlucHV0LlxuICAgICAqXG4gICAgICogRXZlcnkgcGFyc2VyIHNhdmVzIGl0cyBvd24gcHJvcGVydGllcyxcbiAgICAgKiBidXQgdGhlIGRlZmF1bHQgQ1NTIHBhcnNlciB1c2VzOlxuICAgICAqXG4gICAgICogKiBgYmVmb3JlYDogdGhlIHNwYWNlIHN5bWJvbHMgYmVmb3JlIHRoZSBub2RlLiBJdCBhbHNvIHN0b3JlcyBgKmBcbiAgICAgKiAgIGFuZCBgX2Agc3ltYm9scyBiZWZvcmUgdGhlIGRlY2xhcmF0aW9uIChJRSBoYWNrKS5cbiAgICAgKiAqIGBhZnRlcmA6IHRoZSBzcGFjZSBzeW1ib2xzIGFmdGVyIHRoZSBsYXN0IGNoaWxkIG9mIHRoZSBub2RlXG4gICAgICogICB0byB0aGUgZW5kIG9mIHRoZSBub2RlLlxuICAgICAqICogYGJldHdlZW5gOiB0aGUgc3ltYm9scyBiZXR3ZWVuIHRoZSBwcm9wZXJ0eSBhbmQgdmFsdWVcbiAgICAgKiAgIGZvciBkZWNsYXJhdGlvbnMsIHNlbGVjdG9yIGFuZCBge2AgZm9yIHJ1bGVzLCBvciBsYXN0IHBhcmFtZXRlclxuICAgICAqICAgYW5kIGB7YCBmb3IgYXQtcnVsZXMuXG4gICAgICogKiBgc2VtaWNvbG9uYDogY29udGFpbnMgdHJ1ZSBpZiB0aGUgbGFzdCBjaGlsZCBoYXNcbiAgICAgKiAgIGFuIChvcHRpb25hbCkgc2VtaWNvbG9uLlxuICAgICAqICogYGFmdGVyTmFtZWA6IHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSBhdC1ydWxlIG5hbWUgYW5kIGl0cyBwYXJhbWV0ZXJzLlxuICAgICAqXG4gICAgICogUG9zdENTUyBjbGVhbnMgYXQtcnVsZSBwYXJhbWV0ZXJzIGZyb20gY29tbWVudHMgYW5kIGV4dHJhIHNwYWNlcyxcbiAgICAgKiBidXQgaXQgc3RvcmVzIG9yaWdpbiBjb250ZW50IGluIHJhd3MgcHJvcGVydGllcy5cbiAgICAgKiBBcyBzdWNoLCBpZiB5b3UgZG9u4oCZdCBjaGFuZ2UgYSBkZWNsYXJhdGlvbuKAmXMgdmFsdWUsXG4gICAgICogUG9zdENTUyB3aWxsIHVzZSB0aGUgcmF3IHZhbHVlIHdpdGggY29tbWVudHMuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IHJvb3QgPSBwb3N0Y3NzLnBhcnNlKCcgIEBtZWRpYVxcbnByaW50IHtcXG59JylcbiAgICAgKiByb290LmZpcnN0LmZpcnN0LnJhd3MgLy89PiB7IGJlZm9yZTogJyAgJyxcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGJldHdlZW46ICcgJyxcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIGFmdGVyTmFtZTogJ1xcbicsXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBhZnRlcjogJ1xcbicgfVxuICAgICAqL1xufVxuXG5leHBvcnQgZGVmYXVsdCBBdFJ1bGU7XG4iXX0=
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/comment.js b/node_modules/postcss-reporter/node_modules/postcss/lib/comment.js
new file mode 100644
index 00000000..29851966
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/comment.js
@@ -0,0 +1,61 @@
+'use strict';
+
+exports.__esModule = true;
+
+var _node = require('./node');
+
+var _node2 = _interopRequireDefault(_node);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+/**
+ * Represents a comment between declarations or statements (rule and at-rules).
+ *
+ * Comments inside selectors, at-rule parameters, or declaration values
+ * will be stored in the `raws` properties explained above.
+ *
+ * @extends Node
+ */
+var Comment = function (_Node) {
+ _inherits(Comment, _Node);
+
+ function Comment(defaults) {
+ _classCallCheck(this, Comment);
+
+ var _this = _possibleConstructorReturn(this, _Node.call(this, defaults));
+
+ _this.type = 'comment';
+ return _this;
+ }
+
+ /**
+ * @memberof Comment#
+ * @member {string} text - the comment’s text
+ */
+
+ /**
+ * @memberof Comment#
+ * @member {object} raws - Information to generate byte-to-byte equal
+ * node string as it was in the origin input.
+ *
+ * Every parser saves its own properties,
+ * but the default CSS parser uses:
+ *
+ * * `before`: the space symbols before the node.
+ * * `left`: the space symbols between `/*` and the comment’s text.
+ * * `right`: the space symbols between the comment’s text.
+ */
+
+
+ return Comment;
+}(_node2.default);
+
+exports.default = Comment;
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbW1lbnQuZXM2Il0sIm5hbWVzIjpbIkNvbW1lbnQiLCJkZWZhdWx0cyIsInR5cGUiLCJOb2RlIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7Ozs7Ozs7Ozs7OztBQUVBOzs7Ozs7OztJQVFNQSxPOzs7QUFFRixtQkFBWUMsUUFBWixFQUFzQjtBQUFBOztBQUFBLGlEQUNsQixpQkFBTUEsUUFBTixDQURrQjs7QUFFbEIsVUFBS0MsSUFBTCxHQUFZLFNBQVo7QUFGa0I7QUFHckI7O0FBRUQ7Ozs7O0FBS0E7Ozs7Ozs7Ozs7Ozs7OztFQVprQkMsYzs7a0JBMEJQSCxPIiwiZmlsZSI6ImNvbW1lbnQuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTm9kZSBmcm9tICcuL25vZGUnO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBjb21tZW50IGJldHdlZW4gZGVjbGFyYXRpb25zIG9yIHN0YXRlbWVudHMgKHJ1bGUgYW5kIGF0LXJ1bGVzKS5cbiAqXG4gKiBDb21tZW50cyBpbnNpZGUgc2VsZWN0b3JzLCBhdC1ydWxlIHBhcmFtZXRlcnMsIG9yIGRlY2xhcmF0aW9uIHZhbHVlc1xuICogd2lsbCBiZSBzdG9yZWQgaW4gdGhlIGByYXdzYCBwcm9wZXJ0aWVzIGV4cGxhaW5lZCBhYm92ZS5cbiAqXG4gKiBAZXh0ZW5kcyBOb2RlXG4gKi9cbmNsYXNzIENvbW1lbnQgZXh0ZW5kcyBOb2RlIHtcblxuICAgIGNvbnN0cnVjdG9yKGRlZmF1bHRzKSB7XG4gICAgICAgIHN1cGVyKGRlZmF1bHRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ2NvbW1lbnQnO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXJvZiBDb21tZW50I1xuICAgICAqIEBtZW1iZXIge3N0cmluZ30gdGV4dCAtIHRoZSBjb21tZW504oCZcyB0ZXh0XG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgQ29tbWVudCNcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9IHJhd3MgLSBJbmZvcm1hdGlvbiB0byBnZW5lcmF0ZSBieXRlLXRvLWJ5dGUgZXF1YWxcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlIHN0cmluZyBhcyBpdCB3YXMgaW4gdGhlIG9yaWdpbiBpbnB1dC5cbiAgICAgKlxuICAgICAqIEV2ZXJ5IHBhcnNlciBzYXZlcyBpdHMgb3duIHByb3BlcnRpZXMsXG4gICAgICogYnV0IHRoZSBkZWZhdWx0IENTUyBwYXJzZXIgdXNlczpcbiAgICAgKlxuICAgICAqICogYGJlZm9yZWA6IHRoZSBzcGFjZSBzeW1ib2xzIGJlZm9yZSB0aGUgbm9kZS5cbiAgICAgKiAqIGBsZWZ0YDogdGhlIHNwYWNlIHN5bWJvbHMgYmV0d2VlbiBgLypgIGFuZCB0aGUgY29tbWVudOKAmXMgdGV4dC5cbiAgICAgKiAqIGByaWdodGA6IHRoZSBzcGFjZSBzeW1ib2xzIGJldHdlZW4gdGhlIGNvbW1lbnTigJlzIHRleHQuXG4gICAgICovXG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbW1lbnQ7XG4iXX0=
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/container.js b/node_modules/postcss-reporter/node_modules/postcss/lib/container.js
new file mode 100644
index 00000000..41f113fb
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/container.js
@@ -0,0 +1,907 @@
+'use strict';
+
+exports.__esModule = true;
+
+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; }; }();
+
+var _declaration = require('./declaration');
+
+var _declaration2 = _interopRequireDefault(_declaration);
+
+var _comment = require('./comment');
+
+var _comment2 = _interopRequireDefault(_comment);
+
+var _node = require('./node');
+
+var _node2 = _interopRequireDefault(_node);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+function cleanSource(nodes) {
+ return nodes.map(function (i) {
+ if (i.nodes) i.nodes = cleanSource(i.nodes);
+ delete i.source;
+ return i;
+ });
+}
+
+/**
+ * The {@link Root}, {@link AtRule}, and {@link Rule} container nodes
+ * inherit some common methods to help work with their children.
+ *
+ * Note that all containers can store any content. If you write a rule inside
+ * a rule, PostCSS will parse it.
+ *
+ * @extends Node
+ * @abstract
+ */
+
+var Container = function (_Node) {
+ _inherits(Container, _Node);
+
+ function Container() {
+ _classCallCheck(this, Container);
+
+ return _possibleConstructorReturn(this, _Node.apply(this, arguments));
+ }
+
+ Container.prototype.push = function push(child) {
+ child.parent = this;
+ this.nodes.push(child);
+ return this;
+ };
+
+ /**
+ * Iterates through the container’s immediate children,
+ * calling `callback` for each child.
+ *
+ * Returning `false` in the callback will break iteration.
+ *
+ * This method only iterates through the container’s immediate children.
+ * If you need to recursively iterate through all the container’s descendant
+ * nodes, use {@link Container#walk}.
+ *
+ * Unlike the for `{}`-cycle or `Array#forEach` this iterator is safe
+ * if you are mutating the array of child nodes during iteration.
+ * PostCSS will adjust the current index to match the mutations.
+ *
+ * @param {childIterator} callback - iterator receives each node and index
+ *
+ * @return {false|undefined} returns `false` if iteration was broke
+ *
+ * @example
+ * const root = postcss.parse('a { color: black; z-index: 1 }');
+ * const rule = root.first;
+ *
+ * for ( let decl of rule.nodes ) {
+ * decl.cloneBefore({ prop: '-webkit-' + decl.prop });
+ * // Cycle will be infinite, because cloneBefore moves the current node
+ * // to the next index
+ * }
+ *
+ * rule.each(decl => {
+ * decl.cloneBefore({ prop: '-webkit-' + decl.prop });
+ * // Will be executed only for color and z-index
+ * });
+ */
+
+
+ Container.prototype.each = function each(callback) {
+ if (!this.lastEach) this.lastEach = 0;
+ if (!this.indexes) this.indexes = {};
+
+ this.lastEach += 1;
+ var id = this.lastEach;
+ this.indexes[id] = 0;
+
+ if (!this.nodes) return undefined;
+
+ var index = void 0,
+ result = void 0;
+ while (this.indexes[id] < this.nodes.length) {
+ index = this.indexes[id];
+ result = callback(this.nodes[index], index);
+ if (result === false) break;
+
+ this.indexes[id] += 1;
+ }
+
+ delete this.indexes[id];
+
+ return result;
+ };
+
+ /**
+ * Traverses the container’s descendant nodes, calling callback
+ * for each node.
+ *
+ * Like container.each(), this method is safe to use
+ * if you are mutating arrays during iteration.
+ *
+ * If you only need to iterate through the container’s immediate children,
+ * use {@link Container#each}.
+ *
+ * @param {childIterator} callback - iterator receives each node and index
+ *
+ * @return {false|undefined} returns `false` if iteration was broke
+ *
+ * @example
+ * root.walk(node => {
+ * // Traverses all descendant nodes.
+ * });
+ */
+
+
+ Container.prototype.walk = function walk(callback) {
+ return this.each(function (child, i) {
+ var result = callback(child, i);
+ if (result !== false && child.walk) {
+ result = child.walk(callback);
+ }
+ return result;
+ });
+ };
+
+ /**
+ * Traverses the container’s descendant nodes, calling callback
+ * for each declaration node.
+ *
+ * If you pass a filter, iteration will only happen over declarations
+ * with matching properties.
+ *
+ * Like {@link Container#each}, this method is safe
+ * to use if you are mutating arrays during iteration.
+ *
+ * @param {string|RegExp} [prop] - string or regular expression
+ * to filter declarations by property name
+ * @param {childIterator} callback - iterator receives each node and index
+ *
+ * @return {false|undefined} returns `false` if iteration was broke
+ *
+ * @example
+ * root.walkDecls(decl => {
+ * checkPropertySupport(decl.prop);
+ * });
+ *
+ * root.walkDecls('border-radius', decl => {
+ * decl.remove();
+ * });
+ *
+ * root.walkDecls(/^background/, decl => {
+ * decl.value = takeFirstColorFromGradient(decl.value);
+ * });
+ */
+
+
+ Container.prototype.walkDecls = function walkDecls(prop, callback) {
+ if (!callback) {
+ callback = prop;
+ return this.walk(function (child, i) {
+ if (child.type === 'decl') {
+ return callback(child, i);
+ }
+ });
+ } else if (prop instanceof RegExp) {
+ return this.walk(function (child, i) {
+ if (child.type === 'decl' && prop.test(child.prop)) {
+ return callback(child, i);
+ }
+ });
+ } else {
+ return this.walk(function (child, i) {
+ if (child.type === 'decl' && child.prop === prop) {
+ return callback(child, i);
+ }
+ });
+ }
+ };
+
+ /**
+ * Traverses the container’s descendant nodes, calling callback
+ * for each rule node.
+ *
+ * If you pass a filter, iteration will only happen over rules
+ * with matching selectors.
+ *
+ * Like {@link Container#each}, this method is safe
+ * to use if you are mutating arrays during iteration.
+ *
+ * @param {string|RegExp} [selector] - string or regular expression
+ * to filter rules by selector
+ * @param {childIterator} callback - iterator receives each node and index
+ *
+ * @return {false|undefined} returns `false` if iteration was broke
+ *
+ * @example
+ * const selectors = [];
+ * root.walkRules(rule => {
+ * selectors.push(rule.selector);
+ * });
+ * console.log(`Your CSS uses ${selectors.length} selectors`);
+ */
+
+
+ Container.prototype.walkRules = function walkRules(selector, callback) {
+ if (!callback) {
+ callback = selector;
+
+ return this.walk(function (child, i) {
+ if (child.type === 'rule') {
+ return callback(child, i);
+ }
+ });
+ } else if (selector instanceof RegExp) {
+ return this.walk(function (child, i) {
+ if (child.type === 'rule' && selector.test(child.selector)) {
+ return callback(child, i);
+ }
+ });
+ } else {
+ return this.walk(function (child, i) {
+ if (child.type === 'rule' && child.selector === selector) {
+ return callback(child, i);
+ }
+ });
+ }
+ };
+
+ /**
+ * Traverses the container’s descendant nodes, calling callback
+ * for each at-rule node.
+ *
+ * If you pass a filter, iteration will only happen over at-rules
+ * that have matching names.
+ *
+ * Like {@link Container#each}, this method is safe
+ * to use if you are mutating arrays during iteration.
+ *
+ * @param {string|RegExp} [name] - string or regular expression
+ * to filter at-rules by name
+ * @param {childIterator} callback - iterator receives each node and index
+ *
+ * @return {false|undefined} returns `false` if iteration was broke
+ *
+ * @example
+ * root.walkAtRules(rule => {
+ * if ( isOld(rule.name) ) rule.remove();
+ * });
+ *
+ * let first = false;
+ * root.walkAtRules('charset', rule => {
+ * if ( !first ) {
+ * first = true;
+ * } else {
+ * rule.remove();
+ * }
+ * });
+ */
+
+
+ Container.prototype.walkAtRules = function walkAtRules(name, callback) {
+ if (!callback) {
+ callback = name;
+ return this.walk(function (child, i) {
+ if (child.type === 'atrule') {
+ return callback(child, i);
+ }
+ });
+ } else if (name instanceof RegExp) {
+ return this.walk(function (child, i) {
+ if (child.type === 'atrule' && name.test(child.name)) {
+ return callback(child, i);
+ }
+ });
+ } else {
+ return this.walk(function (child, i) {
+ if (child.type === 'atrule' && child.name === name) {
+ return callback(child, i);
+ }
+ });
+ }
+ };
+
+ /**
+ * Traverses the container’s descendant nodes, calling callback
+ * for each comment node.
+ *
+ * Like {@link Container#each}, this method is safe
+ * to use if you are mutating arrays during iteration.
+ *
+ * @param {childIterator} callback - iterator receives each node and index
+ *
+ * @return {false|undefined} returns `false` if iteration was broke
+ *
+ * @example
+ * root.walkComments(comment => {
+ * comment.remove();
+ * });
+ */
+
+
+ Container.prototype.walkComments = function walkComments(callback) {
+ return this.walk(function (child, i) {
+ if (child.type === 'comment') {
+ return callback(child, i);
+ }
+ });
+ };
+
+ /**
+ * Inserts new nodes to the end of the container.
+ *
+ * @param {...(Node|object|string|Node[])} children - new nodes
+ *
+ * @return {Node} this node for methods chain
+ *
+ * @example
+ * const decl1 = postcss.decl({ prop: 'color', value: 'black' });
+ * const decl2 = postcss.decl({ prop: 'background-color', value: 'white' });
+ * rule.append(decl1, decl2);
+ *
+ * root.append({ name: 'charset', params: '"UTF-8"' }); // at-rule
+ * root.append({ selector: 'a' }); // rule
+ * rule.append({ prop: 'color', value: 'black' }); // declaration
+ * rule.append({ text: 'Comment' }) // comment
+ *
+ * root.append('a {}');
+ * root.first.append('color: black; z-index: 1');
+ */
+
+
+ Container.prototype.append = function append() {
+ for (var _len = arguments.length, children = Array(_len), _key = 0; _key < _len; _key++) {
+ children[_key] = arguments[_key];
+ }
+
+ for (var _iterator = children, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var child = _ref;
+
+ var nodes = this.normalize(child, this.last);
+ for (var _iterator2 = nodes, _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
+ var _ref2;
+
+ if (_isArray2) {
+ if (_i2 >= _iterator2.length) break;
+ _ref2 = _iterator2[_i2++];
+ } else {
+ _i2 = _iterator2.next();
+ if (_i2.done) break;
+ _ref2 = _i2.value;
+ }
+
+ var node = _ref2;
+ this.nodes.push(node);
+ }
+ }
+ return this;
+ };
+
+ /**
+ * Inserts new nodes to the start of the container.
+ *
+ * @param {...(Node|object|string|Node[])} children - new nodes
+ *
+ * @return {Node} this node for methods chain
+ *
+ * @example
+ * const decl1 = postcss.decl({ prop: 'color', value: 'black' });
+ * const decl2 = postcss.decl({ prop: 'background-color', value: 'white' });
+ * rule.prepend(decl1, decl2);
+ *
+ * root.append({ name: 'charset', params: '"UTF-8"' }); // at-rule
+ * root.append({ selector: 'a' }); // rule
+ * rule.append({ prop: 'color', value: 'black' }); // declaration
+ * rule.append({ text: 'Comment' }) // comment
+ *
+ * root.append('a {}');
+ * root.first.append('color: black; z-index: 1');
+ */
+
+
+ Container.prototype.prepend = function prepend() {
+ for (var _len2 = arguments.length, children = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
+ children[_key2] = arguments[_key2];
+ }
+
+ children = children.reverse();
+ for (var _iterator3 = children, _isArray3 = Array.isArray(_iterator3), _i3 = 0, _iterator3 = _isArray3 ? _iterator3 : _iterator3[Symbol.iterator]();;) {
+ var _ref3;
+
+ if (_isArray3) {
+ if (_i3 >= _iterator3.length) break;
+ _ref3 = _iterator3[_i3++];
+ } else {
+ _i3 = _iterator3.next();
+ if (_i3.done) break;
+ _ref3 = _i3.value;
+ }
+
+ var child = _ref3;
+
+ var nodes = this.normalize(child, this.first, 'prepend').reverse();
+ for (var _iterator4 = nodes, _isArray4 = Array.isArray(_iterator4), _i4 = 0, _iterator4 = _isArray4 ? _iterator4 : _iterator4[Symbol.iterator]();;) {
+ var _ref4;
+
+ if (_isArray4) {
+ if (_i4 >= _iterator4.length) break;
+ _ref4 = _iterator4[_i4++];
+ } else {
+ _i4 = _iterator4.next();
+ if (_i4.done) break;
+ _ref4 = _i4.value;
+ }
+
+ var node = _ref4;
+ this.nodes.unshift(node);
+ }for (var id in this.indexes) {
+ this.indexes[id] = this.indexes[id] + nodes.length;
+ }
+ }
+ return this;
+ };
+
+ Container.prototype.cleanRaws = function cleanRaws(keepBetween) {
+ _Node.prototype.cleanRaws.call(this, keepBetween);
+ if (this.nodes) {
+ for (var _iterator5 = this.nodes, _isArray5 = Array.isArray(_iterator5), _i5 = 0, _iterator5 = _isArray5 ? _iterator5 : _iterator5[Symbol.iterator]();;) {
+ var _ref5;
+
+ if (_isArray5) {
+ if (_i5 >= _iterator5.length) break;
+ _ref5 = _iterator5[_i5++];
+ } else {
+ _i5 = _iterator5.next();
+ if (_i5.done) break;
+ _ref5 = _i5.value;
+ }
+
+ var node = _ref5;
+ node.cleanRaws(keepBetween);
+ }
+ }
+ };
+
+ /**
+ * Insert new node before old node within the container.
+ *
+ * @param {Node|number} exist - child or child’s index.
+ * @param {Node|object|string|Node[]} add - new node
+ *
+ * @return {Node} this node for methods chain
+ *
+ * @example
+ * rule.insertBefore(decl, decl.clone({ prop: '-webkit-' + decl.prop }));
+ */
+
+
+ Container.prototype.insertBefore = function insertBefore(exist, add) {
+ exist = this.index(exist);
+
+ var type = exist === 0 ? 'prepend' : false;
+ var nodes = this.normalize(add, this.nodes[exist], type).reverse();
+ for (var _iterator6 = nodes, _isArray6 = Array.isArray(_iterator6), _i6 = 0, _iterator6 = _isArray6 ? _iterator6 : _iterator6[Symbol.iterator]();;) {
+ var _ref6;
+
+ if (_isArray6) {
+ if (_i6 >= _iterator6.length) break;
+ _ref6 = _iterator6[_i6++];
+ } else {
+ _i6 = _iterator6.next();
+ if (_i6.done) break;
+ _ref6 = _i6.value;
+ }
+
+ var node = _ref6;
+ this.nodes.splice(exist, 0, node);
+ }var index = void 0;
+ for (var id in this.indexes) {
+ index = this.indexes[id];
+ if (exist <= index) {
+ this.indexes[id] = index + nodes.length;
+ }
+ }
+
+ return this;
+ };
+
+ /**
+ * Insert new node after old node within the container.
+ *
+ * @param {Node|number} exist - child or child’s index
+ * @param {Node|object|string|Node[]} add - new node
+ *
+ * @return {Node} this node for methods chain
+ */
+
+
+ Container.prototype.insertAfter = function insertAfter(exist, add) {
+ exist = this.index(exist);
+
+ var nodes = this.normalize(add, this.nodes[exist]).reverse();
+ for (var _iterator7 = nodes, _isArray7 = Array.isArray(_iterator7), _i7 = 0, _iterator7 = _isArray7 ? _iterator7 : _iterator7[Symbol.iterator]();;) {
+ var _ref7;
+
+ if (_isArray7) {
+ if (_i7 >= _iterator7.length) break;
+ _ref7 = _iterator7[_i7++];
+ } else {
+ _i7 = _iterator7.next();
+ if (_i7.done) break;
+ _ref7 = _i7.value;
+ }
+
+ var node = _ref7;
+ this.nodes.splice(exist + 1, 0, node);
+ }var index = void 0;
+ for (var id in this.indexes) {
+ index = this.indexes[id];
+ if (exist < index) {
+ this.indexes[id] = index + nodes.length;
+ }
+ }
+
+ return this;
+ };
+
+ /**
+ * Removes node from the container and cleans the parent properties
+ * from the node and its children.
+ *
+ * @param {Node|number} child - child or child’s index
+ *
+ * @return {Node} this node for methods chain
+ *
+ * @example
+ * rule.nodes.length //=> 5
+ * rule.removeChild(decl);
+ * rule.nodes.length //=> 4
+ * decl.parent //=> undefined
+ */
+
+
+ Container.prototype.removeChild = function removeChild(child) {
+ child = this.index(child);
+ this.nodes[child].parent = undefined;
+ this.nodes.splice(child, 1);
+
+ var index = void 0;
+ for (var id in this.indexes) {
+ index = this.indexes[id];
+ if (index >= child) {
+ this.indexes[id] = index - 1;
+ }
+ }
+
+ return this;
+ };
+
+ /**
+ * Removes all children from the container
+ * and cleans their parent properties.
+ *
+ * @return {Node} this node for methods chain
+ *
+ * @example
+ * rule.removeAll();
+ * rule.nodes.length //=> 0
+ */
+
+
+ Container.prototype.removeAll = function removeAll() {
+ for (var _iterator8 = this.nodes, _isArray8 = Array.isArray(_iterator8), _i8 = 0, _iterator8 = _isArray8 ? _iterator8 : _iterator8[Symbol.iterator]();;) {
+ var _ref8;
+
+ if (_isArray8) {
+ if (_i8 >= _iterator8.length) break;
+ _ref8 = _iterator8[_i8++];
+ } else {
+ _i8 = _iterator8.next();
+ if (_i8.done) break;
+ _ref8 = _i8.value;
+ }
+
+ var node = _ref8;
+ node.parent = undefined;
+ }this.nodes = [];
+ return this;
+ };
+
+ /**
+ * Passes all declaration values within the container that match pattern
+ * through callback, replacing those values with the returned result
+ * of callback.
+ *
+ * This method is useful if you are using a custom unit or function
+ * and need to iterate through all values.
+ *
+ * @param {string|RegExp} pattern - replace pattern
+ * @param {object} opts - options to speed up the search
+ * @param {string|string[]} opts.props - an array of property names
+ * @param {string} opts.fast - string that’s used
+ * to narrow down values and speed up
+ the regexp search
+ * @param {function|string} callback - string to replace pattern
+ * or callback that returns a new
+ * value.
+ * The callback will receive
+ * the same arguments as those
+ * passed to a function parameter
+ * of `String#replace`.
+ *
+ * @return {Node} this node for methods chain
+ *
+ * @example
+ * root.replaceValues(/\d+rem/, { fast: 'rem' }, string => {
+ * return 15 * parseInt(string) + 'px';
+ * });
+ */
+
+
+ Container.prototype.replaceValues = function replaceValues(pattern, opts, callback) {
+ if (!callback) {
+ callback = opts;
+ opts = {};
+ }
+
+ this.walkDecls(function (decl) {
+ if (opts.props && opts.props.indexOf(decl.prop) === -1) return;
+ if (opts.fast && decl.value.indexOf(opts.fast) === -1) return;
+
+ decl.value = decl.value.replace(pattern, callback);
+ });
+
+ return this;
+ };
+
+ /**
+ * Returns `true` if callback returns `true`
+ * for all of the container’s children.
+ *
+ * @param {childCondition} condition - iterator returns true or false.
+ *
+ * @return {boolean} is every child pass condition
+ *
+ * @example
+ * const noPrefixes = rule.every(i => i.prop[0] !== '-');
+ */
+
+
+ Container.prototype.every = function every(condition) {
+ return this.nodes.every(condition);
+ };
+
+ /**
+ * Returns `true` if callback returns `true` for (at least) one
+ * of the container’s children.
+ *
+ * @param {childCondition} condition - iterator returns true or false.
+ *
+ * @return {boolean} is some child pass condition
+ *
+ * @example
+ * const hasPrefix = rule.some(i => i.prop[0] === '-');
+ */
+
+
+ Container.prototype.some = function some(condition) {
+ return this.nodes.some(condition);
+ };
+
+ /**
+ * Returns a `child`’s index within the {@link Container#nodes} array.
+ *
+ * @param {Node} child - child of the current container.
+ *
+ * @return {number} child index
+ *
+ * @example
+ * rule.index( rule.nodes[2] ) //=> 2
+ */
+
+
+ Container.prototype.index = function index(child) {
+ if (typeof child === 'number') {
+ return child;
+ } else {
+ return this.nodes.indexOf(child);
+ }
+ };
+
+ /**
+ * The container’s first child.
+ *
+ * @type {Node}
+ *
+ * @example
+ * rule.first == rules.nodes[0];
+ */
+
+
+ Container.prototype.normalize = function normalize(nodes, sample) {
+ var _this2 = this;
+
+ if (typeof nodes === 'string') {
+ var parse = require('./parse');
+ nodes = cleanSource(parse(nodes).nodes);
+ } else if (Array.isArray(nodes)) {
+ nodes = nodes.slice(0);
+ for (var _iterator9 = nodes, _isArray9 = Array.isArray(_iterator9), _i9 = 0, _iterator9 = _isArray9 ? _iterator9 : _iterator9[Symbol.iterator]();;) {
+ var _ref9;
+
+ if (_isArray9) {
+ if (_i9 >= _iterator9.length) break;
+ _ref9 = _iterator9[_i9++];
+ } else {
+ _i9 = _iterator9.next();
+ if (_i9.done) break;
+ _ref9 = _i9.value;
+ }
+
+ var i = _ref9;
+
+ if (i.parent) i.parent.removeChild(i, 'ignore');
+ }
+ } else if (nodes.type === 'root') {
+ nodes = nodes.nodes.slice(0);
+ for (var _iterator10 = nodes, _isArray10 = Array.isArray(_iterator10), _i11 = 0, _iterator10 = _isArray10 ? _iterator10 : _iterator10[Symbol.iterator]();;) {
+ var _ref10;
+
+ if (_isArray10) {
+ if (_i11 >= _iterator10.length) break;
+ _ref10 = _iterator10[_i11++];
+ } else {
+ _i11 = _iterator10.next();
+ if (_i11.done) break;
+ _ref10 = _i11.value;
+ }
+
+ var _i10 = _ref10;
+
+ if (_i10.parent) _i10.parent.removeChild(_i10, 'ignore');
+ }
+ } else if (nodes.type) {
+ nodes = [nodes];
+ } else if (nodes.prop) {
+ if (typeof nodes.value === 'undefined') {
+ throw new Error('Value field is missed in node creation');
+ } else if (typeof nodes.value !== 'string') {
+ nodes.value = String(nodes.value);
+ }
+ nodes = [new _declaration2.default(nodes)];
+ } else if (nodes.selector) {
+ var Rule = require('./rule');
+ nodes = [new Rule(nodes)];
+ } else if (nodes.name) {
+ var AtRule = require('./at-rule');
+ nodes = [new AtRule(nodes)];
+ } else if (nodes.text) {
+ nodes = [new _comment2.default(nodes)];
+ } else {
+ throw new Error('Unknown node type in node creation');
+ }
+
+ var processed = nodes.map(function (i) {
+ if (typeof i.before !== 'function') i = _this2.rebuild(i);
+
+ if (i.parent) i.parent.removeChild(i);
+ if (typeof i.raws.before === 'undefined') {
+ if (sample && typeof sample.raws.before !== 'undefined') {
+ i.raws.before = sample.raws.before.replace(/[^\s]/g, '');
+ }
+ }
+ i.parent = _this2;
+ return i;
+ });
+
+ return processed;
+ };
+
+ Container.prototype.rebuild = function rebuild(node, parent) {
+ var _this3 = this;
+
+ var fix = void 0;
+ if (node.type === 'root') {
+ var Root = require('./root');
+ fix = new Root();
+ } else if (node.type === 'atrule') {
+ var AtRule = require('./at-rule');
+ fix = new AtRule();
+ } else if (node.type === 'rule') {
+ var Rule = require('./rule');
+ fix = new Rule();
+ } else if (node.type === 'decl') {
+ fix = new _declaration2.default();
+ } else if (node.type === 'comment') {
+ fix = new _comment2.default();
+ }
+
+ for (var i in node) {
+ if (i === 'nodes') {
+ fix.nodes = node.nodes.map(function (j) {
+ return _this3.rebuild(j, fix);
+ });
+ } else if (i === 'parent' && parent) {
+ fix.parent = parent;
+ } else if (node.hasOwnProperty(i)) {
+ fix[i] = node[i];
+ }
+ }
+
+ return fix;
+ };
+
+ /**
+ * @memberof Container#
+ * @member {Node[]} nodes - an array containing the container’s children
+ *
+ * @example
+ * const root = postcss.parse('a { color: black }');
+ * root.nodes.length //=> 1
+ * root.nodes[0].selector //=> 'a'
+ * root.nodes[0].nodes[0].prop //=> 'color'
+ */
+
+ _createClass(Container, [{
+ key: 'first',
+ get: function get() {
+ if (!this.nodes) return undefined;
+ return this.nodes[0];
+ }
+
+ /**
+ * The container’s last child.
+ *
+ * @type {Node}
+ *
+ * @example
+ * rule.last == rule.nodes[rule.nodes.length - 1];
+ */
+
+ }, {
+ key: 'last',
+ get: function get() {
+ if (!this.nodes) return undefined;
+ return this.nodes[this.nodes.length - 1];
+ }
+ }]);
+
+ return Container;
+}(_node2.default);
+
+exports.default = Container;
+
+/**
+ * @callback childCondition
+ * @param {Node} node - container child
+ * @param {number} index - child index
+ * @param {Node[]} nodes - all container children
+ * @return {boolean}
+ */
+
+/**
+ * @callback childIterator
+ * @param {Node} node - container child
+ * @param {number} index - child index
+ * @return {false|undefined} returning `false` will break iteration
+ */
+
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNvbnRhaW5lci5lczYiXSwibmFtZXMiOlsiY2xlYW5Tb3VyY2UiLCJub2RlcyIsIm1hcCIsImkiLCJzb3VyY2UiLCJDb250YWluZXIiLCJwdXNoIiwiY2hpbGQiLCJwYXJlbnQiLCJlYWNoIiwiY2FsbGJhY2siLCJsYXN0RWFjaCIsImluZGV4ZXMiLCJpZCIsInVuZGVmaW5lZCIsImluZGV4IiwicmVzdWx0IiwibGVuZ3RoIiwid2FsayIsIndhbGtEZWNscyIsInByb3AiLCJ0eXBlIiwiUmVnRXhwIiwidGVzdCIsIndhbGtSdWxlcyIsInNlbGVjdG9yIiwid2Fsa0F0UnVsZXMiLCJuYW1lIiwid2Fsa0NvbW1lbnRzIiwiYXBwZW5kIiwiY2hpbGRyZW4iLCJub3JtYWxpemUiLCJsYXN0Iiwibm9kZSIsInByZXBlbmQiLCJyZXZlcnNlIiwiZmlyc3QiLCJ1bnNoaWZ0IiwiY2xlYW5SYXdzIiwia2VlcEJldHdlZW4iLCJpbnNlcnRCZWZvcmUiLCJleGlzdCIsImFkZCIsInNwbGljZSIsImluc2VydEFmdGVyIiwicmVtb3ZlQ2hpbGQiLCJyZW1vdmVBbGwiLCJyZXBsYWNlVmFsdWVzIiwicGF0dGVybiIsIm9wdHMiLCJwcm9wcyIsImluZGV4T2YiLCJkZWNsIiwiZmFzdCIsInZhbHVlIiwicmVwbGFjZSIsImV2ZXJ5IiwiY29uZGl0aW9uIiwic29tZSIsInNhbXBsZSIsInBhcnNlIiwicmVxdWlyZSIsIkFycmF5IiwiaXNBcnJheSIsInNsaWNlIiwiRXJyb3IiLCJTdHJpbmciLCJEZWNsYXJhdGlvbiIsIlJ1bGUiLCJBdFJ1bGUiLCJ0ZXh0IiwiQ29tbWVudCIsInByb2Nlc3NlZCIsImJlZm9yZSIsInJlYnVpbGQiLCJyYXdzIiwiZml4IiwiUm9vdCIsImoiLCJoYXNPd25Qcm9wZXJ0eSIsIk5vZGUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7Ozs7O0FBRUEsU0FBU0EsV0FBVCxDQUFxQkMsS0FBckIsRUFBNEI7QUFD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Zjs7Ozs7Ozs7QUFRQSIsImZpbGUiOiJjb250YWluZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRGVjbGFyYXRpb24gZnJvbSAnLi9kZWNsYXJhdGlvbic7XG5pbXBvcnQgQ29tbWVudCAgICAgZnJvbSAnLi9jb21tZW50JztcbmltcG9ydCBOb2RlICAgICAgICBmcm9tICcuL25vZGUnO1xuXG5mdW5jdGlvbiBjbGVhblNvdXJjZShub2Rlcykge1xuICAgIHJldHVybiBub2Rlcy5tYXAoIGkgPT4ge1xuICAgICAgICBpZiAoIGkubm9kZXMgKSBpLm5vZGVzID0gY2xlYW5Tb3VyY2UoaS5ub2Rlcyk7XG4gICAgICAgIGRlbGV0ZSBpLnNvdXJjZTtcbiAgICAgICAgcmV0dXJuIGk7XG4gICAgfSk7XG59XG5cbi8qKlxuICogVGhlIHtAbGluayBSb290fSwge0BsaW5rIEF0UnVsZX0sIGFuZCB7QGxpbmsgUnVsZX0gY29udGFpbmVyIG5vZGVzXG4gKiBpbmhlcml0IHNvbWUgY29tbW9uIG1ldGhvZHMgdG8gaGVscCB3b3JrIHdpdGggdGhlaXIgY2hpbGRyZW4uXG4gKlxuICogTm90ZSB0aGF0IGFsbCBjb250YWluZXJzIGNhbiBzdG9yZSBhbnkgY29udGVudC4gSWYgeW91IHdyaXRlIGEgcnVsZSBpbnNpZGVcbiAqIGEgcnVsZSwgUG9zdENTUyB3aWxsIHBhcnNlIGl0LlxuICpcbiAqIEBleHRlbmRzIE5vZGVcbiAqIEBhYnN0cmFjdFxuICovXG5jbGFzcyBDb250YWluZXIgZXh0ZW5kcyBOb2RlIHtcblxuICAgIHB1c2goY2hpbGQpIHtcbiAgICAgICAgY2hpbGQucGFyZW50ID0gdGhpcztcbiAgICAgICAgdGhpcy5ub2Rlcy5wdXNoKGNoaWxkKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSXRlcmF0ZXMgdGhyb3VnaCB0aGUgY29udGFpbmVy4oCZcyBpbW1lZGlhdGUgY2hpbGRyZW4sXG4gICAgICogY2FsbGluZyBgY2FsbGJhY2tgIGZvciBlYWNoIGNoaWxkLlxuICAgICAqXG4gICAgICogUmV0dXJuaW5nIGBmYWxzZWAgaW4gdGhlIGNhbGxiYWNrIHdpbGwgYnJlYWsgaXRlcmF0aW9uLlxuICAgICAqXG4gICAgICogVGhpcyBtZXRob2Qgb25seSBpdGVyYXRlcyB0aHJvdWdoIHRoZSBjb250YWluZXLigJlzIGltbWVkaWF0ZSBjaGlsZHJlbi5cbiAgICAgKiBJZiB5b3UgbmVlZCB0byByZWN1cnNpdmVseSBpdGVyYXRlIHRocm91Z2ggYWxsIHRoZSBjb250YWluZXLigJlzIGRlc2NlbmRhbnRcbiAgICAgKiBub2RlcywgdXNlIHtAbGluayBDb250YWluZXIjd2Fsa30uXG4gICAgICpcbiAgICAgKiBVbmxpa2UgdGhlIGZvciBge31gLWN5Y2xlIG9yIGBBcnJheSNmb3JFYWNoYCB0aGlzIGl0ZXJhdG9yIGlzIHNhZmVcbiAgICAgKiBpZiB5b3UgYXJlIG11dGF0aW5nIHRoZSBhcnJheSBvZiBjaGlsZCBub2RlcyBkdXJpbmcgaXRlcmF0aW9uLlxuICAgICAqIFBvc3RDU1Mgd2lsbCBhZGp1c3QgdGhlIGN1cnJlbnQgaW5kZXggdG8gbWF0Y2ggdGhlIG11dGF0aW9ucy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Y2hpbGRJdGVyYXRvcn0gY2FsbGJhY2sgLSBpdGVyYXRvciByZWNlaXZlcyBlYWNoIG5vZGUgYW5kIGluZGV4XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtmYWxzZXx1bmRlZmluZWR9IHJldHVybnMgYGZhbHNlYCBpZiBpdGVyYXRpb24gd2FzIGJyb2tlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IHJvb3QgPSBwb3N0Y3NzLnBhcnNlKCdhIHsgY29sb3I6IGJsYWNrOyB6LWluZGV4OiAxIH0nKTtcbiAgICAgKiBjb25zdCBydWxlID0gcm9vdC5maXJzdDtcbiAgICAgKlxuICAgICAqIGZvciAoIGxldCBkZWNsIG9mIHJ1bGUubm9kZXMgKSB7XG4gICAgICogICAgIGRlY2wuY2xvbmVCZWZvcmUoeyBwcm9wOiAnLXdlYmtpdC0nICsgZGVjbC5wcm9wIH0pO1xuICAgICAqICAgICAvLyBDeWNsZSB3aWxsIGJlIGluZmluaXRlLCBiZWNhdXNlIGNsb25lQmVmb3JlIG1vdmVzIHRoZSBjdXJyZW50IG5vZGVcbiAgICAgKiAgICAgLy8gdG8gdGhlIG5leHQgaW5kZXhcbiAgICAgKiB9XG4gICAgICpcbiAgICAgKiBydWxlLmVhY2goZGVjbCA9PiB7XG4gICAgICogICAgIGRlY2wuY2xvbmVCZWZvcmUoeyBwcm9wOiAnLXdlYmtpdC0nICsgZGVjbC5wcm9wIH0pO1xuICAgICAqICAgICAvLyBXaWxsIGJlIGV4ZWN1dGVkIG9ubHkgZm9yIGNvbG9yIGFuZCB6LWluZGV4XG4gICAgICogfSk7XG4gICAgICovXG4gICAgZWFjaChjYWxsYmFjaykge1xuICAgICAgICBpZiAoICF0aGlzLmxhc3RFYWNoICkgdGhpcy5sYXN0RWFjaCA9IDA7XG4gICAgICAgIGlmICggIXRoaXMuaW5kZXhlcyApIHRoaXMuaW5kZXhlcyA9IHsgfTtcblxuICAgICAgICB0aGlzLmxhc3RFYWNoICs9IDE7XG4gICAgICAgIGxldCBpZCA9IHRoaXMubGFzdEVhY2g7XG4gICAgICAgIHRoaXMuaW5kZXhlc1tpZF0gPSAwO1xuXG4gICAgICAgIGlmICggIXRoaXMubm9kZXMgKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBpbmRleCwgcmVzdWx0O1xuICAgICAgICB3aGlsZSAoIHRoaXMuaW5kZXhlc1tpZF0gPCB0aGlzLm5vZGVzLmxlbmd0aCApIHtcbiAgICAgICAgICAgIGluZGV4ICA9IHRoaXMuaW5kZXhlc1tpZF07XG4gICAgICAgICAgICByZXN1bHQgPSBjYWxsYmFjayh0aGlzLm5vZGVzW2luZGV4XSwgaW5kZXgpO1xuICAgICAgICAgICAgaWYgKCByZXN1bHQgPT09IGZhbHNlICkgYnJlYWs7XG5cbiAgICAgICAgICAgIHRoaXMuaW5kZXhlc1tpZF0gKz0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIGRlbGV0ZSB0aGlzLmluZGV4ZXNbaWRdO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVHJhdmVyc2VzIHRoZSBjb250YWluZXLigJlzIGRlc2NlbmRhbnQgbm9kZXMsIGNhbGxpbmcgY2FsbGJhY2tcbiAgICAgKiBmb3IgZWFjaCBub2RlLlxuICAgICAqXG4gICAgICogTGlrZSBjb250YWluZXIuZWFjaCgpLCB0aGlzIG1ldGhvZCBpcyBzYWZlIHRvIHVzZVxuICAgICAqIGlmIHlvdSBhcmUgbXV0YXRpbmcgYXJyYXlzIGR1cmluZyBpdGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBJZiB5b3Ugb25seSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY29udGFpbmVy4oCZcyBpbW1lZGlhdGUgY2hpbGRyZW4sXG4gICAgICogdXNlIHtAbGluayBDb250YWluZXIjZWFjaH0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2NoaWxkSXRlcmF0b3J9IGNhbGxiYWNrIC0gaXRlcmF0b3IgcmVjZWl2ZXMgZWFjaCBub2RlIGFuZCBpbmRleFxuICAgICAqXG4gICAgICogQHJldHVybiB7ZmFsc2V8dW5kZWZpbmVkfSByZXR1cm5zIGBmYWxzZWAgaWYgaXRlcmF0aW9uIHdhcyBicm9rZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiByb290LndhbGsobm9kZSA9PiB7XG4gICAgICogICAvLyBUcmF2ZXJzZXMgYWxsIGRlc2NlbmRhbnQgbm9kZXMuXG4gICAgICogfSk7XG4gICAgICovXG4gICAgd2FsayhjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gdGhpcy5lYWNoKCAoY2hpbGQsIGkpID0+IHtcbiAgICAgICAgICAgIGxldCByZXN1bHQgPSBjYWxsYmFjayhjaGlsZCwgaSk7XG4gICAgICAgICAgICBpZiAoIHJlc3VsdCAhPT0gZmFsc2UgJiYgY2hpbGQud2FsayApIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgPSBjaGlsZC53YWxrKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRyYXZlcnNlcyB0aGUgY29udGFpbmVy4oCZcyBkZXNjZW5kYW50IG5vZGVzLCBjYWxsaW5nIGNhbGxiYWNrXG4gICAgICogZm9yIGVhY2ggZGVjbGFyYXRpb24gbm9kZS5cbiAgICAgKlxuICAgICAqIElmIHlvdSBwYXNzIGEgZmlsdGVyLCBpdGVyYXRpb24gd2lsbCBvbmx5IGhhcHBlbiBvdmVyIGRlY2xhcmF0aW9uc1xuICAgICAqIHdpdGggbWF0Y2hpbmcgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqIExpa2Uge0BsaW5rIENvbnRhaW5lciNlYWNofSwgdGhpcyBtZXRob2QgaXMgc2FmZVxuICAgICAqIHRvIHVzZSBpZiB5b3UgYXJlIG11dGF0aW5nIGFycmF5cyBkdXJpbmcgaXRlcmF0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd8UmVnRXhwfSBbcHJvcF0gICAtIHN0cmluZyBvciByZWd1bGFyIGV4cHJlc3Npb25cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZmlsdGVyIGRlY2xhcmF0aW9ucyBieSBwcm9wZXJ0eSBuYW1lXG4gICAgICogQHBhcmFtIHtjaGlsZEl0ZXJhdG9yfSBjYWxsYmFjayAtIGl0ZXJhdG9yIHJlY2VpdmVzIGVhY2ggbm9kZSBhbmQgaW5kZXhcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2ZhbHNlfHVuZGVmaW5lZH0gcmV0dXJucyBgZmFsc2VgIGlmIGl0ZXJhdGlvbiB3YXMgYnJva2VcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogcm9vdC53YWxrRGVjbHMoZGVjbCA9PiB7XG4gICAgICogICBjaGVja1Byb3BlcnR5U3VwcG9ydChkZWNsLnByb3ApO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogcm9vdC53YWxrRGVjbHMoJ2JvcmRlci1yYWRpdXMnLCBkZWNsID0+IHtcbiAgICAgKiAgIGRlY2wucmVtb3ZlKCk7XG4gICAgICogfSk7XG4gICAgICpcbiAgICAgKiByb290LndhbGtEZWNscygvXmJhY2tncm91bmQvLCBkZWNsID0+IHtcbiAgICAgKiAgIGRlY2wudmFsdWUgPSB0YWtlRmlyc3RDb2xvckZyb21HcmFkaWVudChkZWNsLnZhbHVlKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICB3YWxrRGVjbHMocHJvcCwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCAhY2FsbGJhY2sgKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHByb3A7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy53YWxrKCAoY2hpbGQsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIGNoaWxkLnR5cGUgPT09ICdkZWNsJyApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGNoaWxkLCBpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIGlmICggcHJvcCBpbnN0YW5jZW9mIFJlZ0V4cCApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndhbGsoIChjaGlsZCwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICggY2hpbGQudHlwZSA9PT0gJ2RlY2wnICYmIHByb3AudGVzdChjaGlsZC5wcm9wKSApIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKGNoaWxkLCBpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLndhbGsoIChjaGlsZCwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICggY2hpbGQudHlwZSA9PT0gJ2RlY2wnICYmIGNoaWxkLnByb3AgPT09IHByb3AgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhjaGlsZCwgaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmF2ZXJzZXMgdGhlIGNvbnRhaW5lcuKAmXMgZGVzY2VuZGFudCBub2RlcywgY2FsbGluZyBjYWxsYmFja1xuICAgICAqIGZvciBlYWNoIHJ1bGUgbm9kZS5cbiAgICAgKlxuICAgICAqIElmIHlvdSBwYXNzIGEgZmlsdGVyLCBpdGVyYXRpb24gd2lsbCBvbmx5IGhhcHBlbiBvdmVyIHJ1bGVzXG4gICAgICogd2l0aCBtYXRjaGluZyBzZWxlY3RvcnMuXG4gICAgICpcbiAgICAgKiBMaWtlIHtAbGluayBDb250YWluZXIjZWFjaH0sIHRoaXMgbWV0aG9kIGlzIHNhZmVcbiAgICAgKiB0byB1c2UgaWYgeW91IGFyZSBtdXRhdGluZyBhcnJheXMgZHVyaW5nIGl0ZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gW3NlbGVjdG9yXSAtIHN0cmluZyBvciByZWd1bGFyIGV4cHJlc3Npb25cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBmaWx0ZXIgcnVsZXMgYnkgc2VsZWN0b3JcbiAgICAgKiBAcGFyYW0ge2NoaWxkSXRlcmF0b3J9IGNhbGxiYWNrICAgLSBpdGVyYXRvciByZWNlaXZlcyBlYWNoIG5vZGUgYW5kIGluZGV4XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtmYWxzZXx1bmRlZmluZWR9IHJldHVybnMgYGZhbHNlYCBpZiBpdGVyYXRpb24gd2FzIGJyb2tlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IHNlbGVjdG9ycyA9IFtdO1xuICAgICAqIHJvb3Qud2Fsa1J1bGVzKHJ1bGUgPT4ge1xuICAgICAqICAgc2VsZWN0b3JzLnB1c2gocnVsZS5zZWxlY3Rvcik7XG4gICAgICogfSk7XG4gICAgICogY29uc29sZS5sb2coYFlvdXIgQ1NTIHVzZXMgJHtzZWxlY3RvcnMubGVuZ3RofSBzZWxlY3RvcnNgKTtcbiAgICAgKi9cbiAgICB3YWxrUnVsZXMoc2VsZWN0b3IsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICggIWNhbGxiYWNrICkge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBzZWxlY3RvcjtcblxuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2FsayggKGNoaWxkLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCBjaGlsZC50eXBlID09PSAncnVsZScgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhjaGlsZCwgaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSBpZiAoIHNlbGVjdG9yIGluc3RhbmNlb2YgUmVnRXhwICkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2FsayggKGNoaWxkLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCBjaGlsZC50eXBlID09PSAncnVsZScgJiYgc2VsZWN0b3IudGVzdChjaGlsZC5zZWxlY3RvcikgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhjaGlsZCwgaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy53YWxrKCAoY2hpbGQsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIGNoaWxkLnR5cGUgPT09ICdydWxlJyAmJiBjaGlsZC5zZWxlY3RvciA9PT0gc2VsZWN0b3IgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhjaGlsZCwgaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmF2ZXJzZXMgdGhlIGNvbnRhaW5lcuKAmXMgZGVzY2VuZGFudCBub2RlcywgY2FsbGluZyBjYWxsYmFja1xuICAgICAqIGZvciBlYWNoIGF0LXJ1bGUgbm9kZS5cbiAgICAgKlxuICAgICAqIElmIHlvdSBwYXNzIGEgZmlsdGVyLCBpdGVyYXRpb24gd2lsbCBvbmx5IGhhcHBlbiBvdmVyIGF0LXJ1bGVzXG4gICAgICogdGhhdCBoYXZlIG1hdGNoaW5nIG5hbWVzLlxuICAgICAqXG4gICAgICogTGlrZSB7QGxpbmsgQ29udGFpbmVyI2VhY2h9LCB0aGlzIG1ldGhvZCBpcyBzYWZlXG4gICAgICogdG8gdXNlIGlmIHlvdSBhcmUgbXV0YXRpbmcgYXJyYXlzIGR1cmluZyBpdGVyYXRpb24uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xSZWdFeHB9IFtuYW1lXSAgIC0gc3RyaW5nIG9yIHJlZ3VsYXIgZXhwcmVzc2lvblxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBmaWx0ZXIgYXQtcnVsZXMgYnkgbmFtZVxuICAgICAqIEBwYXJhbSB7Y2hpbGRJdGVyYXRvcn0gY2FsbGJhY2sgLSBpdGVyYXRvciByZWNlaXZlcyBlYWNoIG5vZGUgYW5kIGluZGV4XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtmYWxzZXx1bmRlZmluZWR9IHJldHVybnMgYGZhbHNlYCBpZiBpdGVyYXRpb24gd2FzIGJyb2tlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHJvb3Qud2Fsa0F0UnVsZXMocnVsZSA9PiB7XG4gICAgICogICBpZiAoIGlzT2xkKHJ1bGUubmFtZSkgKSBydWxlLnJlbW92ZSgpO1xuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogbGV0IGZpcnN0ID0gZmFsc2U7XG4gICAgICogcm9vdC53YWxrQXRSdWxlcygnY2hhcnNldCcsIHJ1bGUgPT4ge1xuICAgICAqICAgaWYgKCAhZmlyc3QgKSB7XG4gICAgICogICAgIGZpcnN0ID0gdHJ1ZTtcbiAgICAgKiAgIH0gZWxzZSB7XG4gICAgICogICAgIHJ1bGUucmVtb3ZlKCk7XG4gICAgICogICB9XG4gICAgICogfSk7XG4gICAgICovXG4gICAgd2Fsa0F0UnVsZXMobmFtZSwgY2FsbGJhY2spIHtcbiAgICAgICAgaWYgKCAhY2FsbGJhY2sgKSB7XG4gICAgICAgICAgICBjYWxsYmFjayA9IG5hbWU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy53YWxrKCAoY2hpbGQsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIGNoaWxkLnR5cGUgPT09ICdhdHJ1bGUnICkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2FsbGJhY2soY2hpbGQsIGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2UgaWYgKCBuYW1lIGluc3RhbmNlb2YgUmVnRXhwICkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMud2FsayggKGNoaWxkLCBpKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKCBjaGlsZC50eXBlID09PSAnYXRydWxlJyAmJiBuYW1lLnRlc3QoY2hpbGQubmFtZSkgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhjaGlsZCwgaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy53YWxrKCAoY2hpbGQsIGkpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIGNoaWxkLnR5cGUgPT09ICdhdHJ1bGUnICYmIGNoaWxkLm5hbWUgPT09IG5hbWUgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhjaGlsZCwgaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUcmF2ZXJzZXMgdGhlIGNvbnRhaW5lcuKAmXMgZGVzY2VuZGFudCBub2RlcywgY2FsbGluZyBjYWxsYmFja1xuICAgICAqIGZvciBlYWNoIGNvbW1lbnQgbm9kZS5cbiAgICAgKlxuICAgICAqIExpa2Uge0BsaW5rIENvbnRhaW5lciNlYWNofSwgdGhpcyBtZXRob2QgaXMgc2FmZVxuICAgICAqIHRvIHVzZSBpZiB5b3UgYXJlIG11dGF0aW5nIGFycmF5cyBkdXJpbmcgaXRlcmF0aW9uLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtjaGlsZEl0ZXJhdG9yfSBjYWxsYmFjayAtIGl0ZXJhdG9yIHJlY2VpdmVzIGVhY2ggbm9kZSBhbmQgaW5kZXhcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge2ZhbHNlfHVuZGVmaW5lZH0gcmV0dXJucyBgZmFsc2VgIGlmIGl0ZXJhdGlvbiB3YXMgYnJva2VcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogcm9vdC53YWxrQ29tbWVudHMoY29tbWVudCA9PiB7XG4gICAgICogICBjb21tZW50LnJlbW92ZSgpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHdhbGtDb21tZW50cyhjYWxsYmFjaykge1xuICAgICAgICByZXR1cm4gdGhpcy53YWxrKCAoY2hpbGQsIGkpID0+IHtcbiAgICAgICAgICAgIGlmICggY2hpbGQudHlwZSA9PT0gJ2NvbW1lbnQnICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBjYWxsYmFjayhjaGlsZCwgaSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluc2VydHMgbmV3IG5vZGVzIHRvIHRoZSBlbmQgb2YgdGhlIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Li4uKE5vZGV8b2JqZWN0fHN0cmluZ3xOb2RlW10pfSBjaGlsZHJlbiAtIG5ldyBub2Rlc1xuICAgICAqXG4gICAgICogQHJldHVybiB7Tm9kZX0gdGhpcyBub2RlIGZvciBtZXRob2RzIGNoYWluXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IGRlY2wxID0gcG9zdGNzcy5kZWNsKHsgcHJvcDogJ2NvbG9yJywgdmFsdWU6ICdibGFjaycgfSk7XG4gICAgICogY29uc3QgZGVjbDIgPSBwb3N0Y3NzLmRlY2woeyBwcm9wOiAnYmFja2dyb3VuZC1jb2xvcicsIHZhbHVlOiAnd2hpdGUnIH0pO1xuICAgICAqIHJ1bGUuYXBwZW5kKGRlY2wxLCBkZWNsMik7XG4gICAgICpcbiAgICAgKiByb290LmFwcGVuZCh7IG5hbWU6ICdjaGFyc2V0JywgcGFyYW1zOiAnXCJVVEYtOFwiJyB9KTsgIC8vIGF0LXJ1bGVcbiAgICAgKiByb290LmFwcGVuZCh7IHNlbGVjdG9yOiAnYScgfSk7ICAgICAgICAgICAgICAgICAgICAgICAvLyBydWxlXG4gICAgICogcnVsZS5hcHBlbmQoeyBwcm9wOiAnY29sb3InLCB2YWx1ZTogJ2JsYWNrJyB9KTsgICAgICAgLy8gZGVjbGFyYXRpb25cbiAgICAgKiBydWxlLmFwcGVuZCh7IHRleHQ6ICdDb21tZW50JyB9KSAgICAgICAgICAgICAgICAgICAgICAvLyBjb21tZW50XG4gICAgICpcbiAgICAgKiByb290LmFwcGVuZCgnYSB7fScpO1xuICAgICAqIHJvb3QuZmlyc3QuYXBwZW5kKCdjb2xvcjogYmxhY2s7IHotaW5kZXg6IDEnKTtcbiAgICAgKi9cbiAgICBhcHBlbmQoLi4uY2hpbGRyZW4pIHtcbiAgICAgICAgZm9yICggbGV0IGNoaWxkIG9mIGNoaWxkcmVuICkge1xuICAgICAgICAgICAgbGV0IG5vZGVzID0gdGhpcy5ub3JtYWxpemUoY2hpbGQsIHRoaXMubGFzdCk7XG4gICAgICAgICAgICBmb3IgKCBsZXQgbm9kZSBvZiBub2RlcyApIHRoaXMubm9kZXMucHVzaChub2RlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnNlcnRzIG5ldyBub2RlcyB0byB0aGUgc3RhcnQgb2YgdGhlIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Li4uKE5vZGV8b2JqZWN0fHN0cmluZ3xOb2RlW10pfSBjaGlsZHJlbiAtIG5ldyBub2Rlc1xuICAgICAqXG4gICAgICogQHJldHVybiB7Tm9kZX0gdGhpcyBub2RlIGZvciBtZXRob2RzIGNoYWluXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IGRlY2wxID0gcG9zdGNzcy5kZWNsKHsgcHJvcDogJ2NvbG9yJywgdmFsdWU6ICdibGFjaycgfSk7XG4gICAgICogY29uc3QgZGVjbDIgPSBwb3N0Y3NzLmRlY2woeyBwcm9wOiAnYmFja2dyb3VuZC1jb2xvcicsIHZhbHVlOiAnd2hpdGUnIH0pO1xuICAgICAqIHJ1bGUucHJlcGVuZChkZWNsMSwgZGVjbDIpO1xuICAgICAqXG4gICAgICogcm9vdC5hcHBlbmQoeyBuYW1lOiAnY2hhcnNldCcsIHBhcmFtczogJ1wiVVRGLThcIicgfSk7ICAvLyBhdC1ydWxlXG4gICAgICogcm9vdC5hcHBlbmQoeyBzZWxlY3RvcjogJ2EnIH0pOyAgICAgICAgICAgICAgICAgICAgICAgLy8gcnVsZVxuICAgICAqIHJ1bGUuYXBwZW5kKHsgcHJvcDogJ2NvbG9yJywgdmFsdWU6ICdibGFjaycgfSk7ICAgICAgIC8vIGRlY2xhcmF0aW9uXG4gICAgICogcnVsZS5hcHBlbmQoeyB0ZXh0OiAnQ29tbWVudCcgfSkgICAgICAgICAgICAgICAgICAgICAgLy8gY29tbWVudFxuICAgICAqXG4gICAgICogcm9vdC5hcHBlbmQoJ2Ege30nKTtcbiAgICAgKiByb290LmZpcnN0LmFwcGVuZCgnY29sb3I6IGJsYWNrOyB6LWluZGV4OiAxJyk7XG4gICAgICovXG4gICAgcHJlcGVuZCguLi5jaGlsZHJlbikge1xuICAgICAgICBjaGlsZHJlbiA9IGNoaWxkcmVuLnJldmVyc2UoKTtcbiAgICAgICAgZm9yICggbGV0IGNoaWxkIG9mIGNoaWxkcmVuICkge1xuICAgICAgICAgICAgbGV0IG5vZGVzID0gdGhpcy5ub3JtYWxpemUoY2hpbGQsIHRoaXMuZmlyc3QsICdwcmVwZW5kJykucmV2ZXJzZSgpO1xuICAgICAgICAgICAgZm9yICggbGV0IG5vZGUgb2Ygbm9kZXMgKSB0aGlzLm5vZGVzLnVuc2hpZnQobm9kZSk7XG4gICAgICAgICAgICBmb3IgKCBsZXQgaWQgaW4gdGhpcy5pbmRleGVzICkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhlc1tpZF0gPSB0aGlzLmluZGV4ZXNbaWRdICsgbm9kZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIGNsZWFuUmF3cyhrZWVwQmV0d2Vlbikge1xuICAgICAgICBzdXBlci5jbGVhblJhd3Moa2VlcEJldHdlZW4pO1xuICAgICAgICBpZiAoIHRoaXMubm9kZXMgKSB7XG4gICAgICAgICAgICBmb3IgKCBsZXQgbm9kZSBvZiB0aGlzLm5vZGVzICkgbm9kZS5jbGVhblJhd3Moa2VlcEJldHdlZW4pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5zZXJ0IG5ldyBub2RlIGJlZm9yZSBvbGQgbm9kZSB3aXRoaW4gdGhlIGNvbnRhaW5lci5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Tm9kZXxudW1iZXJ9IGV4aXN0ICAgICAgICAgICAgIC0gY2hpbGQgb3IgY2hpbGTigJlzIGluZGV4LlxuICAgICAqIEBwYXJhbSB7Tm9kZXxvYmplY3R8c3RyaW5nfE5vZGVbXX0gYWRkIC0gbmV3IG5vZGVcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge05vZGV9IHRoaXMgbm9kZSBmb3IgbWV0aG9kcyBjaGFpblxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBydWxlLmluc2VydEJlZm9yZShkZWNsLCBkZWNsLmNsb25lKHsgcHJvcDogJy13ZWJraXQtJyArIGRlY2wucHJvcCB9KSk7XG4gICAgICovXG4gICAgaW5zZXJ0QmVmb3JlKGV4aXN0LCBhZGQpIHtcbiAgICAgICAgZXhpc3QgPSB0aGlzLmluZGV4KGV4aXN0KTtcblxuICAgICAgICBsZXQgdHlwZSAgPSBleGlzdCA9PT0gMCA/ICdwcmVwZW5kJyA6IGZhbHNlO1xuICAgICAgICBsZXQgbm9kZXMgPSB0aGlzLm5vcm1hbGl6ZShhZGQsIHRoaXMubm9kZXNbZXhpc3RdLCB0eXBlKS5yZXZlcnNlKCk7XG4gICAgICAgIGZvciAoIGxldCBub2RlIG9mIG5vZGVzICkgdGhpcy5ub2Rlcy5zcGxpY2UoZXhpc3QsIDAsIG5vZGUpO1xuXG4gICAgICAgIGxldCBpbmRleDtcbiAgICAgICAgZm9yICggbGV0IGlkIGluIHRoaXMuaW5kZXhlcyApIHtcbiAgICAgICAgICAgIGluZGV4ID0gdGhpcy5pbmRleGVzW2lkXTtcbiAgICAgICAgICAgIGlmICggZXhpc3QgPD0gaW5kZXggKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbmRleGVzW2lkXSA9IGluZGV4ICsgbm9kZXMubGVuZ3RoO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5zZXJ0IG5ldyBub2RlIGFmdGVyIG9sZCBub2RlIHdpdGhpbiB0aGUgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtOb2RlfG51bWJlcn0gZXhpc3QgICAgICAgICAgICAgLSBjaGlsZCBvciBjaGlsZOKAmXMgaW5kZXhcbiAgICAgKiBAcGFyYW0ge05vZGV8b2JqZWN0fHN0cmluZ3xOb2RlW119IGFkZCAtIG5ldyBub2RlXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtOb2RlfSB0aGlzIG5vZGUgZm9yIG1ldGhvZHMgY2hhaW5cbiAgICAgKi9cbiAgICBpbnNlcnRBZnRlcihleGlzdCwgYWRkKSB7XG4gICAgICAgIGV4aXN0ID0gdGhpcy5pbmRleChleGlzdCk7XG5cbiAgICAgICAgbGV0IG5vZGVzID0gdGhpcy5ub3JtYWxpemUoYWRkLCB0aGlzLm5vZGVzW2V4aXN0XSkucmV2ZXJzZSgpO1xuICAgICAgICBmb3IgKCBsZXQgbm9kZSBvZiBub2RlcyApIHRoaXMubm9kZXMuc3BsaWNlKGV4aXN0ICsgMSwgMCwgbm9kZSk7XG5cbiAgICAgICAgbGV0IGluZGV4O1xuICAgICAgICBmb3IgKCBsZXQgaWQgaW4gdGhpcy5pbmRleGVzICkge1xuICAgICAgICAgICAgaW5kZXggPSB0aGlzLmluZGV4ZXNbaWRdO1xuICAgICAgICAgICAgaWYgKCBleGlzdCA8IGluZGV4ICkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhlc1tpZF0gPSBpbmRleCArIG5vZGVzLmxlbmd0aDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgbm9kZSBmcm9tIHRoZSBjb250YWluZXIgYW5kIGNsZWFucyB0aGUgcGFyZW50IHByb3BlcnRpZXNcbiAgICAgKiBmcm9tIHRoZSBub2RlIGFuZCBpdHMgY2hpbGRyZW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge05vZGV8bnVtYmVyfSBjaGlsZCAtIGNoaWxkIG9yIGNoaWxk4oCZcyBpbmRleFxuICAgICAqXG4gICAgICogQHJldHVybiB7Tm9kZX0gdGhpcyBub2RlIGZvciBtZXRob2RzIGNoYWluXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHJ1bGUubm9kZXMubGVuZ3RoICAvLz0+IDVcbiAgICAgKiBydWxlLnJlbW92ZUNoaWxkKGRlY2wpO1xuICAgICAqIHJ1bGUubm9kZXMubGVuZ3RoICAvLz0+IDRcbiAgICAgKiBkZWNsLnBhcmVudCAgICAgICAgLy89PiB1bmRlZmluZWRcbiAgICAgKi9cbiAgICByZW1vdmVDaGlsZChjaGlsZCkge1xuICAgICAgICBjaGlsZCA9IHRoaXMuaW5kZXgoY2hpbGQpO1xuICAgICAgICB0aGlzLm5vZGVzW2NoaWxkXS5wYXJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubm9kZXMuc3BsaWNlKGNoaWxkLCAxKTtcblxuICAgICAgICBsZXQgaW5kZXg7XG4gICAgICAgIGZvciAoIGxldCBpZCBpbiB0aGlzLmluZGV4ZXMgKSB7XG4gICAgICAgICAgICBpbmRleCA9IHRoaXMuaW5kZXhlc1tpZF07XG4gICAgICAgICAgICBpZiAoIGluZGV4ID49IGNoaWxkICkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5kZXhlc1tpZF0gPSBpbmRleCAtIDE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZW1vdmVzIGFsbCBjaGlsZHJlbiBmcm9tIHRoZSBjb250YWluZXJcbiAgICAgKiBhbmQgY2xlYW5zIHRoZWlyIHBhcmVudCBwcm9wZXJ0aWVzLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Tm9kZX0gdGhpcyBub2RlIGZvciBtZXRob2RzIGNoYWluXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHJ1bGUucmVtb3ZlQWxsKCk7XG4gICAgICogcnVsZS5ub2Rlcy5sZW5ndGggLy89PiAwXG4gICAgICovXG4gICAgcmVtb3ZlQWxsKCkge1xuICAgICAgICBmb3IgKCBsZXQgbm9kZSBvZiB0aGlzLm5vZGVzICkgbm9kZS5wYXJlbnQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRoaXMubm9kZXMgPSBbXTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFzc2VzIGFsbCBkZWNsYXJhdGlvbiB2YWx1ZXMgd2l0aGluIHRoZSBjb250YWluZXIgdGhhdCBtYXRjaCBwYXR0ZXJuXG4gICAgICogdGhyb3VnaCBjYWxsYmFjaywgcmVwbGFjaW5nIHRob3NlIHZhbHVlcyB3aXRoIHRoZSByZXR1cm5lZCByZXN1bHRcbiAgICAgKiBvZiBjYWxsYmFjay5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIGlzIHVzZWZ1bCBpZiB5b3UgYXJlIHVzaW5nIGEgY3VzdG9tIHVuaXQgb3IgZnVuY3Rpb25cbiAgICAgKiBhbmQgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIHZhbHVlcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gcGF0dGVybiAgICAgIC0gcmVwbGFjZSBwYXR0ZXJuXG4gICAgICogQHBhcmFtIHtvYmplY3R9IG9wdHMgICAgICAgICAgICAgICAgLSBvcHRpb25zIHRvIHNwZWVkIHVwIHRoZSBzZWFyY2hcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xzdHJpbmdbXX0gb3B0cy5wcm9wcyAtIGFuIGFycmF5IG9mIHByb3BlcnR5IG5hbWVzXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMuZmFzdCAgICAgICAgICAgLSBzdHJpbmcgdGhhdOKAmXMgdXNlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gbmFycm93IGRvd24gdmFsdWVzIGFuZCBzcGVlZCB1cFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHJlZ2V4cCBzZWFyY2hcbiAgICAgKiBAcGFyYW0ge2Z1bmN0aW9ufHN0cmluZ30gY2FsbGJhY2sgICAtIHN0cmluZyB0byByZXBsYWNlIHBhdHRlcm5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGNhbGxiYWNrIHRoYXQgcmV0dXJucyBhIG5ld1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUgY2FsbGJhY2sgd2lsbCByZWNlaXZlXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc2FtZSBhcmd1bWVudHMgYXMgdGhvc2VcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhc3NlZCB0byBhIGZ1bmN0aW9uIHBhcmFtZXRlclxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgYFN0cmluZyNyZXBsYWNlYC5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge05vZGV9IHRoaXMgbm9kZSBmb3IgbWV0aG9kcyBjaGFpblxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiByb290LnJlcGxhY2VWYWx1ZXMoL1xcZCtyZW0vLCB7IGZhc3Q6ICdyZW0nIH0sIHN0cmluZyA9PiB7XG4gICAgICogICByZXR1cm4gMTUgKiBwYXJzZUludChzdHJpbmcpICsgJ3B4JztcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICByZXBsYWNlVmFsdWVzKHBhdHRlcm4sIG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICggIWNhbGxiYWNrICkge1xuICAgICAgICAgICAgY2FsbGJhY2sgPSBvcHRzO1xuICAgICAgICAgICAgb3B0cyA9IHsgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMud2Fsa0RlY2xzKCBkZWNsID0+IHtcbiAgICAgICAgICAgIGlmICggb3B0cy5wcm9wcyAmJiBvcHRzLnByb3BzLmluZGV4T2YoZGVjbC5wcm9wKSA9PT0gLTEgKSByZXR1cm47XG4gICAgICAgICAgICBpZiAoIG9wdHMuZmFzdCAgJiYgZGVjbC52YWx1ZS5pbmRleE9mKG9wdHMuZmFzdCkgPT09IC0xICkgcmV0dXJuO1xuXG4gICAgICAgICAgICBkZWNsLnZhbHVlID0gZGVjbC52YWx1ZS5yZXBsYWNlKHBhdHRlcm4sIGNhbGxiYWNrKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWBcbiAgICAgKiBmb3IgYWxsIG9mIHRoZSBjb250YWluZXLigJlzIGNoaWxkcmVuLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtjaGlsZENvbmRpdGlvbn0gY29uZGl0aW9uIC0gaXRlcmF0b3IgcmV0dXJucyB0cnVlIG9yIGZhbHNlLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Ym9vbGVhbn0gaXMgZXZlcnkgY2hpbGQgcGFzcyBjb25kaXRpb25cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc3Qgbm9QcmVmaXhlcyA9IHJ1bGUuZXZlcnkoaSA9PiBpLnByb3BbMF0gIT09ICctJyk7XG4gICAgICovXG4gICAgZXZlcnkoY29uZGl0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVzLmV2ZXJ5KGNvbmRpdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBgdHJ1ZWAgaWYgY2FsbGJhY2sgcmV0dXJucyBgdHJ1ZWAgZm9yIChhdCBsZWFzdCkgb25lXG4gICAgICogb2YgdGhlIGNvbnRhaW5lcuKAmXMgY2hpbGRyZW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge2NoaWxkQ29uZGl0aW9ufSBjb25kaXRpb24gLSBpdGVyYXRvciByZXR1cm5zIHRydWUgb3IgZmFsc2UuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBpcyBzb21lIGNoaWxkIHBhc3MgY29uZGl0aW9uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IGhhc1ByZWZpeCA9IHJ1bGUuc29tZShpID0+IGkucHJvcFswXSA9PT0gJy0nKTtcbiAgICAgKi9cbiAgICBzb21lKGNvbmRpdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5ub2Rlcy5zb21lKGNvbmRpdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyBhIGBjaGlsZGDigJlzIGluZGV4IHdpdGhpbiB0aGUge0BsaW5rIENvbnRhaW5lciNub2Rlc30gYXJyYXkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge05vZGV9IGNoaWxkIC0gY2hpbGQgb2YgdGhlIGN1cnJlbnQgY29udGFpbmVyLlxuICAgICAqXG4gICAgICogQHJldHVybiB7bnVtYmVyfSBjaGlsZCBpbmRleFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBydWxlLmluZGV4KCBydWxlLm5vZGVzWzJdICkgLy89PiAyXG4gICAgICovXG4gICAgaW5kZXgoY2hpbGQpIHtcbiAgICAgICAgaWYgKCB0eXBlb2YgY2hpbGQgPT09ICdudW1iZXInICkge1xuICAgICAgICAgICAgcmV0dXJuIGNoaWxkO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubm9kZXMuaW5kZXhPZihjaGlsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgY29udGFpbmVy4oCZcyBmaXJzdCBjaGlsZC5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtOb2RlfVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBydWxlLmZpcnN0ID09IHJ1bGVzLm5vZGVzWzBdO1xuICAgICAqL1xuICAgIGdldCBmaXJzdCgpIHtcbiAgICAgICAgaWYgKCAhdGhpcy5ub2RlcyApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVzWzBdO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSBjb250YWluZXLigJlzIGxhc3QgY2hpbGQuXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Tm9kZX1cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogcnVsZS5sYXN0ID09IHJ1bGUubm9kZXNbcnVsZS5ub2Rlcy5sZW5ndGggLSAxXTtcbiAgICAgKi9cbiAgICBnZXQgbGFzdCgpIHtcbiAgICAgICAgaWYgKCAhdGhpcy5ub2RlcyApIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB0aGlzLm5vZGVzW3RoaXMubm9kZXMubGVuZ3RoIC0gMV07XG4gICAgfVxuXG4gICAgbm9ybWFsaXplKG5vZGVzLCBzYW1wbGUpIHtcbiAgICAgICAgaWYgKCB0eXBlb2Ygbm9kZXMgPT09ICdzdHJpbmcnICkge1xuICAgICAgICAgICAgbGV0IHBhcnNlID0gcmVxdWlyZSgnLi9wYXJzZScpO1xuICAgICAgICAgICAgbm9kZXMgPSBjbGVhblNvdXJjZShwYXJzZShub2Rlcykubm9kZXMpO1xuICAgICAgICB9IGVsc2UgaWYgKCBBcnJheS5pc0FycmF5KG5vZGVzKSApIHtcbiAgICAgICAgICAgIG5vZGVzID0gbm9kZXMuc2xpY2UoMCk7XG4gICAgICAgICAgICBmb3IgKCBsZXQgaSBvZiBub2RlcyApIHtcbiAgICAgICAgICAgICAgICBpZiAoIGkucGFyZW50ICkgaS5wYXJlbnQucmVtb3ZlQ2hpbGQoaSwgJ2lnbm9yZScpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKCBub2Rlcy50eXBlID09PSAncm9vdCcgKSB7XG4gICAgICAgICAgICBub2RlcyA9IG5vZGVzLm5vZGVzLnNsaWNlKDApO1xuICAgICAgICAgICAgZm9yICggbGV0IGkgb2Ygbm9kZXMgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCBpLnBhcmVudCApIGkucGFyZW50LnJlbW92ZUNoaWxkKGksICdpZ25vcmUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICggbm9kZXMudHlwZSApIHtcbiAgICAgICAgICAgIG5vZGVzID0gW25vZGVzXTtcbiAgICAgICAgfSBlbHNlIGlmICggbm9kZXMucHJvcCApIHtcbiAgICAgICAgICAgIGlmICggdHlwZW9mIG5vZGVzLnZhbHVlID09PSAndW5kZWZpbmVkJyApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZhbHVlIGZpZWxkIGlzIG1pc3NlZCBpbiBub2RlIGNyZWF0aW9uJyk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2Ygbm9kZXMudmFsdWUgIT09ICdzdHJpbmcnICkge1xuICAgICAgICAgICAgICAgIG5vZGVzLnZhbHVlID0gU3RyaW5nKG5vZGVzLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGVzID0gW25ldyBEZWNsYXJhdGlvbihub2RlcyldO1xuICAgICAgICB9IGVsc2UgaWYgKCBub2Rlcy5zZWxlY3RvciApIHtcbiAgICAgICAgICAgIGxldCBSdWxlID0gcmVxdWlyZSgnLi9ydWxlJyk7XG4gICAgICAgICAgICBub2RlcyA9IFtuZXcgUnVsZShub2RlcyldO1xuICAgICAgICB9IGVsc2UgaWYgKCBub2Rlcy5uYW1lICkge1xuICAgICAgICAgICAgbGV0IEF0UnVsZSA9IHJlcXVpcmUoJy4vYXQtcnVsZScpO1xuICAgICAgICAgICAgbm9kZXMgPSBbbmV3IEF0UnVsZShub2RlcyldO1xuICAgICAgICB9IGVsc2UgaWYgKCBub2Rlcy50ZXh0ICkge1xuICAgICAgICAgICAgbm9kZXMgPSBbbmV3IENvbW1lbnQobm9kZXMpXTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5rbm93biBub2RlIHR5cGUgaW4gbm9kZSBjcmVhdGlvbicpO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHByb2Nlc3NlZCA9IG5vZGVzLm1hcCggaSA9PiB7XG4gICAgICAgICAgICBpZiAoIHR5cGVvZiBpLmJlZm9yZSAhPT0gJ2Z1bmN0aW9uJyApIGkgPSB0aGlzLnJlYnVpbGQoaSk7XG5cbiAgICAgICAgICAgIGlmICggaS5wYXJlbnQgKSBpLnBhcmVudC5yZW1vdmVDaGlsZChpKTtcbiAgICAgICAgICAgIGlmICggdHlwZW9mIGkucmF3cy5iZWZvcmUgPT09ICd1bmRlZmluZWQnICkge1xuICAgICAgICAgICAgICAgIGlmICggc2FtcGxlICYmIHR5cGVvZiBzYW1wbGUucmF3cy5iZWZvcmUgIT09ICd1bmRlZmluZWQnICkge1xuICAgICAgICAgICAgICAgICAgICBpLnJhd3MuYmVmb3JlID0gc2FtcGxlLnJhd3MuYmVmb3JlLnJlcGxhY2UoL1teXFxzXS9nLCAnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaS5wYXJlbnQgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIGk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBwcm9jZXNzZWQ7XG4gICAgfVxuXG4gICAgcmVidWlsZChub2RlLCBwYXJlbnQpIHtcbiAgICAgICAgbGV0IGZpeDtcbiAgICAgICAgaWYgKCBub2RlLnR5cGUgPT09ICdyb290JyApIHtcbiAgICAgICAgICAgIGxldCBSb290ID0gcmVxdWlyZSgnLi9yb290Jyk7XG4gICAgICAgICAgICBmaXggPSBuZXcgUm9vdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKCBub2RlLnR5cGUgPT09ICdhdHJ1bGUnICkge1xuICAgICAgICAgICAgbGV0IEF0UnVsZSA9IHJlcXVpcmUoJy4vYXQtcnVsZScpO1xuICAgICAgICAgICAgZml4ID0gbmV3IEF0UnVsZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKCBub2RlLnR5cGUgPT09ICdydWxlJyApIHtcbiAgICAgICAgICAgIGxldCBSdWxlID0gcmVxdWlyZSgnLi9ydWxlJyk7XG4gICAgICAgICAgICBmaXggPSBuZXcgUnVsZSgpO1xuICAgICAgICB9IGVsc2UgaWYgKCBub2RlLnR5cGUgPT09ICdkZWNsJyApIHtcbiAgICAgICAgICAgIGZpeCA9IG5ldyBEZWNsYXJhdGlvbigpO1xuICAgICAgICB9IGVsc2UgaWYgKCBub2RlLnR5cGUgPT09ICdjb21tZW50JyApIHtcbiAgICAgICAgICAgIGZpeCA9IG5ldyBDb21tZW50KCk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgKCBsZXQgaSBpbiBub2RlICkge1xuICAgICAgICAgICAgaWYgKCBpID09PSAnbm9kZXMnICkge1xuICAgICAgICAgICAgICAgIGZpeC5ub2RlcyA9IG5vZGUubm9kZXMubWFwKCBqID0+IHRoaXMucmVidWlsZChqLCBmaXgpICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCBpID09PSAncGFyZW50JyAmJiBwYXJlbnQgKSB7XG4gICAgICAgICAgICAgICAgZml4LnBhcmVudCA9IHBhcmVudDtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIG5vZGUuaGFzT3duUHJvcGVydHkoaSkgKSB7XG4gICAgICAgICAgICAgICAgZml4W2ldID0gbm9kZVtpXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmaXg7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIENvbnRhaW5lciNcbiAgICAgKiBAbWVtYmVyIHtOb2RlW119IG5vZGVzIC0gYW4gYXJyYXkgY29udGFpbmluZyB0aGUgY29udGFpbmVy4oCZcyBjaGlsZHJlblxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZSgnYSB7IGNvbG9yOiBibGFjayB9Jyk7XG4gICAgICogcm9vdC5ub2Rlcy5sZW5ndGggICAgICAgICAgIC8vPT4gMVxuICAgICAqIHJvb3Qubm9kZXNbMF0uc2VsZWN0b3IgICAgICAvLz0+ICdhJ1xuICAgICAqIHJvb3Qubm9kZXNbMF0ubm9kZXNbMF0ucHJvcCAvLz0+ICdjb2xvcidcbiAgICAgKi9cblxufVxuXG5leHBvcnQgZGVmYXVsdCBDb250YWluZXI7XG5cblxuLyoqXG4gKiBAY2FsbGJhY2sgY2hpbGRDb25kaXRpb25cbiAqIEBwYXJhbSB7Tm9kZX0gbm9kZSAgICAtIGNvbnRhaW5lciBjaGlsZFxuICogQHBhcmFtIHtudW1iZXJ9IGluZGV4IC0gY2hpbGQgaW5kZXhcbiAqIEBwYXJhbSB7Tm9kZVtdfSBub2RlcyAtIGFsbCBjb250YWluZXIgY2hpbGRyZW5cbiAqIEByZXR1cm4ge2Jvb2xlYW59XG4gKi9cblxuLyoqXG4gKiBAY2FsbGJhY2sgY2hpbGRJdGVyYXRvclxuICogQHBhcmFtIHtOb2RlfSBub2RlICAgIC0gY29udGFpbmVyIGNoaWxkXG4gKiBAcGFyYW0ge251bWJlcn0gaW5kZXggLSBjaGlsZCBpbmRleFxuICogQHJldHVybiB7ZmFsc2V8dW5kZWZpbmVkfSByZXR1cm5pbmcgYGZhbHNlYCB3aWxsIGJyZWFrIGl0ZXJhdGlvblxuICovXG4iXX0=
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/css-syntax-error.js b/node_modules/postcss-reporter/node_modules/postcss/lib/css-syntax-error.js
new file mode 100644
index 00000000..99e06ed1
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/css-syntax-error.js
@@ -0,0 +1,256 @@
+'use strict';
+
+exports.__esModule = true;
+
+var _supportsColor = require('supports-color');
+
+var _supportsColor2 = _interopRequireDefault(_supportsColor);
+
+var _chalk = require('chalk');
+
+var _chalk2 = _interopRequireDefault(_chalk);
+
+var _terminalHighlight = require('./terminal-highlight');
+
+var _terminalHighlight2 = _interopRequireDefault(_terminalHighlight);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+/**
+ * The CSS parser throws this error for broken CSS.
+ *
+ * Custom parsers can throw this error for broken custom syntax using
+ * the {@link Node#error} method.
+ *
+ * PostCSS will use the input source map to detect the original error location.
+ * If you wrote a Sass file, compiled it to CSS and then parsed it with PostCSS,
+ * PostCSS will show the original position in the Sass file.
+ *
+ * If you need the position in the PostCSS input
+ * (e.g., to debug the previous compiler), use `error.input.file`.
+ *
+ * @example
+ * // Catching and checking syntax error
+ * try {
+ * postcss.parse('a{')
+ * } catch (error) {
+ * if ( error.name === 'CssSyntaxError' ) {
+ * error //=> CssSyntaxError
+ * }
+ * }
+ *
+ * @example
+ * // Raising error from plugin
+ * throw node.error('Unknown variable', { plugin: 'postcss-vars' });
+ */
+var CssSyntaxError = function () {
+
+ /**
+ * @param {string} message - error message
+ * @param {number} [line] - source line of the error
+ * @param {number} [column] - source column of the error
+ * @param {string} [source] - source code of the broken file
+ * @param {string} [file] - absolute path to the broken file
+ * @param {string} [plugin] - PostCSS plugin name, if error came from plugin
+ */
+ function CssSyntaxError(message, line, column, source, file, plugin) {
+ _classCallCheck(this, CssSyntaxError);
+
+ /**
+ * @member {string} - Always equal to `'CssSyntaxError'`. You should
+ * always check error type
+ * by `error.name === 'CssSyntaxError'` instead of
+ * `error instanceof CssSyntaxError`, because
+ * npm could have several PostCSS versions.
+ *
+ * @example
+ * if ( error.name === 'CssSyntaxError' ) {
+ * error //=> CssSyntaxError
+ * }
+ */
+ this.name = 'CssSyntaxError';
+ /**
+ * @member {string} - Error message.
+ *
+ * @example
+ * error.message //=> 'Unclosed block'
+ */
+ this.reason = message;
+
+ if (file) {
+ /**
+ * @member {string} - Absolute path to the broken file.
+ *
+ * @example
+ * error.file //=> 'a.sass'
+ * error.input.file //=> 'a.css'
+ */
+ this.file = file;
+ }
+ if (source) {
+ /**
+ * @member {string} - Source code of the broken file.
+ *
+ * @example
+ * error.source //=> 'a { b {} }'
+ * error.input.column //=> 'a b { }'
+ */
+ this.source = source;
+ }
+ if (plugin) {
+ /**
+ * @member {string} - Plugin name, if error came from plugin.
+ *
+ * @example
+ * error.plugin //=> 'postcss-vars'
+ */
+ this.plugin = plugin;
+ }
+ if (typeof line !== 'undefined' && typeof column !== 'undefined') {
+ /**
+ * @member {number} - Source line of the error.
+ *
+ * @example
+ * error.line //=> 2
+ * error.input.line //=> 4
+ */
+ this.line = line;
+ /**
+ * @member {number} - Source column of the error.
+ *
+ * @example
+ * error.column //=> 1
+ * error.input.column //=> 4
+ */
+ this.column = column;
+ }
+
+ this.setMessage();
+
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(this, CssSyntaxError);
+ }
+ }
+
+ CssSyntaxError.prototype.setMessage = function setMessage() {
+ /**
+ * @member {string} - Full error text in the GNU error format
+ * with plugin, file, line and column.
+ *
+ * @example
+ * error.message //=> 'a.css:1:1: Unclosed block'
+ */
+ this.message = this.plugin ? this.plugin + ': ' : '';
+ this.message += this.file ? this.file : '<css input>';
+ if (typeof this.line !== 'undefined') {
+ this.message += ':' + this.line + ':' + this.column;
+ }
+ this.message += ': ' + this.reason;
+ };
+
+ /**
+ * Returns a few lines of CSS source that caused the error.
+ *
+ * If the CSS has an input source map without `sourceContent`,
+ * this method will return an empty string.
+ *
+ * @param {boolean} [color] whether arrow will be colored red by terminal
+ * color codes. By default, PostCSS will detect
+ * color support by `process.stdout.isTTY`
+ * and `process.env.NODE_DISABLE_COLORS`.
+ *
+ * @example
+ * error.showSourceCode() //=> " 4 | }
+ * // 5 | a {
+ * // > 6 | bad
+ * // | ^
+ * // 7 | }
+ * // 8 | b {"
+ *
+ * @return {string} few lines of CSS source that caused the error
+ */
+
+
+ CssSyntaxError.prototype.showSourceCode = function showSourceCode(color) {
+ var _this = this;
+
+ if (!this.source) return '';
+
+ var css = this.source;
+ if (typeof color === 'undefined') color = _supportsColor2.default.stdout;
+ if (color) css = (0, _terminalHighlight2.default)(css);
+
+ var lines = css.split(/\r?\n/);
+ var start = Math.max(this.line - 3, 0);
+ var end = Math.min(this.line + 2, lines.length);
+
+ var maxWidth = String(end).length;
+
+ function mark(text) {
+ if (color && _chalk2.default.red) {
+ return _chalk2.default.red.bold(text);
+ } else {
+ return text;
+ }
+ }
+ function aside(text) {
+ if (color && _chalk2.default.gray) {
+ return _chalk2.default.gray(text);
+ } else {
+ return text;
+ }
+ }
+
+ return lines.slice(start, end).map(function (line, index) {
+ var number = start + 1 + index;
+ var gutter = ' ' + (' ' + number).slice(-maxWidth) + ' | ';
+ if (number === _this.line) {
+ var spacing = aside(gutter.replace(/\d/g, ' ')) + line.slice(0, _this.column - 1).replace(/[^\t]/g, ' ');
+ return mark('>') + aside(gutter) + line + '\n ' + spacing + mark('^');
+ } else {
+ return ' ' + aside(gutter) + line;
+ }
+ }).join('\n');
+ };
+
+ /**
+ * Returns error position, message and source code of the broken part.
+ *
+ * @example
+ * error.toString() //=> "CssSyntaxError: app.css:1:1: Unclosed block
+ * // > 1 | a {
+ * // | ^"
+ *
+ * @return {string} error position, message and source code
+ */
+
+
+ CssSyntaxError.prototype.toString = function toString() {
+ var code = this.showSourceCode();
+ if (code) {
+ code = '\n\n' + code + '\n';
+ }
+ return this.name + ': ' + this.message + code;
+ };
+
+ /**
+ * @memberof CssSyntaxError#
+ * @member {Input} input - Input object with PostCSS internal information
+ * about input file. If input has source map
+ * from previous tool, PostCSS will use origin
+ * (for example, Sass) source. You can use this
+ * object to get PostCSS input source.
+ *
+ * @example
+ * error.input.file //=> 'a.css'
+ * error.file //=> 'a.sass'
+ */
+
+ return CssSyntaxError;
+}();
+
+exports.default = CssSyntaxError;
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImNzcy1zeW50YXgtZXJyb3IuZXM2Il0sIm5hbWVzIjpbIkNzc1N5bnRheEVycm9yIiwibWVzc2FnZSIsImxpbmUiLCJjb2x1bW4iLCJzb3VyY2UiLCJmaWxlIiwicGx1Z2luIiwibmFtZSIsInJlYXNvbiIsInNldE1lc3NhZ2UiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwic2hvd1NvdXJjZUNvZGUiLCJjb2xvciIsImNzcyIsInN1cHBvcnRzQ29sb3IiLCJzdGRvdXQiLCJsaW5lcyIsInNwbGl0Iiwic3RhcnQiLCJNYXRoIiwibWF4IiwiZW5kIiwibWluIiwibGVuZ3RoIiwibWF4V2lkdGgiLCJTdHJpbmciLCJtYXJrIiwidGV4dCIsImNoYWxrIiwicmVkIiwiYm9sZCIsImFzaWRlIiwiZ3JheSIsInNsaWNlIiwibWFwIiwiaW5kZXgiLCJudW1iZXIiLCJndXR0ZXIiLCJzcGFjaW5nIiwicmVwbGFjZSIsImpvaW4iLCJ0b1N0cmluZyIsImNvZGUiXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTs7OztBQUNBOzs7O0FBRUE7Ozs7Ozs7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztJQTJCTUEsYzs7QUFFRjs7Ozs7Ozs7QUFRQSw0QkFBWUMsT0FBWixFQUFxQkMsSUFBckIsRUFBMkJDLE1BQTNCLEVBQW1DQyxNQUFuQyxFQUEyQ0MsSUFBM0MsRUFBaURDLE1BQWpELEVBQXlEO0FBQUE7O0FBQ3JEOzs7Ozs7Ozs7Ozs7QUFZQSxhQUFLQyxJQUFMLEdBQVksZ0JBQVo7QUFDQTs7Ozs7O0FBTUEsYUFBS0MsTUFBTCxHQUFjUCxPQUFkOztBQUVBLFlBQUtJLElBQUwsRUFBWTtBQUNSOzs7Ozs7O0FBT0EsaUJBQUtBLElBQUwsR0FBWUEsSUFBWjtBQUNIO0FBQ0QsWUFBS0QsTUFBTCxFQUFjO0FBQ1Y7Ozs7Ozs7QUFPQSxpQkFBS0EsTUFBTCxHQUFjQSxNQUFkO0FBQ0g7QUFDRCxZQUFLRSxNQUFMLEVBQWM7QUFDVjs7Ozs7O0FBTUEsaUJBQUtBLE1B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QUF2QyxFQUFpRCxHQUFqRCxDQUZKO0FBR0EsdUJBQU9iLEtBQUssR0FBTCxJQUFZSyxNQUFNTSxNQUFOLENBQVosR0FBNEJwQyxJQUE1QixHQUFtQyxLQUFuQyxHQUNBcUMsT0FEQSxHQUNVWixLQUFLLEdBQUwsQ0FEakI7QUFFSCxhQU5ELE1BTU87QUFDSCx1QkFBTyxNQUFNSyxNQUFNTSxNQUFOLENBQU4sR0FBc0JwQyxJQUE3QjtBQUNIO0FBQ0osU0FaTSxFQVlKdUMsSUFaSSxDQVlDLElBWkQsQ0FBUDtBQWFILEs7O0FBRUQ7Ozs7Ozs7Ozs7Ozs2QkFVQUMsUSx1QkFBVztBQUNQLFlBQUlDLE9BQU8sS0FBSy9CLGNBQUwsRUFBWDtBQUNBLFlBQUsrQixJQUFMLEVBQVk7QUFDUkEsbUJBQU8sU0FBU0EsSUFBVCxHQUFnQixJQUF2QjtBQUNIO0FBQ0QsZUFBTyxLQUFLcEMsSUFBTCxHQUFZLElBQVosR0FBbUIsS0FBS04sT0FBeEIsR0FBa0MwQyxJQUF6QztBQUNILEs7O0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7a0JBZVczQyxjIiwiZmlsZSI6ImNzcy1zeW50YXgtZXJyb3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgc3VwcG9ydHNDb2xvciBmcm9tICdzdXBwb3J0cy1jb2xvcic7XG5pbXBvcnQgY2hhbGsgICAgICAgICBmcm9tICdjaGFsayc7XG5cbmltcG9ydCB0ZXJtaW5hbEhpZ2hsaWdodCBmcm9tICcuL3Rlcm1pbmFsLWhpZ2hsaWdodCc7XG5cbi8qKlxuICogVGhlIENTUyBwYXJzZXIgdGhyb3dzIHRoaXMgZXJyb3IgZm9yIGJyb2tlbiBDU1MuXG4gKlxuICogQ3VzdG9tIHBhcnNlcnMgY2FuIHRocm93IHRoaXMgZXJyb3IgZm9yIGJyb2tlbiBjdXN0b20gc3ludGF4IHVzaW5nXG4gKiB0aGUge0BsaW5rIE5vZGUjZXJyb3J9IG1ldGhvZC5cbiAqXG4gKiBQb3N0Q1NTIHdpbGwgdXNlIHRoZSBpbnB1dCBzb3VyY2UgbWFwIHRvIGRldGVjdCB0aGUgb3JpZ2luYWwgZXJyb3IgbG9jYXRpb24uXG4gKiBJZiB5b3Ugd3JvdGUgYSBTYXNzIGZpbGUsIGNvbXBpbGVkIGl0IHRvIENTUyBhbmQgdGhlbiBwYXJzZWQgaXQgd2l0aCBQb3N0Q1NTLFxuICogUG9zdENTUyB3aWxsIHNob3cgdGhlIG9yaWdpbmFsIHBvc2l0aW9uIGluIHRoZSBTYXNzIGZpbGUuXG4gKlxuICogSWYgeW91IG5lZWQgdGhlIHBvc2l0aW9uIGluIHRoZSBQb3N0Q1NTIGlucHV0XG4gKiAoZS5nLiwgdG8gZGVidWcgdGhlIHByZXZpb3VzIGNvbXBpbGVyKSwgdXNlIGBlcnJvci5pbnB1dC5maWxlYC5cbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gQ2F0Y2hpbmcgYW5kIGNoZWNraW5nIHN5bnRheCBlcnJvclxuICogdHJ5IHtcbiAqICAgcG9zdGNzcy5wYXJzZSgnYXsnKVxuICogfSBjYXRjaCAoZXJyb3IpIHtcbiAqICAgaWYgKCBlcnJvci5uYW1lID09PSAnQ3NzU3ludGF4RXJyb3InICkge1xuICogICAgIGVycm9yIC8vPT4gQ3NzU3ludGF4RXJyb3JcbiAqICAgfVxuICogfVxuICpcbiAqIEBleGFtcGxlXG4gKiAvLyBSYWlzaW5nIGVycm9yIGZyb20gcGx1Z2luXG4gKiB0aHJvdyBub2RlLmVycm9yKCdVbmtub3duIHZhcmlhYmxlJywgeyBwbHVnaW46ICdwb3N0Y3NzLXZhcnMnIH0pO1xuICovXG5jbGFzcyBDc3NTeW50YXhFcnJvciB7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSAgLSBlcnJvciBtZXNzYWdlXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtsaW5lXSAgIC0gc291cmNlIGxpbmUgb2YgdGhlIGVycm9yXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IFtjb2x1bW5dIC0gc291cmNlIGNvbHVtbiBvZiB0aGUgZXJyb3JcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW3NvdXJjZV0gLSBzb3VyY2UgY29kZSBvZiB0aGUgYnJva2VuIGZpbGVcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gW2ZpbGVdICAgLSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBicm9rZW4gZmlsZVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbcGx1Z2luXSAtIFBvc3RDU1MgcGx1Z2luIG5hbWUsIGlmIGVycm9yIGNhbWUgZnJvbSBwbHVnaW5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIHNvdXJjZSwgZmlsZSwgcGx1Z2luKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd9IC0gQWx3YXlzIGVxdWFsIHRvIGAnQ3NzU3ludGF4RXJyb3InYC4gWW91IHNob3VsZFxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgYWx3YXlzIGNoZWNrIGVycm9yIHR5cGVcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgIGJ5IGBlcnJvci5uYW1lID09PSAnQ3NzU3ludGF4RXJyb3InYCBpbnN0ZWFkIG9mXG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICBgZXJyb3IgaW5zdGFuY2VvZiBDc3NTeW50YXhFcnJvcmAsIGJlY2F1c2VcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgIG5wbSBjb3VsZCBoYXZlIHNldmVyYWwgUG9zdENTUyB2ZXJzaW9ucy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogaWYgKCBlcnJvci5uYW1lID09PSAnQ3NzU3ludGF4RXJyb3InICkge1xuICAgICAgICAgKiAgIGVycm9yIC8vPT4gQ3NzU3ludGF4RXJyb3JcbiAgICAgICAgICogfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5uYW1lID0gJ0Nzc1N5bnRheEVycm9yJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZW1iZXIge3N0cmluZ30gLSBFcnJvciBtZXNzYWdlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiBlcnJvci5tZXNzYWdlIC8vPT4gJ1VuY2xvc2VkIGJsb2NrJ1xuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yZWFzb24gPSBtZXNzYWdlO1xuXG4gICAgICAgIGlmICggZmlsZSApIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQG1lbWJlciB7c3RyaW5nfSAtIEFic29sdXRlIHBhdGggdG8gdGhlIGJyb2tlbiBmaWxlLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAgICAgKiBlcnJvci5maWxlICAgICAgIC8vPT4gJ2Euc2FzcydcbiAgICAgICAgICAgICAqIGVycm9yLmlucHV0LmZpbGUgLy89PiAnYS5jc3MnXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuZmlsZSA9IGZpbGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCBzb3VyY2UgKSB7XG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEBtZW1iZXIge3N0cmluZ30gLSBTb3VyY2UgY29kZSBvZiB0aGUgYnJva2VuIGZpbGUuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICAgICAqIGVycm9yLnNvdXJjZSAgICAgICAvLz0+ICdhIHsgYiB7fSB9J1xuICAgICAgICAgICAgICogZXJyb3IuaW5wdXQuY29sdW1uIC8vPT4gJ2EgYiB7IH0nXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuc291cmNlID0gc291cmNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICggcGx1Z2luICkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd9IC0gUGx1Z2luIG5hbWUsIGlmIGVycm9yIGNhbWUgZnJvbSBwbHVnaW4uXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICAgICAqIGVycm9yLnBsdWdpbiAvLz0+ICdwb3N0Y3NzLXZhcnMnXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMucGx1Z2luID0gcGx1Z2luO1xuICAgICAgICB9XG4gICAgICAgIGlmICggdHlwZW9mIGxpbmUgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBjb2x1bW4gIT09ICd1bmRlZmluZWQnICkge1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IC0gU291cmNlIGxpbmUgb2YgdGhlIGVycm9yLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAgICAgKiBlcnJvci5saW5lICAgICAgIC8vPT4gMlxuICAgICAgICAgICAgICogZXJyb3IuaW5wdXQubGluZSAvLz0+IDRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5saW5lICAgPSBsaW5lO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IC0gU291cmNlIGNvbHVtbiBvZiB0aGUgZXJyb3IuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICAgICAqIGVycm9yLmNvbHVtbiAgICAgICAvLz0+IDFcbiAgICAgICAgICAgICAqIGVycm9yLmlucHV0LmNvbHVtbiAvLz0+IDRcbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldE1lc3NhZ2UoKTtcblxuICAgICAgICBpZiAoIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlICkge1xuICAgICAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ3NzU3ludGF4RXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0TWVzc2FnZSgpIHtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZW1iZXIge3N0cmluZ30gLSBGdWxsIGVycm9yIHRleHQgaW4gdGhlIEdOVSBlcnJvciBmb3JtYXRcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgIHdpdGggcGx1Z2luLCBmaWxlLCBsaW5lIGFuZCBjb2x1bW4uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGVycm9yLm1lc3NhZ2UgLy89PiAnYS5jc3M6MToxOiBVbmNsb3NlZCBibG9jaydcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubWVzc2FnZSAgPSB0aGlzLnBsdWdpbiA/IHRoaXMucGx1Z2luICsgJzogJyA6ICcnO1xuICAgICAgICB0aGlzLm1lc3NhZ2UgKz0gdGhpcy5maWxlID8gdGhpcy5maWxlIDogJzxjc3MgaW5wdXQ+JztcbiAgICAgICAgaWYgKCB0eXBlb2YgdGhpcy5saW5lICE9PSAndW5kZWZpbmVkJyApIHtcbiAgICAgICAgICAgIHRoaXMubWVzc2FnZSArPSAnOicgKyB0aGlzLmxpbmUgKyAnOicgKyB0aGlzLmNvbHVtbjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm1lc3NhZ2UgKz0gJzogJyArIHRoaXMucmVhc29uO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSBmZXcgbGluZXMgb2YgQ1NTIHNvdXJjZSB0aGF0IGNhdXNlZCB0aGUgZXJyb3IuXG4gICAgICpcbiAgICAgKiBJZiB0aGUgQ1NTIGhhcyBhbiBpbnB1dCBzb3VyY2UgbWFwIHdpdGhvdXQgYHNvdXJjZUNvbnRlbnRgLFxuICAgICAqIHRoaXMgbWV0aG9kIHdpbGwgcmV0dXJuIGFuIGVtcHR5IHN0cmluZy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbG9yXSB3aGV0aGVyIGFycm93IHdpbGwgYmUgY29sb3JlZCByZWQgYnkgdGVybWluYWxcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3IgY29kZXMuIEJ5IGRlZmF1bHQsIFBvc3RDU1Mgd2lsbCBkZXRlY3RcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb3Igc3VwcG9ydCBieSBgcHJvY2Vzcy5zdGRvdXQuaXNUVFlgXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBgcHJvY2Vzcy5lbnYuTk9ERV9ESVNBQkxFX0NPTE9SU2AuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGVycm9yLnNob3dTb3VyY2VDb2RlKCkgLy89PiBcIiAgNCB8IH1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgNSB8IGEge1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgPiA2IHwgICBiYWRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICB8ICAgXlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICA3IHwgfVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICA4IHwgYiB7XCJcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gZmV3IGxpbmVzIG9mIENTUyBzb3VyY2UgdGhhdCBjYXVzZWQgdGhlIGVycm9yXG4gICAgICovXG4gICAgc2hvd1NvdXJjZUNvZGUoY29sb3IpIHtcbiAgICAgICAgaWYgKCAhdGhpcy5zb3VyY2UgKSByZXR1cm4gJyc7XG5cbiAgICAgICAgbGV0IGNzcyA9IHRoaXMuc291cmNlO1xuICAgICAgICBpZiAoIHR5cGVvZiBjb2xvciA9PT0gJ3VuZGVmaW5lZCcgKSBjb2xvciA9IHN1cHBvcnRzQ29sb3Iuc3Rkb3V0O1xuICAgICAgICBpZiAoIGNvbG9yICkgY3NzID0gdGVybWluYWxIaWdobGlnaHQoY3NzKTtcblxuICAgICAgICBsZXQgbGluZXMgPSBjc3Muc3BsaXQoL1xccj9cXG4vKTtcbiAgICAgICAgbGV0IHN0YXJ0ID0gTWF0aC5tYXgodGhpcy5saW5lIC0gMywgMCk7XG4gICAgICAgIGxldCBlbmQgICA9IE1hdGgubWluKHRoaXMubGluZSArIDIsIGxpbmVzLmxlbmd0aCk7XG5cbiAgICAgICAgbGV0IG1heFdpZHRoID0gU3RyaW5nKGVuZCkubGVuZ3RoO1xuXG4gICAgICAgIGZ1bmN0aW9uIG1hcmsodGV4dCkge1xuICAgICAgICAgICAgaWYgKCBjb2xvciAmJiBjaGFsay5yZWQgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoYWxrLnJlZC5ib2xkKHRleHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBhc2lkZSh0ZXh0KSB7XG4gICAgICAgICAgICBpZiAoIGNvbG9yICYmIGNoYWxrLmdyYXkgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNoYWxrLmdyYXkodGV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGxpbmVzLnNsaWNlKHN0YXJ0LCBlbmQpLm1hcCggKGxpbmUsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICBsZXQgbnVtYmVyID0gc3RhcnQgKyAxICsgaW5kZXg7XG4gICAgICAgICAgICBsZXQgZ3V0dGVyID0gJyAnICsgKCcgJyArIG51bWJlcikuc2xpY2UoLW1heFdpZHRoKSArICcgfCAnO1xuICAgICAgICAgICAgaWYgKCBudW1iZXIgPT09IHRoaXMubGluZSApIHtcbiAgICAgICAgICAgICAgICBsZXQgc3BhY2luZyA9XG4gICAgICAgICAgICAgICAgICAgIGFzaWRlKGd1dHRlci5yZXBsYWNlKC9cXGQvZywgJyAnKSkgK1xuICAgICAgICAgICAgICAgICAgICBsaW5lLnNsaWNlKDAsIHRoaXMuY29sdW1uIC0gMSkucmVwbGFjZSgvW15cXHRdL2csICcgJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hcmsoJz4nKSArIGFzaWRlKGd1dHRlcikgKyBsaW5lICsgJ1xcbiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgc3BhY2luZyArIG1hcmsoJ14nKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcgJyArIGFzaWRlKGd1dHRlcikgKyBsaW5lO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KS5qb2luKCdcXG4nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGVycm9yIHBvc2l0aW9uLCBtZXNzYWdlIGFuZCBzb3VyY2UgY29kZSBvZiB0aGUgYnJva2VuIHBhcnQuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGVycm9yLnRvU3RyaW5nKCkgLy89PiBcIkNzc1N5bnRheEVycm9yOiBhcHAuY3NzOjE6MTogVW5jbG9zZWQgYmxvY2tcbiAgICAgKiAgICAgICAgICAgICAgICAgIC8vICAgID4gMSB8IGEge1xuICAgICAqICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHwgXlwiXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IGVycm9yIHBvc2l0aW9uLCBtZXNzYWdlIGFuZCBzb3VyY2UgY29kZVxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBsZXQgY29kZSA9IHRoaXMuc2hvd1NvdXJjZUNvZGUoKTtcbiAgICAgICAgaWYgKCBjb2RlICkge1xuICAgICAgICAgICAgY29kZSA9ICdcXG5cXG4nICsgY29kZSArICdcXG4nO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLm5hbWUgKyAnOiAnICsgdGhpcy5tZXNzYWdlICsgY29kZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgQ3NzU3ludGF4RXJyb3IjXG4gICAgICogQG1lbWJlciB7SW5wdXR9IGlucHV0IC0gSW5wdXQgb2JqZWN0IHdpdGggUG9zdENTUyBpbnRlcm5hbCBpbmZvcm1hdGlvblxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIGFib3V0IGlucHV0IGZpbGUuIElmIGlucHV0IGhhcyBzb3VyY2UgbWFwXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSBwcmV2aW91cyB0b29sLCBQb3N0Q1NTIHdpbGwgdXNlIG9yaWdpblxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIChmb3IgZXhhbXBsZSwgU2Fzcykgc291cmNlLiBZb3UgY2FuIHVzZSB0aGlzXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgb2JqZWN0IHRvIGdldCBQb3N0Q1NTIGlucHV0IHNvdXJjZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogZXJyb3IuaW5wdXQuZmlsZSAvLz0+ICdhLmNzcydcbiAgICAgKiBlcnJvci5maWxlICAgICAgIC8vPT4gJ2Euc2FzcydcbiAgICAgKi9cblxufVxuXG5leHBvcnQgZGVmYXVsdCBDc3NTeW50YXhFcnJvcjtcbiJdfQ==
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/declaration.js b/node_modules/postcss-reporter/node_modules/postcss/lib/declaration.js
new file mode 100644
index 00000000..a55e0ad0
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/declaration.js
@@ -0,0 +1,101 @@
+'use strict';
+
+exports.__esModule = true;
+
+var _node = require('./node');
+
+var _node2 = _interopRequireDefault(_node);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+/**
+ * Represents a CSS declaration.
+ *
+ * @extends Node
+ *
+ * @example
+ * const root = postcss.parse('a { color: black }');
+ * const decl = root.first.first;
+ * decl.type //=> 'decl'
+ * decl.toString() //=> ' color: black'
+ */
+var Declaration = function (_Node) {
+ _inherits(Declaration, _Node);
+
+ function Declaration(defaults) {
+ _classCallCheck(this, Declaration);
+
+ var _this = _possibleConstructorReturn(this, _Node.call(this, defaults));
+
+ _this.type = 'decl';
+ return _this;
+ }
+
+ /**
+ * @memberof Declaration#
+ * @member {string} prop - the declaration’s property name
+ *
+ * @example
+ * const root = postcss.parse('a { color: black }');
+ * const decl = root.first.first;
+ * decl.prop //=> 'color'
+ */
+
+ /**
+ * @memberof Declaration#
+ * @member {string} value - the declaration’s value
+ *
+ * @example
+ * const root = postcss.parse('a { color: black }');
+ * const decl = root.first.first;
+ * decl.value //=> 'black'
+ */
+
+ /**
+ * @memberof Declaration#
+ * @member {boolean} important - `true` if the declaration
+ * has an !important annotation.
+ *
+ * @example
+ * const root = postcss.parse('a { color: black !important; color: red }');
+ * root.first.first.important //=> true
+ * root.first.last.important //=> undefined
+ */
+
+ /**
+ * @memberof Declaration#
+ * @member {object} raws - Information to generate byte-to-byte equal
+ * node string as it was in the origin input.
+ *
+ * Every parser saves its own properties,
+ * but the default CSS parser uses:
+ *
+ * * `before`: the space symbols before the node. It also stores `*`
+ * and `_` symbols before the declaration (IE hack).
+ * * `between`: the symbols between the property and value
+ * for declarations.
+ * * `important`: the content of the important statement,
+ * if it is not just `!important`.
+ *
+ * PostCSS cleans declaration from comments and extra spaces,
+ * but it stores origin content in raws properties.
+ * As such, if you don’t change a declaration’s value,
+ * PostCSS will use the raw value with comments.
+ *
+ * @example
+ * const root = postcss.parse('a {\n color:black\n}')
+ * root.first.first.raws //=> { before: '\n ', between: ':' }
+ */
+
+ return Declaration;
+}(_node2.default);
+
+exports.default = Declaration;
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRlY2xhcmF0aW9uLmVzNiJdLCJuYW1lcyI6WyJEZWNsYXJhdGlvbiIsImRlZmF1bHRzIiwidHlwZSIsIk5vZGUiXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTs7Ozs7Ozs7Ozs7O0FBRUE7Ozs7Ozs7Ozs7O0lBV01BLFc7OztBQUVGLHVCQUFZQyxRQUFaLEVBQXNCO0FBQUE7O0FBQUEsaURBQ2xCLGlCQUFNQSxRQUFOLENBRGtCOztBQUVsQixVQUFLQyxJQUFMLEdBQVksTUFBWjtBQUZrQjtBQUdyQjs7QUFFRDs7Ozs7Ozs7OztBQVVBOzs7Ozs7Ozs7O0FBVUE7Ozs7Ozs7Ozs7O0FBV0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBdENzQkMsYzs7a0JBaUVYSCxXIiwiZmlsZSI6ImRlY2xhcmF0aW9uLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IE5vZGUgZnJvbSAnLi9ub2RlJztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgQ1NTIGRlY2xhcmF0aW9uLlxuICpcbiAqIEBleHRlbmRzIE5vZGVcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgcm9vdCA9IHBvc3Rjc3MucGFyc2UoJ2EgeyBjb2xvcjogYmxhY2sgfScpO1xuICogY29uc3QgZGVjbCA9IHJvb3QuZmlyc3QuZmlyc3Q7XG4gKiBkZWNsLnR5cGUgICAgICAgLy89PiAnZGVjbCdcbiAqIGRlY2wudG9TdHJpbmcoKSAvLz0+ICcgY29sb3I6IGJsYWNrJ1xuICovXG5jbGFzcyBEZWNsYXJhdGlvbiBleHRlbmRzIE5vZGUge1xuXG4gICAgY29uc3RydWN0b3IoZGVmYXVsdHMpIHtcbiAgICAgICAgc3VwZXIoZGVmYXVsdHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSAnZGVjbCc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIERlY2xhcmF0aW9uI1xuICAgICAqIEBtZW1iZXIge3N0cmluZ30gcHJvcCAtIHRoZSBkZWNsYXJhdGlvbuKAmXMgcHJvcGVydHkgbmFtZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZSgnYSB7IGNvbG9yOiBibGFjayB9Jyk7XG4gICAgICogY29uc3QgZGVjbCA9IHJvb3QuZmlyc3QuZmlyc3Q7XG4gICAgICogZGVjbC5wcm9wIC8vPT4gJ2NvbG9yJ1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIERlY2xhcmF0aW9uI1xuICAgICAqIEBtZW1iZXIge3N0cmluZ30gdmFsdWUgLSB0aGUgZGVjbGFyYXRpb27igJlzIHZhbHVlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGNvbnN0IHJvb3QgPSBwb3N0Y3NzLnBhcnNlKCdhIHsgY29sb3I6IGJsYWNrIH0nKTtcbiAgICAgKiBjb25zdCBkZWNsID0gcm9vdC5maXJzdC5maXJzdDtcbiAgICAgKiBkZWNsLnZhbHVlIC8vPT4gJ2JsYWNrJ1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIERlY2xhcmF0aW9uI1xuICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IGltcG9ydGFudCAtIGB0cnVlYCBpZiB0aGUgZGVjbGFyYXRpb25cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgYW4gIWltcG9ydGFudCBhbm5vdGF0aW9uLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZSgnYSB7IGNvbG9yOiBibGFjayAhaW1wb3J0YW50OyBjb2xvcjogcmVkIH0nKTtcbiAgICAgKiByb290LmZpcnN0LmZpcnN0LmltcG9ydGFudCAvLz0+IHRydWVcbiAgICAgKiByb290LmZpcnN0Lmxhc3QuaW1wb3J0YW50ICAvLz0+IHVuZGVmaW5lZFxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIERlY2xhcmF0aW9uI1xuICAgICAqIEBtZW1iZXIge29iamVjdH0gcmF3cyAtIEluZm9ybWF0aW9uIHRvIGdlbmVyYXRlIGJ5dGUtdG8tYnl0ZSBlcXVhbFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUgc3RyaW5nIGFzIGl0IHdhcyBpbiB0aGUgb3JpZ2luIGlucHV0LlxuICAgICAqXG4gICAgICogRXZlcnkgcGFyc2VyIHNhdmVzIGl0cyBvd24gcHJvcGVydGllcyxcbiAgICAgKiBidXQgdGhlIGRlZmF1bHQgQ1NTIHBhcnNlciB1c2VzOlxuICAgICAqXG4gICAgICogKiBgYmVmb3JlYDogdGhlIHNwYWNlIHN5bWJvbHMgYmVmb3JlIHRoZSBub2RlLiBJdCBhbHNvIHN0b3JlcyBgKmBcbiAgICAgKiAgIGFuZCBgX2Agc3ltYm9scyBiZWZvcmUgdGhlIGRlY2xhcmF0aW9uIChJRSBoYWNrKS5cbiAgICAgKiAqIGBiZXR3ZWVuYDogdGhlIHN5bWJvbHMgYmV0d2VlbiB0aGUgcHJvcGVydHkgYW5kIHZhbHVlXG4gICAgICogICBmb3IgZGVjbGFyYXRpb25zLlxuICAgICAqICogYGltcG9ydGFudGA6IHRoZSBjb250ZW50IG9mIHRoZSBpbXBvcnRhbnQgc3RhdGVtZW50LFxuICAgICAqICAgaWYgaXQgaXMgbm90IGp1c3QgYCFpbXBvcnRhbnRgLlxuICAgICAqXG4gICAgICogUG9zdENTUyBjbGVhbnMgZGVjbGFyYXRpb24gZnJvbSBjb21tZW50cyBhbmQgZXh0cmEgc3BhY2VzLFxuICAgICAqIGJ1dCBpdCBzdG9yZXMgb3JpZ2luIGNvbnRlbnQgaW4gcmF3cyBwcm9wZXJ0aWVzLlxuICAgICAqIEFzIHN1Y2gsIGlmIHlvdSBkb27igJl0IGNoYW5nZSBhIGRlY2xhcmF0aW9u4oCZcyB2YWx1ZSxcbiAgICAgKiBQb3N0Q1NTIHdpbGwgdXNlIHRoZSByYXcgdmFsdWUgd2l0aCBjb21tZW50cy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc3Qgcm9vdCA9IHBvc3Rjc3MucGFyc2UoJ2Ege1xcbiAgY29sb3I6YmxhY2tcXG59JylcbiAgICAgKiByb290LmZpcnN0LmZpcnN0LnJhd3MgLy89PiB7IGJlZm9yZTogJ1xcbiAgJywgYmV0d2VlbjogJzonIH1cbiAgICAgKi9cblxufVxuXG5leHBvcnQgZGVmYXVsdCBEZWNsYXJhdGlvbjtcbiJdfQ==
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/input.js b/node_modules/postcss-reporter/node_modules/postcss/lib/input.js
new file mode 100644
index 00000000..b23e0603
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/input.js
@@ -0,0 +1,204 @@
+'use strict';
+
+exports.__esModule = true;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+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; }; }();
+
+var _cssSyntaxError = require('./css-syntax-error');
+
+var _cssSyntaxError2 = _interopRequireDefault(_cssSyntaxError);
+
+var _previousMap = require('./previous-map');
+
+var _previousMap2 = _interopRequireDefault(_previousMap);
+
+var _path = require('path');
+
+var _path2 = _interopRequireDefault(_path);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var sequence = 0;
+
+/**
+ * Represents the source CSS.
+ *
+ * @example
+ * const root = postcss.parse(css, { from: file });
+ * const input = root.source.input;
+ */
+
+var Input = function () {
+
+ /**
+ * @param {string} css - input CSS source
+ * @param {object} [opts] - {@link Processor#process} options
+ */
+ function Input(css) {
+ var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ _classCallCheck(this, Input);
+
+ if (css === null || (typeof css === 'undefined' ? 'undefined' : _typeof(css)) === 'object' && !css.toString) {
+ throw new Error('PostCSS received ' + css + ' instead of CSS string');
+ }
+
+ /**
+ * @member {string} - input CSS source
+ *
+ * @example
+ * const input = postcss.parse('a{}', { from: file }).input;
+ * input.css //=> "a{}";
+ */
+ this.css = css.toString();
+
+ if (this.css[0] === '\uFEFF' || this.css[0] === '\uFFFE') {
+ this.css = this.css.slice(1);
+ }
+
+ if (opts.from) {
+ if (/^\w+:\/\//.test(opts.from)) {
+ /**
+ * @member {string} - The absolute path to the CSS source file
+ * defined with the `from` option.
+ *
+ * @example
+ * const root = postcss.parse(css, { from: 'a.css' });
+ * root.source.input.file //=> '/home/ai/a.css'
+ */
+ this.file = opts.from;
+ } else {
+ this.file = _path2.default.resolve(opts.from);
+ }
+ }
+
+ var map = new _previousMap2.default(this.css, opts);
+ if (map.text) {
+ /**
+ * @member {PreviousMap} - The input source map passed from
+ * a compilation step before PostCSS
+ * (for example, from Sass compiler).
+ *
+ * @example
+ * root.source.input.map.consumer().sources //=> ['a.sass']
+ */
+ this.map = map;
+ var file = map.consumer().file;
+ if (!this.file && file) this.file = this.mapResolve(file);
+ }
+
+ if (!this.file) {
+ sequence += 1;
+ /**
+ * @member {string} - The unique ID of the CSS source. It will be
+ * created if `from` option is not provided
+ * (because PostCSS does not know the file path).
+ *
+ * @example
+ * const root = postcss.parse(css);
+ * root.source.input.file //=> undefined
+ * root.source.input.id //=> "<input css 1>"
+ */
+ this.id = '<input css ' + sequence + '>';
+ }
+ if (this.map) this.map.file = this.from;
+ }
+
+ Input.prototype.error = function error(message, line, column) {
+ var opts = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
+
+ var result = void 0;
+ var origin = this.origin(line, column);
+ if (origin) {
+ result = new _cssSyntaxError2.default(message, origin.line, origin.column, origin.source, origin.file, opts.plugin);
+ } else {
+ result = new _cssSyntaxError2.default(message, line, column, this.css, this.file, opts.plugin);
+ }
+
+ result.input = { line: line, column: column, source: this.css };
+ if (this.file) result.input.file = this.file;
+
+ return result;
+ };
+
+ /**
+ * Reads the input source map and returns a symbol position
+ * in the input source (e.g., in a Sass file that was compiled
+ * to CSS before being passed to PostCSS).
+ *
+ * @param {number} line - line in input CSS
+ * @param {number} column - column in input CSS
+ *
+ * @return {filePosition} position in input source
+ *
+ * @example
+ * root.source.input.origin(1, 1) //=> { file: 'a.css', line: 3, column: 1 }
+ */
+
+
+ Input.prototype.origin = function origin(line, column) {
+ if (!this.map) return false;
+ var consumer = this.map.consumer();
+
+ var from = consumer.originalPositionFor({ line: line, column: column });
+ if (!from.source) return false;
+
+ var result = {
+ file: this.mapResolve(from.source),
+ line: from.line,
+ column: from.column
+ };
+
+ var source = consumer.sourceContentFor(from.source);
+ if (source) result.source = source;
+
+ return result;
+ };
+
+ Input.prototype.mapResolve = function mapResolve(file) {
+ if (/^\w+:\/\//.test(file)) {
+ return file;
+ } else {
+ return _path2.default.resolve(this.map.consumer().sourceRoot || '.', file);
+ }
+ };
+
+ /**
+ * The CSS source identifier. Contains {@link Input#file} if the user
+ * set the `from` option, or {@link Input#id} if they did not.
+ * @type {string}
+ *
+ * @example
+ * const root = postcss.parse(css, { from: 'a.css' });
+ * root.source.input.from //=> "/home/ai/a.css"
+ *
+ * const root = postcss.parse(css);
+ * root.source.input.from //=> "<input css 1>"
+ */
+
+
+ _createClass(Input, [{
+ key: 'from',
+ get: function get() {
+ return this.file || this.id;
+ }
+ }]);
+
+ return Input;
+}();
+
+exports.default = Input;
+
+/**
+ * @typedef {object} filePosition
+ * @property {string} file - path to file
+ * @property {number} line - source line in file
+ * @property {number} column - source column in file
+ */
+
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImlucHV0LmVzNiJdLCJuYW1lcyI6WyJzZXF1ZW5jZSIsIklucHV0IiwiY3NzIiwib3B0cyIsInRvU3RyaW5nIiwiRXJyb3IiLCJzbGljZSIsImZyb20iLCJ0ZXN0IiwiZmlsZSIsInBhdGgiLCJyZXNvbHZlIiwibWFwIiwiUHJldmlvdXNNYXAiLCJ0ZXh0IiwiY29uc3VtZXIiLCJtYXBSZXNvbHZlIiwiaWQiLCJlcnJvciIsIm1lc3NhZ2UiLCJsaW5lIiwiY29sdW1uIiwicmVzdWx0Iiwib3JpZ2luIiwiQ3NzU3ludGF4RXJyb3IiLCJzb3VyY2UiLCJwbHVnaW4iLCJpbnB1dCIsIm9yaWdpbmFsUG9zaXRpb25Gb3IiLCJzb3VyY2VDb250ZW50Rm9yIiwic291cmNlUm9vdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBRUE7Ozs7Ozs7O0FBRUEsSUFBSUEsV0FBVyxDQUFmOztBQUVBOzs7Ozs7OztJQU9NQyxLOztBQUVGOzs7O0FBSUEsbUJBQVlDLEdBQVosRUFBNkI7QUFBQSxZQUFaQyxJQUFZLHVFQUFMLEVBQUs7O0FBQUE7O0FBQ3pCLFlBQUtELFFBQVEsSUFBUixJQUFnQixRQUFPQSxHQUFQLHlDQUFPQSxHQUFQLE9BQWUsUUFBZixJQUEyQixDQUFDQSxJQUFJRSxRQUFyRCxFQUFnRTtBQUM1RCxrQkFBTSxJQUFJQyxLQUFKLHVCQUErQkgsR0FBL0IsNEJBQU47QUFDSDs7QUFFRDs7Ozs7OztBQU9BLGFBQUtBLEdBQUwsR0FBV0EsSUFBSUUsUUFBSixFQUFYOztBQUVBLFlBQUssS0FBS0YsR0FBTCxDQUFTLENBQVQsTUFBZ0IsUUFBaEIsSUFBNEIsS0FBS0EsR0FBTCxDQUFTLENBQVQsTUFBZ0IsUUFBakQsRUFBNEQ7QUFDeEQsaUJBQUtBLEdBQUwsR0FBVyxLQUFLQSxHQUFMLENBQVNJLEtBQVQsQ0FBZSxDQUFmLENBQVg7QUFDSDs7QUFFRCxZQUFLSCxLQUFLSSxJQUFWLEVBQWlCO0FBQ2IsZ0JBQUssWUFBWUMsSUFBWixD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QixtQkFBT0EsSUFBUDtBQUNILFNBRkQsTUFFTztBQUNILG1CQUFPQyxlQUFLQyxPQUFMLENBQWEsS0FBS0MsR0FBTCxDQUFTRyxRQUFULEdBQW9CZSxVQUFwQixJQUFrQyxHQUEvQyxFQUFvRHJCLElBQXBELENBQVA7QUFDSDtBQUNKLEs7O0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7NEJBWVc7QUFDUCxtQkFBTyxLQUFLQSxJQUFMLElBQWEsS0FBS1EsRUFBekI7QUFDSDs7Ozs7O2tCQUlVaEIsSzs7QUFFZiIsImZpbGUiOiJpbnB1dC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDc3NTeW50YXhFcnJvciBmcm9tICcuL2Nzcy1zeW50YXgtZXJyb3InO1xuaW1wb3J0IFByZXZpb3VzTWFwICAgIGZyb20gJy4vcHJldmlvdXMtbWFwJztcblxuaW1wb3J0IHBhdGggZnJvbSAncGF0aCc7XG5cbmxldCBzZXF1ZW5jZSA9IDA7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgc291cmNlIENTUy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgcm9vdCAgPSBwb3N0Y3NzLnBhcnNlKGNzcywgeyBmcm9tOiBmaWxlIH0pO1xuICogY29uc3QgaW5wdXQgPSByb290LnNvdXJjZS5pbnB1dDtcbiAqL1xuY2xhc3MgSW5wdXQge1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IGNzcyAgICAtIGlucHV0IENTUyBzb3VyY2VcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW29wdHNdIC0ge0BsaW5rIFByb2Nlc3NvciNwcm9jZXNzfSBvcHRpb25zXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY3NzLCBvcHRzID0geyB9KSB7XG4gICAgICAgIGlmICggY3NzID09PSBudWxsIHx8IHR5cGVvZiBjc3MgPT09ICdvYmplY3QnICYmICFjc3MudG9TdHJpbmcgKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFBvc3RDU1MgcmVjZWl2ZWQgJHsgY3NzIH0gaW5zdGVhZCBvZiBDU1Mgc3RyaW5nYCk7XG4gICAgICAgIH1cblxuICAgICAgICAvKipcbiAgICAgICAgICogQG1lbWJlciB7c3RyaW5nfSAtIGlucHV0IENTUyBzb3VyY2VcbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogY29uc3QgaW5wdXQgPSBwb3N0Y3NzLnBhcnNlKCdhe30nLCB7IGZyb206IGZpbGUgfSkuaW5wdXQ7XG4gICAgICAgICAqIGlucHV0LmNzcyAvLz0+IFwiYXt9XCI7XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmNzcyA9IGNzcy50b1N0cmluZygpO1xuXG4gICAgICAgIGlmICggdGhpcy5jc3NbMF0gPT09ICdcXHVGRUZGJyB8fCB0aGlzLmNzc1swXSA9PT0gJ1xcdUZGRkUnICkge1xuICAgICAgICAgICAgdGhpcy5jc3MgPSB0aGlzLmNzcy5zbGljZSgxKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICggb3B0cy5mcm9tICkge1xuICAgICAgICAgICAgaWYgKCAvXlxcdys6XFwvXFwvLy50ZXN0KG9wdHMuZnJvbSkgKSB7XG4gICAgICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgICAgICogQG1lbWJlciB7c3RyaW5nfSAtIFRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBDU1Mgc291cmNlIGZpbGVcbiAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgZGVmaW5lZCB3aXRoIHRoZSBgZnJvbWAgb3B0aW9uLlxuICAgICAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICAgICAgICAgKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZShjc3MsIHsgZnJvbTogJ2EuY3NzJyB9KTtcbiAgICAgICAgICAgICAgICAgKiByb290LnNvdXJjZS5pbnB1dC5maWxlIC8vPT4gJy9ob21lL2FpL2EuY3NzJ1xuICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgIHRoaXMuZmlsZSA9IG9wdHMuZnJvbTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWxlID0gcGF0aC5yZXNvbHZlKG9wdHMuZnJvbSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbWFwID0gbmV3IFByZXZpb3VzTWFwKHRoaXMuY3NzLCBvcHRzKTtcbiAgICAgICAgaWYgKCBtYXAudGV4dCApIHtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQG1lbWJlciB7UHJldmlvdXNNYXB9IC0gVGhlIGlucHV0IHNvdXJjZSBtYXAgcGFzc2VkIGZyb21cbiAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgIGEgY29tcGlsYXRpb24gc3RlcCBiZWZvcmUgUG9zdENTU1xuICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgKGZvciBleGFtcGxlLCBmcm9tIFNhc3MgY29tcGlsZXIpLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAgICAgKiByb290LnNvdXJjZS5pbnB1dC5tYXAuY29uc3VtZXIoKS5zb3VyY2VzIC8vPT4gWydhLnNhc3MnXVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLm1hcCA9IG1hcDtcbiAgICAgICAgICAgIGxldCBmaWxlID0gbWFwLmNvbnN1bWVyKCkuZmlsZTtcbiAgICAgICAgICAgIGlmICggIXRoaXMuZmlsZSAmJiBmaWxlICkgdGhpcy5maWxlID0gdGhpcy5tYXBSZXNvbHZlKGZpbGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCAhdGhpcy5maWxlICkge1xuICAgICAgICAgICAgc2VxdWVuY2UgKz0gMTtcbiAgICAgICAgICAgIC8qKlxuICAgICAgICAgICAgICogQG1lbWJlciB7c3RyaW5nfSAtIFRoZSB1bmlxdWUgSUQgb2YgdGhlIENTUyBzb3VyY2UuIEl0IHdpbGwgYmVcbiAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIGlmIGBmcm9tYCBvcHRpb24gaXMgbm90IHByb3ZpZGVkXG4gICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgKGJlY2F1c2UgUG9zdENTUyBkb2VzIG5vdCBrbm93IHRoZSBmaWxlIHBhdGgpLlxuICAgICAgICAgICAgICpcbiAgICAgICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAgICAgKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZShjc3MpO1xuICAgICAgICAgICAgICogcm9vdC5zb3VyY2UuaW5wdXQuZmlsZSAvLz0+IHVuZGVmaW5lZFxuICAgICAgICAgICAgICogcm9vdC5zb3VyY2UuaW5wdXQuaWQgICAvLz0+IFwiPGlucHV0IGNzcyAxPlwiXG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuaWQgICA9ICc8aW5wdXQgY3NzICcgKyBzZXF1ZW5jZSArICc+JztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIHRoaXMubWFwICkgdGhpcy5tYXAuZmlsZSA9IHRoaXMuZnJvbTtcbiAgICB9XG5cbiAgICBlcnJvcihtZXNzYWdlLCBsaW5lLCBjb2x1bW4sIG9wdHMgPSB7IH0pIHtcbiAgICAgICAgbGV0IHJlc3VsdDtcbiAgICAgICAgbGV0IG9yaWdpbiA9IHRoaXMub3JpZ2luKGxpbmUsIGNvbHVtbik7XG4gICAgICAgIGlmICggb3JpZ2luICkge1xuICAgICAgICAgICAgcmVzdWx0ID0gbmV3IENzc1N5bnRheEVycm9yKG1lc3NhZ2UsIG9yaWdpbi5saW5lLCBvcmlnaW4uY29sdW1uLFxuICAgICAgICAgICAgICAgIG9yaWdpbi5zb3VyY2UsIG9yaWdpbi5maWxlLCBvcHRzLnBsdWdpbik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgPSBuZXcgQ3NzU3ludGF4RXJyb3IobWVzc2FnZSwgbGluZSwgY29sdW1uLFxuICAgICAgICAgICAgICAgIHRoaXMuY3NzLCB0aGlzLmZpbGUsIG9wdHMucGx1Z2luKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJlc3VsdC5pbnB1dCA9IHsgbGluZSwgY29sdW1uLCBzb3VyY2U6IHRoaXMuY3NzIH07XG4gICAgICAgIGlmICggdGhpcy5maWxlICkgcmVzdWx0LmlucHV0LmZpbGUgPSB0aGlzLmZpbGU7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZWFkcyB0aGUgaW5wdXQgc291cmNlIG1hcCBhbmQgcmV0dXJucyBhIHN5bWJvbCBwb3NpdGlvblxuICAgICAqIGluIHRoZSBpbnB1dCBzb3VyY2UgKGUuZy4sIGluIGEgU2FzcyBmaWxlIHRoYXQgd2FzIGNvbXBpbGVkXG4gICAgICogdG8gQ1NTIGJlZm9yZSBiZWluZyBwYXNzZWQgdG8gUG9zdENTUykuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gbGluZSAgIC0gbGluZSBpbiBpbnB1dCBDU1NcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gY29sdW1uIC0gY29sdW1uIGluIGlucHV0IENTU1xuICAgICAqXG4gICAgICogQHJldHVybiB7ZmlsZVBvc2l0aW9ufSBwb3NpdGlvbiBpbiBpbnB1dCBzb3VyY2VcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogcm9vdC5zb3VyY2UuaW5wdXQub3JpZ2luKDEsIDEpIC8vPT4geyBmaWxlOiAnYS5jc3MnLCBsaW5lOiAzLCBjb2x1bW46IDEgfVxuICAgICAqL1xuICAgIG9yaWdpbihsaW5lLCBjb2x1bW4pIHtcbiAgICAgICAgaWYgKCAhdGhpcy5tYXAgKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIGxldCBjb25zdW1lciA9IHRoaXMubWFwLmNvbnN1bWVyKCk7XG5cbiAgICAgICAgbGV0IGZyb20gPSBjb25zdW1lci5vcmlnaW5hbFBvc2l0aW9uRm9yKHsgbGluZSwgY29sdW1uIH0pO1xuICAgICAgICBpZiAoICFmcm9tLnNvdXJjZSApIHJldHVybiBmYWxzZTtcblxuICAgICAgICBsZXQgcmVzdWx0ID0ge1xuICAgICAgICAgICAgZmlsZTogICB0aGlzLm1hcFJlc29sdmUoZnJvbS5zb3VyY2UpLFxuICAgICAgICAgICAgbGluZTogICBmcm9tLmxpbmUsXG4gICAgICAgICAgICBjb2x1bW46IGZyb20uY29sdW1uXG4gICAgICAgIH07XG5cbiAgICAgICAgbGV0IHNvdXJjZSA9IGNvbnN1bWVyLnNvdXJjZUNvbnRlbnRGb3IoZnJvbS5zb3VyY2UpO1xuICAgICAgICBpZiAoIHNvdXJjZSApIHJlc3VsdC5zb3VyY2UgPSBzb3VyY2U7XG5cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBtYXBSZXNvbHZlKGZpbGUpIHtcbiAgICAgICAgaWYgKCAvXlxcdys6XFwvXFwvLy50ZXN0KGZpbGUpICkge1xuICAgICAgICAgICAgcmV0dXJuIGZpbGU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcGF0aC5yZXNvbHZlKHRoaXMubWFwLmNvbnN1bWVyKCkuc291cmNlUm9vdCB8fCAnLicsIGZpbGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVGhlIENTUyBzb3VyY2UgaWRlbnRpZmllci4gQ29udGFpbnMge0BsaW5rIElucHV0I2ZpbGV9IGlmIHRoZSB1c2VyXG4gICAgICogc2V0IHRoZSBgZnJvbWAgb3B0aW9uLCBvciB7QGxpbmsgSW5wdXQjaWR9IGlmIHRoZXkgZGlkIG5vdC5cbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZShjc3MsIHsgZnJvbTogJ2EuY3NzJyB9KTtcbiAgICAgKiByb290LnNvdXJjZS5pbnB1dC5mcm9tIC8vPT4gXCIvaG9tZS9haS9hLmNzc1wiXG4gICAgICpcbiAgICAgKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZShjc3MpO1xuICAgICAqIHJvb3Quc291cmNlLmlucHV0LmZyb20gLy89PiBcIjxpbnB1dCBjc3MgMT5cIlxuICAgICAqL1xuICAgIGdldCBmcm9tKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5maWxlIHx8IHRoaXMuaWQ7XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IElucHV0O1xuXG4vKipcbiAqIEB0eXBlZGVmICB7b2JqZWN0fSBmaWxlUG9zaXRpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBmaWxlICAgLSBwYXRoIHRvIGZpbGVcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBsaW5lICAgLSBzb3VyY2UgbGluZSBpbiBmaWxlXG4gKiBAcHJvcGVydHkge251bWJlcn0gY29sdW1uIC0gc291cmNlIGNvbHVtbiBpbiBmaWxlXG4gKi9cbiJdfQ==
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/lazy-result.js b/node_modules/postcss-reporter/node_modules/postcss/lib/lazy-result.js
new file mode 100644
index 00000000..dd13ee45
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/lazy-result.js
@@ -0,0 +1,435 @@
+'use strict';
+
+exports.__esModule = true;
+
+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; }; }();
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _mapGenerator = require('./map-generator');
+
+var _mapGenerator2 = _interopRequireDefault(_mapGenerator);
+
+var _stringify2 = require('./stringify');
+
+var _stringify3 = _interopRequireDefault(_stringify2);
+
+var _warnOnce = require('./warn-once');
+
+var _warnOnce2 = _interopRequireDefault(_warnOnce);
+
+var _result = require('./result');
+
+var _result2 = _interopRequireDefault(_result);
+
+var _parse = require('./parse');
+
+var _parse2 = _interopRequireDefault(_parse);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function isPromise(obj) {
+ return (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && typeof obj.then === 'function';
+}
+
+/**
+ * A Promise proxy for the result of PostCSS transformations.
+ *
+ * A `LazyResult` instance is returned by {@link Processor#process}.
+ *
+ * @example
+ * const lazy = postcss([cssnext]).process(css);
+ */
+
+var LazyResult = function () {
+ function LazyResult(processor, css, opts) {
+ _classCallCheck(this, LazyResult);
+
+ this.stringified = false;
+ this.processed = false;
+
+ var root = void 0;
+ if ((typeof css === 'undefined' ? 'undefined' : _typeof(css)) === 'object' && css !== null && css.type === 'root') {
+ root = css;
+ } else if (css instanceof LazyResult || css instanceof _result2.default) {
+ root = css.root;
+ if (css.map) {
+ if (typeof opts.map === 'undefined') opts.map = {};
+ if (!opts.map.inline) opts.map.inline = false;
+ opts.map.prev = css.map;
+ }
+ } else {
+ var parser = _parse2.default;
+ if (opts.syntax) parser = opts.syntax.parse;
+ if (opts.parser) parser = opts.parser;
+ if (parser.parse) parser = parser.parse;
+
+ try {
+ root = parser(css, opts);
+ } catch (error) {
+ this.error = error;
+ }
+ }
+
+ this.result = new _result2.default(processor, root, opts);
+ }
+
+ /**
+ * Returns a {@link Processor} instance, which will be used
+ * for CSS transformations.
+ * @type {Processor}
+ */
+
+
+ /**
+ * Processes input CSS through synchronous plugins
+ * and calls {@link Result#warnings()}.
+ *
+ * @return {Warning[]} warnings from plugins
+ */
+ LazyResult.prototype.warnings = function warnings() {
+ return this.sync().warnings();
+ };
+
+ /**
+ * Alias for the {@link LazyResult#css} property.
+ *
+ * @example
+ * lazy + '' === lazy.css;
+ *
+ * @return {string} output CSS
+ */
+
+
+ LazyResult.prototype.toString = function toString() {
+ return this.css;
+ };
+
+ /**
+ * Processes input CSS through synchronous and asynchronous plugins
+ * and calls `onFulfilled` with a Result instance. If a plugin throws
+ * an error, the `onRejected` callback will be executed.
+ *
+ * It implements standard Promise API.
+ *
+ * @param {onFulfilled} onFulfilled - callback will be executed
+ * when all plugins will finish work
+ * @param {onRejected} onRejected - callback will be executed on any error
+ *
+ * @return {Promise} Promise API to make queue
+ *
+ * @example
+ * postcss([cssnext]).process(css, { from: cssPath }).then(result => {
+ * console.log(result.css);
+ * });
+ */
+
+
+ LazyResult.prototype.then = function then(onFulfilled, onRejected) {
+ if (!('from' in this.opts)) {
+ (0, _warnOnce2.default)('Without `from` option PostCSS could generate wrong ' + 'source map and will not find Browserslist config. ' + 'Set it to CSS file path or to `undefined` to prevent ' + 'this warning.');
+ }
+ return this.async().then(onFulfilled, onRejected);
+ };
+
+ /**
+ * Processes input CSS through synchronous and asynchronous plugins
+ * and calls onRejected for each error thrown in any plugin.
+ *
+ * It implements standard Promise API.
+ *
+ * @param {onRejected} onRejected - callback will be executed on any error
+ *
+ * @return {Promise} Promise API to make queue
+ *
+ * @example
+ * postcss([cssnext]).process(css).then(result => {
+ * console.log(result.css);
+ * }).catch(error => {
+ * console.error(error);
+ * });
+ */
+
+
+ LazyResult.prototype.catch = function _catch(onRejected) {
+ return this.async().catch(onRejected);
+ };
+
+ LazyResult.prototype.handleError = function handleError(error, plugin) {
+ try {
+ this.error = error;
+ if (error.name === 'CssSyntaxError' && !error.plugin) {
+ error.plugin = plugin.postcssPlugin;
+ error.setMessage();
+ } else if (plugin.postcssVersion) {
+ var pluginName = plugin.postcssPlugin;
+ var pluginVer = plugin.postcssVersion;
+ var runtimeVer = this.result.processor.version;
+ var a = pluginVer.split('.');
+ var b = runtimeVer.split('.');
+
+ if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {
+ console.error('Unknown error from PostCSS plugin. ' + 'Your current PostCSS version ' + 'is ' + runtimeVer + ', but ' + pluginName + ' ' + 'uses ' + pluginVer + '. Perhaps this is ' + 'the source of the error below.');
+ }
+ }
+ } catch (err) {
+ if (console && console.error) console.error(err);
+ }
+ };
+
+ LazyResult.prototype.asyncTick = function asyncTick(resolve, reject) {
+ var _this = this;
+
+ if (this.plugin >= this.processor.plugins.length) {
+ this.processed = true;
+ return resolve();
+ }
+
+ try {
+ var plugin = this.processor.plugins[this.plugin];
+ var promise = this.run(plugin);
+ this.plugin += 1;
+
+ if (isPromise(promise)) {
+ promise.then(function () {
+ _this.asyncTick(resolve, reject);
+ }).catch(function (error) {
+ _this.handleError(error, plugin);
+ _this.processed = true;
+ reject(error);
+ });
+ } else {
+ this.asyncTick(resolve, reject);
+ }
+ } catch (error) {
+ this.processed = true;
+ reject(error);
+ }
+ };
+
+ LazyResult.prototype.async = function async() {
+ var _this2 = this;
+
+ if (this.processed) {
+ return new Promise(function (resolve, reject) {
+ if (_this2.error) {
+ reject(_this2.error);
+ } else {
+ resolve(_this2.stringify());
+ }
+ });
+ }
+ if (this.processing) {
+ return this.processing;
+ }
+
+ this.processing = new Promise(function (resolve, reject) {
+ if (_this2.error) return reject(_this2.error);
+ _this2.plugin = 0;
+ _this2.asyncTick(resolve, reject);
+ }).then(function () {
+ _this2.processed = true;
+ return _this2.stringify();
+ });
+
+ return this.processing;
+ };
+
+ LazyResult.prototype.sync = function sync() {
+ if (this.processed) return this.result;
+ this.processed = true;
+
+ if (this.processing) {
+ throw new Error('Use process(css).then(cb) to work with async plugins');
+ }
+
+ if (this.error) throw this.error;
+
+ for (var _iterator = this.result.processor.plugins, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var plugin = _ref;
+
+ var promise = this.run(plugin);
+ if (isPromise(promise)) {
+ throw new Error('Use process(css).then(cb) to work with async plugins');
+ }
+ }
+
+ return this.result;
+ };
+
+ LazyResult.prototype.run = function run(plugin) {
+ this.result.lastPlugin = plugin;
+
+ try {
+ return plugin(this.result.root, this.result);
+ } catch (error) {
+ this.handleError(error, plugin);
+ throw error;
+ }
+ };
+
+ LazyResult.prototype.stringify = function stringify() {
+ if (this.stringified) return this.result;
+ this.stringified = true;
+
+ this.sync();
+
+ var opts = this.result.opts;
+ var str = _stringify3.default;
+ if (opts.syntax) str = opts.syntax.stringify;
+ if (opts.stringifier) str = opts.stringifier;
+ if (str.stringify) str = str.stringify;
+
+ var map = new _mapGenerator2.default(str, this.result.root, this.result.opts);
+ var data = map.generate();
+ this.result.css = data[0];
+ this.result.map = data[1];
+
+ return this.result;
+ };
+
+ _createClass(LazyResult, [{
+ key: 'processor',
+ get: function get() {
+ return this.result.processor;
+ }
+
+ /**
+ * Options from the {@link Processor#process} call.
+ * @type {processOptions}
+ */
+
+ }, {
+ key: 'opts',
+ get: function get() {
+ return this.result.opts;
+ }
+
+ /**
+ * Processes input CSS through synchronous plugins, converts `Root`
+ * to a CSS string and returns {@link Result#css}.
+ *
+ * This property will only work with synchronous plugins.
+ * If the processor contains any asynchronous plugins
+ * it will throw an error. This is why this method is only
+ * for debug purpose, you should always use {@link LazyResult#then}.
+ *
+ * @type {string}
+ * @see Result#css
+ */
+
+ }, {
+ key: 'css',
+ get: function get() {
+ return this.stringify().css;
+ }
+
+ /**
+ * An alias for the `css` property. Use it with syntaxes
+ * that generate non-CSS output.
+ *
+ * This property will only work with synchronous plugins.
+ * If the processor contains any asynchronous plugins
+ * it will throw an error. This is why this method is only
+ * for debug purpose, you should always use {@link LazyResult#then}.
+ *
+ * @type {string}
+ * @see Result#content
+ */
+
+ }, {
+ key: 'content',
+ get: function get() {
+ return this.stringify().content;
+ }
+
+ /**
+ * Processes input CSS through synchronous plugins
+ * and returns {@link Result#map}.
+ *
+ * This property will only work with synchronous plugins.
+ * If the processor contains any asynchronous plugins
+ * it will throw an error. This is why this method is only
+ * for debug purpose, you should always use {@link LazyResult#then}.
+ *
+ * @type {SourceMapGenerator}
+ * @see Result#map
+ */
+
+ }, {
+ key: 'map',
+ get: function get() {
+ return this.stringify().map;
+ }
+
+ /**
+ * Processes input CSS through synchronous plugins
+ * and returns {@link Result#root}.
+ *
+ * This property will only work with synchronous plugins. If the processor
+ * contains any asynchronous plugins it will throw an error.
+ *
+ * This is why this method is only for debug purpose,
+ * you should always use {@link LazyResult#then}.
+ *
+ * @type {Root}
+ * @see Result#root
+ */
+
+ }, {
+ key: 'root',
+ get: function get() {
+ return this.sync().root;
+ }
+
+ /**
+ * Processes input CSS through synchronous plugins
+ * and returns {@link Result#messages}.
+ *
+ * This property will only work with synchronous plugins. If the processor
+ * contains any asynchronous plugins it will throw an error.
+ *
+ * This is why this method is only for debug purpose,
+ * you should always use {@link LazyResult#then}.
+ *
+ * @type {Message[]}
+ * @see Result#messages
+ */
+
+ }, {
+ key: 'messages',
+ get: function get() {
+ return this.sync().messages;
+ }
+ }]);
+
+ return LazyResult;
+}();
+
+exports.default = LazyResult;
+
+/**
+ * @callback onFulfilled
+ * @param {Result} result
+ */
+
+/**
+ * @callback onRejected
+ * @param {Error} error
+ */
+
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxhenktcmVzdWx0LmVzNiJdLCJuYW1lcyI6WyJpc1Byb21pc2UiLCJvYmoiLCJ0aGVuIiwiTGF6eVJlc3VsdCIsInByb2Nlc3NvciIsImNzcyIsIm9wdHMiLCJzdHJpbmdpZmllZCIsInByb2Nlc3NlZCIsInJvb3QiLCJ0eXBlIiwiUmVzdWx0IiwibWFwIiwiaW5saW5lIiwicHJldiIsInBhcnNlciIsInBhcnNlIiwic3ludGF4IiwiZXJyb3IiLCJyZXN1bHQiLCJ3YXJuaW5ncyIsInN5bmMiLCJ0b1N0cmluZyIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsImFzeW5jIiwiY2F0Y2giLCJoYW5kbGVFcnJvciIsInBsdWdpbiIsIm5hbWUiLCJwb3N0Y3NzUGx1Z2luIiwic2V0TWVzc2FnZSIsInBvc3Rjc3NWZXJzaW9uIiwicGx1Z2luTmFtZSIsInBsdWdpblZlciIsInJ1bnRpbWVWZXIiLCJ2ZXJzaW9uIiwiYSIsInNwbGl0IiwiYiIsInBhcnNlSW50IiwiY29uc29sZSIsImVyciIsImFzeW5jVGljayIsInJlc29sdmUiLCJyZWplY3QiLCJwbHVnaW5zIiwibGVuZ3RoIiwicHJvbWlzZSIsInJ1biIsIlByb21pc2UiLCJzdHJpbmdpZnkiLCJwcm9jZXNzaW5nIiwiRXJyb3IiLCJsYXN0UGx1Z2luIiwic3RyIiwic3RyaW5naWZpZXIiLCJNYXBHZW5lcmF0b3IiLCJkYXRhIiwiZ2VuZXJhdGUiLCJjb250ZW50IiwibWVzc2FnZXMiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7QUFFQSxTQUFTQSxTQUFULENBQW1CQyxHQUFuQixFQUF3QjtBQUNwQixXQUFPLFFBQU9BLEdBQVAseUNBQU9BLEdBQVAsT0FBZSxRQUFmLElBQTJCLE9BQU9BLElBQUlDLElBQVgsS0FBb0IsVUFBdEQ7QUFDSDs7QUFFRDs7Ozs7Ozs7O0lBUU1DLFU7QUFFRix3QkFBWUMsU0FBWixFQUF1QkMsR0FBdkIs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dCI6WyJpbXBvcnQgTWFwR2VuZXJhdG9yIGZyb20gJy4vbWFwLWdlbmVyYXRvcic7XG5pbXBvcnQgc3RyaW5naWZ5ICAgIGZyb20gJy4vc3RyaW5naWZ5JztcbmltcG9ydCB3YXJuT25jZSAgICAgZnJvbSAnLi93YXJuLW9uY2UnO1xuaW1wb3J0IFJlc3VsdCAgICAgICBmcm9tICcuL3Jlc3VsdCc7XG5pbXBvcnQgcGFyc2UgICAgICAgIGZyb20gJy4vcGFyc2UnO1xuXG5mdW5jdGlvbiBpc1Byb21pc2Uob2JqKSB7XG4gICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICdvYmplY3QnICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gJ2Z1bmN0aW9uJztcbn1cblxuLyoqXG4gKiBBIFByb21pc2UgcHJveHkgZm9yIHRoZSByZXN1bHQgb2YgUG9zdENTUyB0cmFuc2Zvcm1hdGlvbnMuXG4gKlxuICogQSBgTGF6eVJlc3VsdGAgaW5zdGFuY2UgaXMgcmV0dXJuZWQgYnkge0BsaW5rIFByb2Nlc3NvciNwcm9jZXNzfS5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgbGF6eSA9IHBvc3Rjc3MoW2Nzc25leHRdKS5wcm9jZXNzKGNzcyk7XG4gKi9cbmNsYXNzIExhenlSZXN1bHQge1xuXG4gICAgY29uc3RydWN0b3IocHJvY2Vzc29yLCBjc3MsIG9wdHMpIHtcbiAgICAgICAgdGhpcy5zdHJpbmdpZmllZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnByb2Nlc3NlZCAgID0gZmFsc2U7XG5cbiAgICAgICAgbGV0IHJvb3Q7XG4gICAgICAgIGlmICggdHlwZW9mIGNzcyA9PT0gJ29iamVjdCcgJiYgY3NzICE9PSBudWxsICYmIGNzcy50eXBlID09PSAncm9vdCcgKSB7XG4gICAgICAgICAgICByb290ID0gY3NzO1xuICAgICAgICB9IGVsc2UgaWYgKCBjc3MgaW5zdGFuY2VvZiBMYXp5UmVzdWx0IHx8IGNzcyBpbnN0YW5jZW9mIFJlc3VsdCApIHtcbiAgICAgICAgICAgIHJvb3QgPSBjc3Mucm9vdDtcbiAgICAgICAgICAgIGlmICggY3NzLm1hcCApIHtcbiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBvcHRzLm1hcCA9PT0gJ3VuZGVmaW5lZCcgKSBvcHRzLm1hcCA9IHsgfTtcbiAgICAgICAgICAgICAgICBpZiAoICFvcHRzLm1hcC5pbmxpbmUgKSBvcHRzLm1hcC5pbmxpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICBvcHRzLm1hcC5wcmV2ID0gY3NzLm1hcDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBwYXJzZXIgPSBwYXJzZTtcbiAgICAgICAgICAgIGlmICggb3B0cy5zeW50YXggKSAgcGFyc2VyID0gb3B0cy5zeW50YXgucGFyc2U7XG4gICAgICAgICAgICBpZiAoIG9wdHMucGFyc2VyICkgIHBhcnNlciA9IG9wdHMucGFyc2VyO1xuICAgICAgICAgICAgaWYgKCBwYXJzZXIucGFyc2UgKSBwYXJzZXIgPSBwYXJzZXIucGFyc2U7XG5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcm9vdCA9IHBhcnNlcihjc3MsIG9wdHMpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmVycm9yID0gZXJyb3I7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnJlc3VsdCA9IG5ldyBSZXN1bHQocHJvY2Vzc29yLCByb290LCBvcHRzKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEge0BsaW5rIFByb2Nlc3Nvcn0gaW5zdGFuY2UsIHdoaWNoIHdpbGwgYmUgdXNlZFxuICAgICAqIGZvciBDU1MgdHJhbnNmb3JtYXRpb25zLlxuICAgICAqIEB0eXBlIHtQcm9jZXNzb3J9XG4gICAgICovXG4gICAgZ2V0IHByb2Nlc3NvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0LnByb2Nlc3NvcjtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcHRpb25zIGZyb20gdGhlIHtAbGluayBQcm9jZXNzb3IjcHJvY2Vzc30gY2FsbC5cbiAgICAgKiBAdHlwZSB7cHJvY2Vzc09wdGlvbnN9XG4gICAgICovXG4gICAgZ2V0IG9wdHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJlc3VsdC5vcHRzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2Nlc3NlcyBpbnB1dCBDU1MgdGhyb3VnaCBzeW5jaHJvbm91cyBwbHVnaW5zLCBjb252ZXJ0cyBgUm9vdGBcbiAgICAgKiB0byBhIENTUyBzdHJpbmcgYW5kIHJldHVybnMge0BsaW5rIFJlc3VsdCNjc3N9LlxuICAgICAqXG4gICAgICogVGhpcyBwcm9wZXJ0eSB3aWxsIG9ubHkgd29yayB3aXRoIHN5bmNocm9ub3VzIHBsdWdpbnMuXG4gICAgICogSWYgdGhlIHByb2Nlc3NvciBjb250YWlucyBhbnkgYXN5bmNocm9ub3VzIHBsdWdpbnNcbiAgICAgKiBpdCB3aWxsIHRocm93IGFuIGVycm9yLiBUaGlzIGlzIHdoeSB0aGlzIG1ldGhvZCBpcyBvbmx5XG4gICAgICogZm9yIGRlYnVnIHB1cnBvc2UsIHlvdSBzaG91bGQgYWx3YXlzIHVzZSB7QGxpbmsgTGF6eVJlc3VsdCN0aGVufS5cbiAgICAgKlxuICAgICAqIEB0eXBlIHtzdHJpbmd9XG4gICAgICogQHNlZSBSZXN1bHQjY3NzXG4gICAgICovXG4gICAgZ2V0IGNzcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5naWZ5KCkuY3NzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFsaWFzIGZvciB0aGUgYGNzc2AgcHJvcGVydHkuIFVzZSBpdCB3aXRoIHN5bnRheGVzXG4gICAgICogdGhhdCBnZW5lcmF0ZSBub24tQ1NTIG91dHB1dC5cbiAgICAgKlxuICAgICAqIFRoaXMgcHJvcGVydHkgd2lsbCBvbmx5IHdvcmsgd2l0aCBzeW5jaHJvbm91cyBwbHVnaW5zLlxuICAgICAqIElmIHRoZSBwcm9jZXNzb3IgY29udGFpbnMgYW55IGFzeW5jaHJvbm91cyBwbHVnaW5zXG4gICAgICogaXQgd2lsbCB0aHJvdyBhbiBlcnJvci4gVGhpcyBpcyB3aHkgdGhpcyBtZXRob2QgaXMgb25seVxuICAgICAqIGZvciBkZWJ1ZyBwdXJwb3NlLCB5b3Ugc2hvdWxkIGFsd2F5cyB1c2Uge0BsaW5rIExhenlSZXN1bHQjdGhlbn0uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7c3RyaW5nfVxuICAgICAqIEBzZWUgUmVzdWx0I2NvbnRlbnRcbiAgICAgKi9cbiAgICBnZXQgY29udGVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5naWZ5KCkuY29udGVudDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzZXMgaW5wdXQgQ1NTIHRocm91Z2ggc3luY2hyb25vdXMgcGx1Z2luc1xuICAgICAqIGFuZCByZXR1cm5zIHtAbGluayBSZXN1bHQjbWFwfS5cbiAgICAgKlxuICAgICAqIFRoaXMgcHJvcGVydHkgd2lsbCBvbmx5IHdvcmsgd2l0aCBzeW5jaHJvbm91cyBwbHVnaW5zLlxuICAgICAqIElmIHRoZSBwcm9jZXNzb3IgY29udGFpbnMgYW55IGFzeW5jaHJvbm91cyBwbHVnaW5zXG4gICAgICogaXQgd2lsbCB0aHJvdyBhbiBlcnJvci4gVGhpcyBpcyB3aHkgdGhpcyBtZXRob2QgaXMgb25seVxuICAgICAqIGZvciBkZWJ1ZyBwdXJwb3NlLCB5b3Ugc2hvdWxkIGFsd2F5cyB1c2Uge0BsaW5rIExhenlSZXN1bHQjdGhlbn0uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7U291cmNlTWFwR2VuZXJhdG9yfVxuICAgICAqIEBzZWUgUmVzdWx0I21hcFxuICAgICAqL1xuICAgIGdldCBtYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0cmluZ2lmeSgpLm1hcDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzZXMgaW5wdXQgQ1NTIHRocm91Z2ggc3luY2hyb25vdXMgcGx1Z2luc1xuICAgICAqIGFuZCByZXR1cm5zIHtAbGluayBSZXN1bHQjcm9vdH0uXG4gICAgICpcbiAgICAgKiBUaGlzIHByb3BlcnR5IHdpbGwgb25seSB3b3JrIHdpdGggc3luY2hyb25vdXMgcGx1Z2lucy4gSWYgdGhlIHByb2Nlc3NvclxuICAgICAqIGNvbnRhaW5zIGFueSBhc3luY2hyb25vdXMgcGx1Z2lucyBpdCB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgICAqXG4gICAgICogVGhpcyBpcyB3aHkgdGhpcyBtZXRob2QgaXMgb25seSBmb3IgZGVidWcgcHVycG9zZSxcbiAgICAgKiB5b3Ugc2hvdWxkIGFsd2F5cyB1c2Uge0BsaW5rIExhenlSZXN1bHQjdGhlbn0uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7Um9vdH1cbiAgICAgKiBAc2VlIFJlc3VsdCNyb290XG4gICAgICovXG4gICAgZ2V0IHJvb3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN5bmMoKS5yb290O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFByb2Nlc3NlcyBpbnB1dCBDU1MgdGhyb3VnaCBzeW5jaHJvbm91cyBwbHVnaW5zXG4gICAgICogYW5kIHJldHVybnMge0BsaW5rIFJlc3VsdCNtZXNzYWdlc30uXG4gICAgICpcbiAgICAgKiBUaGlzIHByb3BlcnR5IHdpbGwgb25seSB3b3JrIHdpdGggc3luY2hyb25vdXMgcGx1Z2lucy4gSWYgdGhlIHByb2Nlc3NvclxuICAgICAqIGNvbnRhaW5zIGFueSBhc3luY2hyb25vdXMgcGx1Z2lucyBpdCB3aWxsIHRocm93IGFuIGVycm9yLlxuICAgICAqXG4gICAgICogVGhpcyBpcyB3aHkgdGhpcyBtZXRob2QgaXMgb25seSBmb3IgZGVidWcgcHVycG9zZSxcbiAgICAgKiB5b3Ugc2hvdWxkIGFsd2F5cyB1c2Uge0BsaW5rIExhenlSZXN1bHQjdGhlbn0uXG4gICAgICpcbiAgICAgKiBAdHlwZSB7TWVzc2FnZVtdfVxuICAgICAqIEBzZWUgUmVzdWx0I21lc3NhZ2VzXG4gICAgICovXG4gICAgZ2V0IG1lc3NhZ2VzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5zeW5jKCkubWVzc2FnZXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvY2Vzc2VzIGlucHV0IENTUyB0aHJvdWdoIHN5bmNocm9ub3VzIHBsdWdpbnNcbiAgICAgKiBhbmQgY2FsbHMge0BsaW5rIFJlc3VsdCN3YXJuaW5ncygpfS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dhcm5pbmdbXX0gd2FybmluZ3MgZnJvbSBwbHVnaW5zXG4gICAgICovXG4gICAgd2FybmluZ3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN5bmMoKS53YXJuaW5ncygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFsaWFzIGZvciB0aGUge0BsaW5rIExhenlSZXN1bHQjY3NzfSBwcm9wZXJ0eS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogbGF6eSArICcnID09PSBsYXp5LmNzcztcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gb3V0cHV0IENTU1xuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jc3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUHJvY2Vzc2VzIGlucHV0IENTUyB0aHJvdWdoIHN5bmNocm9ub3VzIGFuZCBhc3luY2hyb25vdXMgcGx1Z2luc1xuICAgICAqIGFuZCBjYWxscyBgb25GdWxmaWxsZWRgIHdpdGggYSBSZXN1bHQgaW5zdGFuY2UuIElmIGEgcGx1Z2luIHRocm93c1xuICAgICAqIGFuIGVycm9yLCB0aGUgYG9uUmVqZWN0ZWRgIGNhbGxiYWNrIHdpbGwgYmUgZXhlY3V0ZWQuXG4gICAgICpcbiAgICAgKiBJdCBpbXBsZW1lbnRzIHN0YW5kYXJkIFByb21pc2UgQVBJLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvbkZ1bGZpbGxlZH0gb25GdWxmaWxsZWQgLSBjYWxsYmFjayB3aWxsIGJlIGV4ZWN1dGVkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGVuIGFsbCBwbHVnaW5zIHdpbGwgZmluaXNoIHdvcmtcbiAgICAgKiBAcGFyYW0ge29uUmVqZWN0ZWR9ICBvblJlamVjdGVkICAtIGNhbGxiYWNrIHdpbGwgYmUgZXhlY3V0ZWQgb24gYW55IGVycm9yXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtQcm9taXNlfSBQcm9taXNlIEFQSSB0byBtYWtlIHF1ZXVlXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHBvc3Rjc3MoW2Nzc25leHRdKS5wcm9jZXNzKGNzcywgeyBmcm9tOiBjc3NQYXRoIH0pLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgKiAgIGNvbnNvbGUubG9nKHJlc3VsdC5jc3MpO1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICAgICAgaWYgKCEoJ2Zyb20nIGluIHRoaXMub3B0cykpIHtcbiAgICAgICAgICAgIHdhcm5PbmNlKFxuICAgICAgICAgICAgICAgICdXaXRob3V0IGBmcm9tYCBvcHRpb24gUG9zdENTUyBjb3VsZCBnZW5lcmF0ZSB3cm9uZyAnICtcbiAgICAgICAgICAgICAgICAnc291cmNlIG1hcCBhbmQgd2lsbCBub3QgZmluZCBCcm93c2Vyc2xpc3QgY29uZmlnLiAnICtcbiAgICAgICAgICAgICAgICAnU2V0IGl0IHRvIENTUyBmaWxlIHBhdGggb3IgdG8gYHVuZGVmaW5lZGAgdG8gcHJldmVudCAnICtcbiAgICAgICAgICAgICAgICAndGhpcyB3YXJuaW5nLidcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuYXN5bmMoKS50aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQcm9jZXNzZXMgaW5wdXQgQ1NTIHRocm91Z2ggc3luY2hyb25vdXMgYW5kIGFzeW5jaHJvbm91cyBwbHVnaW5zXG4gICAgICogYW5kIGNhbGxzIG9uUmVqZWN0ZWQgZm9yIGVhY2ggZXJyb3IgdGhyb3duIGluIGFueSBwbHVnaW4uXG4gICAgICpcbiAgICAgKiBJdCBpbXBsZW1lbnRzIHN0YW5kYXJkIFByb21pc2UgQVBJLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtvblJlamVjdGVkfSBvblJlamVjdGVkIC0gY2FsbGJhY2sgd2lsbCBiZSBleGVjdXRlZCBvbiBhbnkgZXJyb3JcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1Byb21pc2V9IFByb21pc2UgQVBJIHRvIG1ha2UgcXVldWVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogcG9zdGNzcyhbY3NzbmV4dF0pLnByb2Nlc3MoY3NzKS50aGVuKHJlc3VsdCA9PiB7XG4gICAgICogICBjb25zb2xlLmxvZyhyZXN1bHQuY3NzKTtcbiAgICAgKiB9KS5jYXRjaChlcnJvciA9PiB7XG4gICAgICogICBjb25zb2xlLmVycm9yKGVycm9yKTtcbiAgICAgKiB9KTtcbiAgICAgKi9cbiAgICBjYXRjaChvblJlamVjdGVkKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFzeW5jKCkuY2F0Y2gob25SZWplY3RlZCk7XG4gICAgfVxuXG4gICAgaGFuZGxlRXJyb3IoZXJyb3IsIHBsdWdpbikge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yO1xuICAgICAgICAgICAgaWYgKCBlcnJvci5uYW1lID09PSAnQ3NzU3ludGF4RXJyb3InICYmICFlcnJvci5wbHVnaW4gKSB7XG4gICAgICAgICAgICAgICAgZXJyb3IucGx1Z2luID0gcGx1Z2luLnBvc3Rjc3NQbHVnaW47XG4gICAgICAgICAgICAgICAgZXJyb3Iuc2V0TWVzc2FnZSgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICggcGx1Z2luLnBvc3Rjc3NWZXJzaW9uICkge1xuICAgICAgICAgICAgICAgIGxldCBwbHVnaW5OYW1lID0gcGx1Z2luLnBvc3Rjc3NQbHVnaW47XG4gICAgICAgICAgICAgICAgbGV0IHBsdWdpblZlciAgPSBwbHVnaW4ucG9zdGNzc1ZlcnNpb247XG4gICAgICAgICAgICAgICAgbGV0IHJ1bnRpbWVWZXIgPSB0aGlzLnJlc3VsdC5wcm9jZXNzb3IudmVyc2lvbjtcbiAgICAgICAgICAgICAgICBsZXQgYSA9IHBsdWdpblZlci5zcGxpdCgnLicpO1xuICAgICAgICAgICAgICAgIGxldCBiID0gcnVudGltZVZlci5zcGxpdCgnLicpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCBhWzBdICE9PSBiWzBdIHx8IHBhcnNlSW50KGFbMV0pID4gcGFyc2VJbnQoYlsxXSkgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgICAnVW5rbm93biBlcnJvciBmcm9tIFBvc3RDU1MgcGx1Z2luLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdZb3VyIGN1cnJlbnQgUG9zdENTUyB2ZXJzaW9uICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgJ2lzICcgKyBydW50aW1lVmVyICsgJywgYnV0ICcgKyBwbHVnaW5OYW1lICsgJyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICd1c2VzICcgKyBwbHVnaW5WZXIgKyAnLiBQZXJoYXBzIHRoaXMgaXMgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAndGhlIHNvdXJjZSBvZiB0aGUgZXJyb3IgYmVsb3cuJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGlmICggY29uc29sZSAmJiBjb25zb2xlLmVycm9yICkgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmNUaWNrKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBpZiAoIHRoaXMucGx1Z2luID49IHRoaXMucHJvY2Vzc29yLnBsdWdpbnMubGVuZ3RoICkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHJlc29sdmUoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBsZXQgcGx1Z2luICA9IHRoaXMucHJvY2Vzc29yLnBsdWdpbnNbdGhpcy5wbHVnaW5dO1xuICAgICAgICAgICAgbGV0IHByb21pc2UgPSB0aGlzLnJ1bihwbHVnaW4pO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4gKz0gMTtcblxuICAgICAgICAgICAgaWYgKCBpc1Byb21pc2UocHJvbWlzZSkgKSB7XG4gICAgICAgICAgICAgICAgcHJvbWlzZS50aGVuKCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYXN5bmNUaWNrKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgICAgICAgfSkuY2F0Y2goIGVycm9yID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcihlcnJvciwgcGx1Z2luKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wcm9jZXNzZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFzeW5jVGljayhyZXNvbHZlLCByZWplY3QpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NlZCA9IHRydWU7XG4gICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYXN5bmMoKSB7XG4gICAgICAgIGlmICggdGhpcy5wcm9jZXNzZWQgKSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoIChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIHRoaXMuZXJyb3IgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlamVjdCh0aGlzLmVycm9yKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHRoaXMuc3RyaW5naWZ5KCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmICggdGhpcy5wcm9jZXNzaW5nICkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJvY2Vzc2luZztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucHJvY2Vzc2luZyA9IG5ldyBQcm9taXNlKCAocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBpZiAoIHRoaXMuZXJyb3IgKSByZXR1cm4gcmVqZWN0KHRoaXMuZXJyb3IpO1xuICAgICAgICAgICAgdGhpcy5wbHVnaW4gPSAwO1xuICAgICAgICAgICAgdGhpcy5hc3luY1RpY2socmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSkudGhlbiggKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RyaW5naWZ5KCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiB0aGlzLnByb2Nlc3Npbmc7XG4gICAgfVxuXG4gICAgc3luYygpIHtcbiAgICAgICAgaWYgKCB0aGlzLnByb2Nlc3NlZCApIHJldHVybiB0aGlzLnJlc3VsdDtcbiAgICAgICAgdGhpcy5wcm9jZXNzZWQgPSB0cnVlO1xuXG4gICAgICAgIGlmICggdGhpcy5wcm9jZXNzaW5nICkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgICAgICdVc2UgcHJvY2Vzcyhjc3MpLnRoZW4oY2IpIHRvIHdvcmsgd2l0aCBhc3luYyBwbHVnaW5zJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIHRoaXMuZXJyb3IgKSB0aHJvdyB0aGlzLmVycm9yO1xuXG4gICAgICAgIGZvciAoIGxldCBwbHVnaW4gb2YgdGhpcy5yZXN1bHQucHJvY2Vzc29yLnBsdWdpbnMgKSB7XG4gICAgICAgICAgICBsZXQgcHJvbWlzZSA9IHRoaXMucnVuKHBsdWdpbik7XG4gICAgICAgICAgICBpZiAoIGlzUHJvbWlzZShwcm9taXNlKSApIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICdVc2UgcHJvY2Vzcyhjc3MpLnRoZW4oY2IpIHRvIHdvcmsgd2l0aCBhc3luYyBwbHVnaW5zJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5yZXN1bHQ7XG4gICAgfVxuXG4gICAgcnVuKHBsdWdpbikge1xuICAgICAgICB0aGlzLnJlc3VsdC5sYXN0UGx1Z2luID0gcGx1Z2luO1xuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICByZXR1cm4gcGx1Z2luKHRoaXMucmVzdWx0LnJvb3QsIHRoaXMucmVzdWx0KTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3IoZXJyb3IsIHBsdWdpbik7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHN0cmluZ2lmeSgpIHtcbiAgICAgICAgaWYgKCB0aGlzLnN0cmluZ2lmaWVkICkgcmV0dXJuIHRoaXMucmVzdWx0O1xuICAgICAgICB0aGlzLnN0cmluZ2lmaWVkID0gdHJ1ZTtcblxuICAgICAgICB0aGlzLnN5bmMoKTtcblxuICAgICAgICBsZXQgb3B0cyA9IHRoaXMucmVzdWx0Lm9wdHM7XG4gICAgICAgIGxldCBzdHIgID0gc3RyaW5naWZ5O1xuICAgICAgICBpZiAoIG9wdHMuc3ludGF4ICkgICAgICBzdHIgPSBvcHRzLnN5bnRheC5zdHJpbmdpZnk7XG4gICAgICAgIGlmICggb3B0cy5zdHJpbmdpZmllciApIHN0ciA9IG9wdHMuc3RyaW5naWZpZXI7XG4gICAgICAgIGlmICggc3RyLnN0cmluZ2lmeSApICAgIHN0ciA9IHN0ci5zdHJpbmdpZnk7XG5cbiAgICAgICAgbGV0IG1hcCAgPSBuZXcgTWFwR2VuZXJhdG9yKHN0ciwgdGhpcy5yZXN1bHQucm9vdCwgdGhpcy5yZXN1bHQub3B0cyk7XG4gICAgICAgIGxldCBkYXRhID0gbWFwLmdlbmVyYXRlKCk7XG4gICAgICAgIHRoaXMucmVzdWx0LmNzcyA9IGRhdGFbMF07XG4gICAgICAgIHRoaXMucmVzdWx0Lm1hcCA9IGRhdGFbMV07XG5cbiAgICAgICAgcmV0dXJuIHRoaXMucmVzdWx0O1xuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBMYXp5UmVzdWx0O1xuXG4vKipcbiAqIEBjYWxsYmFjayBvbkZ1bGZpbGxlZFxuICogQHBhcmFtIHtSZXN1bHR9IHJlc3VsdFxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIG9uUmVqZWN0ZWRcbiAqIEBwYXJhbSB7RXJyb3J9IGVycm9yXG4gKi9cbiJdfQ==
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/list.js b/node_modules/postcss-reporter/node_modules/postcss/lib/list.js
new file mode 100644
index 00000000..ac1e9d63
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/list.js
@@ -0,0 +1,95 @@
+'use strict';
+
+exports.__esModule = true;
+/**
+ * Contains helpers for safely splitting lists of CSS values,
+ * preserving parentheses and quotes.
+ *
+ * @example
+ * const list = postcss.list;
+ *
+ * @namespace list
+ */
+var list = {
+ split: function split(string, separators, last) {
+ var array = [];
+ var current = '';
+ var split = false;
+
+ var func = 0;
+ var quote = false;
+ var escape = false;
+
+ for (var i = 0; i < string.length; i++) {
+ var letter = string[i];
+
+ if (quote) {
+ if (escape) {
+ escape = false;
+ } else if (letter === '\\') {
+ escape = true;
+ } else if (letter === quote) {
+ quote = false;
+ }
+ } else if (letter === '"' || letter === '\'') {
+ quote = letter;
+ } else if (letter === '(') {
+ func += 1;
+ } else if (letter === ')') {
+ if (func > 0) func -= 1;
+ } else if (func === 0) {
+ if (separators.indexOf(letter) !== -1) split = true;
+ }
+
+ if (split) {
+ if (current !== '') array.push(current.trim());
+ current = '';
+ split = false;
+ } else {
+ current += letter;
+ }
+ }
+
+ if (last || current !== '') array.push(current.trim());
+ return array;
+ },
+
+
+ /**
+ * Safely splits space-separated values (such as those for `background`,
+ * `border-radius`, and other shorthand properties).
+ *
+ * @param {string} string - space-separated values
+ *
+ * @return {string[]} split values
+ *
+ * @example
+ * postcss.list.space('1px calc(10% + 1px)') //=> ['1px', 'calc(10% + 1px)']
+ */
+ space: function space(string) {
+ var spaces = [' ', '\n', '\t'];
+ return list.split(string, spaces);
+ },
+
+
+ /**
+ * Safely splits comma-separated values (such as those for `transition-*`
+ * and `background` properties).
+ *
+ * @param {string} string - comma-separated values
+ *
+ * @return {string[]} split values
+ *
+ * @example
+ * postcss.list.comma('black, linear-gradient(white, black)')
+ * //=> ['black', 'linear-gradient(white, black)']
+ */
+ comma: function comma(string) {
+ var comma = ',';
+ return list.split(string, [comma], true);
+ }
+};
+
+exports.default = list;
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImxpc3QuZXM2Il0sIm5hbWVzIjpbImxpc3QiLCJzcGxpdCIsInN0cmluZyIsInNlcGFyYXRvcnMiLCJsYXN0IiwiYXJyYXkiLCJjdXJyZW50IiwiZnVuYyIsInF1b3RlIiwiZXNjYXBlIiwiaSIsImxlbmd0aCIsImxldHRlciIsImluZGV4T2YiLCJwdXNoIiwidHJpbSIsInNwYWNlIiwic3BhY2VzIiwiY29tbWEiXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7Ozs7Ozs7QUFTQSxJQUFJQSxPQUFPO0FBRVBDLFNBRk8saUJBRURDLE1BRkMsRUFFT0MsVUFGUCxFQUVtQkMsSUFGbkIsRUFFeUI7QUFDNUIsWUFBSUMsUUFBVSxFQUFkO0FBQ0EsWUFBSUMsVUFBVSxFQUFkO0FBQ0EsWUFBSUwsUUFBVSxLQUFkOztBQUVBLFlBQUlNLE9BQVUsQ0FBZDtBQUNBLFlBQUlDLFFBQVUsS0FBZDtBQUNBLFlBQUlDLFNBQVUsS0FBZDs7QUFFQSxhQUFNLElBQUlDLElBQUksQ0FBZCxFQUFpQkEsSUFBSVIsT0FBT1MsTUFBNUIsRUFBb0NELEdBQXBDLEVBQTBDO0FBQ3RDLGdCQUFJRSxTQUFTVixPQUFPUSxDQUFQLENBQWI7O0FBRUEsZ0JBQUtGLEtBQUwsRUFBYTtBQUNULG9CQUFLQyxNQUFMLEVBQWM7QUFDVkEsNkJBQVMsS0FBVDtBQUNILGlCQUZELE1BRU8sSUFBS0csV0FBVyxJQUFoQixFQUF1QjtBQUMxQkgsNkJBQVMsSUFBVDtBQUNILGlCQUZNLE1BRUEsSUFBS0csV0FBV0osS0FBaEIsRUFBd0I7QUFDM0JBLDRCQUFRLEtBQVI7QUFDSDtBQUNKLGFBUkQsTUFRTyxJQUFLSSxXQUFXLEdBQVgsSUFBa0JBLFdBQVcsSUFBbEMsRUFBeUM7QUFDNUNKLHdCQUFRSSxNQUFSO0FBQ0gsYUFGTSxNQUVBLElBQUtBLFdBQVcsR0FBaEIsRUFBc0I7QUFDekJMLHdCQUFRLENBQVI7QUFDSCxhQUZNLE1BRUEsSUFBS0ssV0FBVyxHQUFoQixFQUFzQjtBQUN6QixvQkFBS0wsT0FBTyxDQUFaLEVBQWdCQSxRQUFRLENBQVI7QUFDbkIsYUFGTSxNQUVBLElBQUtBLFNBQVMsQ0FBZCxFQUFrQjtBQUNyQixvQkFBS0osV0FBV1UsT0FBWCxDQUFtQkQsTUFBbkIsTUFBK0IsQ0FBQyxDQUFyQyxFQUF5Q1gsUUFBUSxJQUFSO0FBQzVDOztBQUVELGdCQUFLQSxLQUFMLEVBQWE7QUFDVCxvQkFBS0ssWUFBWSxFQUFqQixFQUFzQkQsTUFBTVMsSUFBTixDQUFXUixRQUFRUyxJQUFSLEVBQVg7QUFDdEJULDBCQUFVLEVBQVY7QUFDQUwsd0JBQVUsS0FBVjtBQUNILGFBSkQsTUFJTztBQUNISywyQkFBV00sTUFBWDtBQUNIO0FBQ0o7O0FBRUQsWUFBS1IsUUFBUUUsWUFBWSxFQUF6QixFQUE4QkQsTUFBTVMsSUFBTixDQUFXUixRQUFRUyxJQUFSLEVBQVg7QUFDOUIsZUFBT1YsS0FBUDtBQUNILEtBM0NNOzs7QUE2Q1A7Ozs7Ozs7Ozs7O0FBV0FXLFNBeERPLGlCQXdERGQsTUF4REMsRUF3RE87QUFDVixZQUFJZSxTQUFTLENBQUMsR0FBRCxFQUFNLElBQU4sRUFBWSxJQUFaLENBQWI7QUFDQSxlQUFPakIsS0FBS0MsS0FBTCxDQUFXQyxNQUFYLEVBQW1CZSxNQUFuQixDQUFQO0FBQ0gsS0EzRE07OztBQTZEUDs7Ozs7Ozs7Ozs7O0FBWUFDLFNBekVPLGlCQXlFRGhCLE1BekVDLEVBeUVPO0FBQ1YsWUFBSWdCLFFBQVEsR0FBWjtBQUNBLGVBQU9sQixLQUFLQyxLQUFMLENBQVdDLE1BQVgsRUFBbUIsQ0FBQ2dCLEtBQUQsQ0FBbkIsRUFBNEIsSUFBNUIsQ0FBUDtBQUNIO0FBNUVNLENBQVg7O2tCQWdGZWxCLEkiLCJmaWxlIjoibGlzdC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udGFpbnMgaGVscGVycyBmb3Igc2FmZWx5IHNwbGl0dGluZyBsaXN0cyBvZiBDU1MgdmFsdWVzLFxuICogcHJlc2VydmluZyBwYXJlbnRoZXNlcyBhbmQgcXVvdGVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBsaXN0ID0gcG9zdGNzcy5saXN0O1xuICpcbiAqIEBuYW1lc3BhY2UgbGlzdFxuICovXG5sZXQgbGlzdCA9IHtcblxuICAgIHNwbGl0KHN0cmluZywgc2VwYXJhdG9ycywgbGFzdCkge1xuICAgICAgICBsZXQgYXJyYXkgICA9IFtdO1xuICAgICAgICBsZXQgY3VycmVudCA9ICcnO1xuICAgICAgICBsZXQgc3BsaXQgICA9IGZhbHNlO1xuXG4gICAgICAgIGxldCBmdW5jICAgID0gMDtcbiAgICAgICAgbGV0IHF1b3RlICAgPSBmYWxzZTtcbiAgICAgICAgbGV0IGVzY2FwZSAgPSBmYWxzZTtcblxuICAgICAgICBmb3IgKCBsZXQgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoOyBpKysgKSB7XG4gICAgICAgICAgICBsZXQgbGV0dGVyID0gc3RyaW5nW2ldO1xuXG4gICAgICAgICAgICBpZiAoIHF1b3RlICkge1xuICAgICAgICAgICAgICAgIGlmICggZXNjYXBlICkge1xuICAgICAgICAgICAgICAgICAgICBlc2NhcGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBsZXR0ZXIgPT09ICdcXFxcJyApIHtcbiAgICAgICAgICAgICAgICAgICAgZXNjYXBlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCBsZXR0ZXIgPT09IHF1b3RlICkge1xuICAgICAgICAgICAgICAgICAgICBxdW90ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIGxldHRlciA9PT0gJ1wiJyB8fCBsZXR0ZXIgPT09ICdcXCcnICkge1xuICAgICAgICAgICAgICAgIHF1b3RlID0gbGV0dGVyO1xuICAgICAgICAgICAgfSBlbHNlIGlmICggbGV0dGVyID09PSAnKCcgKSB7XG4gICAgICAgICAgICAgICAgZnVuYyArPSAxO1xuICAgICAgICAgICAgfSBlbHNlIGlmICggbGV0dGVyID09PSAnKScgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCBmdW5jID4gMCApIGZ1bmMgLT0gMTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIGZ1bmMgPT09IDAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCBzZXBhcmF0b3JzLmluZGV4T2YobGV0dGVyKSAhPT0gLTEgKSBzcGxpdCA9IHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICggc3BsaXQgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCBjdXJyZW50ICE9PSAnJyApIGFycmF5LnB1c2goY3VycmVudC50cmltKCkpO1xuICAgICAgICAgICAgICAgIGN1cnJlbnQgPSAnJztcbiAgICAgICAgICAgICAgICBzcGxpdCAgID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGN1cnJlbnQgKz0gbGV0dGVyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCBsYXN0IHx8IGN1cnJlbnQgIT09ICcnICkgYXJyYXkucHVzaChjdXJyZW50LnRyaW0oKSk7XG4gICAgICAgIHJldHVybiBhcnJheTtcbiAgICB9LFxuXG4gICAgLyoqXG4gICAgICogU2FmZWx5IHNwbGl0cyBzcGFjZS1zZXBhcmF0ZWQgdmFsdWVzIChzdWNoIGFzIHRob3NlIGZvciBgYmFja2dyb3VuZGAsXG4gICAgICogYGJvcmRlci1yYWRpdXNgLCBhbmQgb3RoZXIgc2hvcnRoYW5kIHByb3BlcnRpZXMpLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHN0cmluZyAtIHNwYWNlLXNlcGFyYXRlZCB2YWx1ZXNcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge3N0cmluZ1tdfSBzcGxpdCB2YWx1ZXNcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogcG9zdGNzcy5saXN0LnNwYWNlKCcxcHggY2FsYygxMCUgKyAxcHgpJykgLy89PiBbJzFweCcsICdjYWxjKDEwJSArIDFweCknXVxuICAgICAqL1xuICAgIHNwYWNlKHN0cmluZykge1xuICAgICAgICBsZXQgc3BhY2VzID0gWycgJywgJ1xcbicsICdcXHQnXTtcbiAgICAgICAgcmV0dXJuIGxpc3Quc3BsaXQoc3RyaW5nLCBzcGFjZXMpO1xuICAgIH0sXG5cbiAgICAvKipcbiAgICAgKiBTYWZlbHkgc3BsaXRzIGNvbW1hLXNlcGFyYXRlZCB2YWx1ZXMgKHN1Y2ggYXMgdGhvc2UgZm9yIGB0cmFuc2l0aW9uLSpgXG4gICAgICogYW5kIGBiYWNrZ3JvdW5kYCBwcm9wZXJ0aWVzKS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJpbmcgLSBjb21tYS1zZXBhcmF0ZWQgdmFsdWVzXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmdbXX0gc3BsaXQgdmFsdWVzXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHBvc3Rjc3MubGlzdC5jb21tYSgnYmxhY2ssIGxpbmVhci1ncmFkaWVudCh3aGl0ZSwgYmxhY2spJylcbiAgICAgKiAvLz0+IFsnYmxhY2snLCAnbGluZWFyLWdyYWRpZW50KHdoaXRlLCBibGFjayknXVxuICAgICAqL1xuICAgIGNvbW1hKHN0cmluZykge1xuICAgICAgICBsZXQgY29tbWEgPSAnLCc7XG4gICAgICAgIHJldHVybiBsaXN0LnNwbGl0KHN0cmluZywgW2NvbW1hXSwgdHJ1ZSk7XG4gICAgfVxuXG59O1xuXG5leHBvcnQgZGVmYXVsdCBsaXN0O1xuIl19
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/map-generator.js b/node_modules/postcss-reporter/node_modules/postcss/lib/map-generator.js
new file mode 100644
index 00000000..15231738
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/map-generator.js
@@ -0,0 +1,323 @@
+'use strict';
+
+exports.__esModule = true;
+
+var _sourceMap = require('source-map');
+
+var _sourceMap2 = _interopRequireDefault(_sourceMap);
+
+var _path = require('path');
+
+var _path2 = _interopRequireDefault(_path);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var MapGenerator = function () {
+ function MapGenerator(stringify, root, opts) {
+ _classCallCheck(this, MapGenerator);
+
+ this.stringify = stringify;
+ this.mapOpts = opts.map || {};
+ this.root = root;
+ this.opts = opts;
+ }
+
+ MapGenerator.prototype.isMap = function isMap() {
+ if (typeof this.opts.map !== 'undefined') {
+ return !!this.opts.map;
+ } else {
+ return this.previous().length > 0;
+ }
+ };
+
+ MapGenerator.prototype.previous = function previous() {
+ var _this = this;
+
+ if (!this.previousMaps) {
+ this.previousMaps = [];
+ this.root.walk(function (node) {
+ if (node.source && node.source.input.map) {
+ var map = node.source.input.map;
+ if (_this.previousMaps.indexOf(map) === -1) {
+ _this.previousMaps.push(map);
+ }
+ }
+ });
+ }
+
+ return this.previousMaps;
+ };
+
+ MapGenerator.prototype.isInline = function isInline() {
+ if (typeof this.mapOpts.inline !== 'undefined') {
+ return this.mapOpts.inline;
+ }
+
+ var annotation = this.mapOpts.annotation;
+ if (typeof annotation !== 'undefined' && annotation !== true) {
+ return false;
+ }
+
+ if (this.previous().length) {
+ return this.previous().some(function (i) {
+ return i.inline;
+ });
+ } else {
+ return true;
+ }
+ };
+
+ MapGenerator.prototype.isSourcesContent = function isSourcesContent() {
+ if (typeof this.mapOpts.sourcesContent !== 'undefined') {
+ return this.mapOpts.sourcesContent;
+ }
+ if (this.previous().length) {
+ return this.previous().some(function (i) {
+ return i.withContent();
+ });
+ } else {
+ return true;
+ }
+ };
+
+ MapGenerator.prototype.clearAnnotation = function clearAnnotation() {
+ if (this.mapOpts.annotation === false) return;
+
+ var node = void 0;
+ for (var i = this.root.nodes.length - 1; i >= 0; i--) {
+ node = this.root.nodes[i];
+ if (node.type !== 'comment') continue;
+ if (node.text.indexOf('# sourceMappingURL=') === 0) {
+ this.root.removeChild(i);
+ }
+ }
+ };
+
+ MapGenerator.prototype.setSourcesContent = function setSourcesContent() {
+ var _this2 = this;
+
+ var already = {};
+ this.root.walk(function (node) {
+ if (node.source) {
+ var from = node.source.input.from;
+ if (from && !already[from]) {
+ already[from] = true;
+ var relative = _this2.relative(from);
+ _this2.map.setSourceContent(relative, node.source.input.css);
+ }
+ }
+ });
+ };
+
+ MapGenerator.prototype.applyPrevMaps = function applyPrevMaps() {
+ for (var _iterator = this.previous(), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var prev = _ref;
+
+ var from = this.relative(prev.file);
+ var root = prev.root || _path2.default.dirname(prev.file);
+ var map = void 0;
+
+ if (this.mapOpts.sourcesContent === false) {
+ map = new _sourceMap2.default.SourceMapConsumer(prev.text);
+ if (map.sourcesContent) {
+ map.sourcesContent = map.sourcesContent.map(function () {
+ return null;
+ });
+ }
+ } else {
+ map = prev.consumer();
+ }
+
+ this.map.applySourceMap(map, from, this.relative(root));
+ }
+ };
+
+ MapGenerator.prototype.isAnnotation = function isAnnotation() {
+ if (this.isInline()) {
+ return true;
+ } else if (typeof this.mapOpts.annotation !== 'undefined') {
+ return this.mapOpts.annotation;
+ } else if (this.previous().length) {
+ return this.previous().some(function (i) {
+ return i.annotation;
+ });
+ } else {
+ return true;
+ }
+ };
+
+ MapGenerator.prototype.toBase64 = function toBase64(str) {
+ if (Buffer) {
+ if (Buffer.from && Buffer.from !== Uint8Array.from) {
+ return Buffer.from(str).toString('base64');
+ } else {
+ return new Buffer(str).toString('base64');
+ }
+ } else {
+ return window.btoa(unescape(encodeURIComponent(str)));
+ }
+ };
+
+ MapGenerator.prototype.addAnnotation = function addAnnotation() {
+ var content = void 0;
+
+ if (this.isInline()) {
+
+ content = 'data:application/json;base64,' + this.toBase64(this.map.toString());
+ } else if (typeof this.mapOpts.annotation === 'string') {
+ content = this.mapOpts.annotation;
+ } else {
+ content = this.outputFile() + '.map';
+ }
+
+ var eol = '\n';
+ if (this.css.indexOf('\r\n') !== -1) eol = '\r\n';
+
+ this.css += eol + '/*# sourceMappingURL=' + content + ' */';
+ };
+
+ MapGenerator.prototype.outputFile = function outputFile() {
+ if (this.opts.to) {
+ return this.relative(this.opts.to);
+ } else if (this.opts.from) {
+ return this.relative(this.opts.from);
+ } else {
+ return 'to.css';
+ }
+ };
+
+ MapGenerator.prototype.generateMap = function generateMap() {
+ this.generateString();
+ if (this.isSourcesContent()) this.setSourcesContent();
+ if (this.previous().length > 0) this.applyPrevMaps();
+ if (this.isAnnotation()) this.addAnnotation();
+
+ if (this.isInline()) {
+ return [this.css];
+ } else {
+ return [this.css, this.map];
+ }
+ };
+
+ MapGenerator.prototype.relative = function relative(file) {
+ if (file.indexOf('<') === 0) return file;
+ if (/^\w+:\/\//.test(file)) return file;
+
+ var from = this.opts.to ? _path2.default.dirname(this.opts.to) : '.';
+
+ if (typeof this.mapOpts.annotation === 'string') {
+ from = _path2.default.dirname(_path2.default.resolve(from, this.mapOpts.annotation));
+ }
+
+ file = _path2.default.relative(from, file);
+ if (_path2.default.sep === '\\') {
+ return file.replace(/\\/g, '/');
+ } else {
+ return file;
+ }
+ };
+
+ MapGenerator.prototype.sourcePath = function sourcePath(node) {
+ if (this.mapOpts.from) {
+ return this.mapOpts.from;
+ } else {
+ return this.relative(node.source.input.from);
+ }
+ };
+
+ MapGenerator.prototype.generateString = function generateString() {
+ var _this3 = this;
+
+ this.css = '';
+ this.map = new _sourceMap2.default.SourceMapGenerator({ file: this.outputFile() });
+
+ var line = 1;
+ var column = 1;
+
+ var lines = void 0,
+ last = void 0;
+ this.stringify(this.root, function (str, node, type) {
+ _this3.css += str;
+
+ if (node && type !== 'end') {
+ if (node.source && node.source.start) {
+ _this3.map.addMapping({
+ source: _this3.sourcePath(node),
+ generated: { line: line, column: column - 1 },
+ original: {
+ line: node.source.start.line,
+ column: node.source.start.column - 1
+ }
+ });
+ } else {
+ _this3.map.addMapping({
+ source: '<no source>',
+ original: { line: 1, column: 0 },
+ generated: { line: line, column: column - 1 }
+ });
+ }
+ }
+
+ lines = str.match(/\n/g);
+ if (lines) {
+ line += lines.length;
+ last = str.lastIndexOf('\n');
+ column = str.length - last;
+ } else {
+ column += str.length;
+ }
+
+ if (node && type !== 'start') {
+ if (node.source && node.source.end) {
+ _this3.map.addMapping({
+ source: _this3.sourcePath(node),
+ generated: { line: line, column: column - 1 },
+ original: {
+ line: node.source.end.line,
+ column: node.source.end.column
+ }
+ });
+ } else {
+ _this3.map.addMapping({
+ source: '<no source>',
+ original: { line: 1, column: 0 },
+ generated: { line: line, column: column - 1 }
+ });
+ }
+ }
+ });
+ };
+
+ MapGenerator.prototype.generate = function generate() {
+ this.clearAnnotation();
+
+ if (this.isMap()) {
+ return this.generateMap();
+ } else {
+ var result = '';
+ this.stringify(this.root, function (i) {
+ result += i;
+ });
+ return [result];
+ }
+ };
+
+ return MapGenerator;
+}();
+
+exports.default = MapGenerator;
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm1hcC1nZW5lcmF0b3IuZXM2Il0sIm5hbWVzIjpbIk1hcEdlbmVyYXRvciIsInN0cmluZ2lmeSIsInJvb3QiLCJvcHRzIiwibWFwT3B0cyIsIm1hcCIsImlzTWFwIiwicHJldmlvdXMiLCJsZW5ndGgiLCJwcmV2aW91c01hcHMiLCJ3YWxrIiwibm9kZSIsInNvdXJjZSIsImlucHV0IiwiaW5kZXhPZiIsInB1c2giLCJpc0lubGluZSIsImlubGluZSIsImFubm90YXRpb24iLCJzb21lIiwiaSIsImlzU291cmNlc0NvbnRlbnQiLCJzb3VyY2VzQ29udGVudCIsIndpdGhDb250ZW50IiwiY2xlYXJBbm5vdGF0aW9uIiwibm9kZXMiLCJ0eXBlIiwidGV4dCIsInJlbW92ZUNoaWxkIiwic2V0U291cmNlc0NvbnRlbnQiLCJhbHJlYWR5IiwiZnJvbSIsInJlbGF0aXZlIiwic2V0U291cmNlQ29udGVudCIsImNzcyIsImFwcGx5UHJldk1hcHMiLCJwcmV2IiwiZmlsZSIsInBhdGgiLCJkaXJuYW1lIiwibW96aWxsYSIsIlNvdXJjZU1hcENvbnN1bWVyIiwiY29uc3VtZXIiLCJhcHBseVNvdXJjZU1hcCIsImlzQW5ub3RhdGlvbiIsInRvQmFzZTY0Iiwic3RyIiwiQnVmZmVyIiwiVWludDhBcnJheSIsInRvU3RyaW5nIiwid2luZG93IiwiYnRvYSIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiYWRkQW5ub3RhdGlvbiIsImNvbnRlbnQiLCJvdXRwdXRGaWxlIiwiZW9sIiwidG8iLCJnZW5lcmF0ZU1hcCIsImdlbmVyYXRlU3RyaW5nIiwidGVzdCIsInJlc29sdmUiLCJzZXAiLCJyZXBsYWNlIiwic291cmNlUGF0aCIsIlNvdXJjZU1hcEdlbmVyYXRvciIsImxpbmUiLCJjb2x1bW4iLCJsaW5lcyIsImxhc3QiLCJzdGFydCIsImFkZE1hcHBpbmciLCJnZW5lcmF0ZWQiLCJvcmlnaW5hbCIsIm1hdGNoIiwibGFzdEluZGV4T2YiLCJlbmQiLCJnZW5lcmF0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QVcsRUFBRU4sVUFBRixFQUFRQyxRQUFRQSxTQUFTLENBQXpCO0FBSEsscUJBQXBCO0FBS0g7QUFDSjtBQUNKLFNBakREO0FBa0RILEs7OzJCQUVEVSxRLHVCQUFXO0FBQ1AsYUFBS3RELGVBQUw7O0FBRUEsWUFBSyxLQUFLbEIsS0FBTCxFQUFMLEVBQW9CO0FBQ2hCLG1CQUFPLEtBQUtxRCxXQUFMLEVBQVA7QUFDSCxTQUZELE1BRU87QUFDSCxnQkFBSW9CLFNBQVMsRUFBYjtBQUNBLGlCQUFLOUUsU0FBTCxDQUFlLEtBQUtDLElBQXBCLEVBQTBCLGFBQUs7QUFDM0I2RSwwQkFBVTNELENBQVY7QUFDSCxhQUZEO0FBR0EsbUJBQU8sQ0FBQzJELE1BQUQsQ0FBUDtBQUNIO0FBQ0osSzs7Ozs7a0JBalJnQi9FLFkiLCJmaWxlIjoibWFwLWdlbmVyYXRvci5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBtb3ppbGxhIGZyb20gJ3NvdXJjZS1tYXAnO1xuaW1wb3J0IHBhdGggICAgZnJvbSAncGF0aCc7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1hcEdlbmVyYXRvciB7XG5cbiAgICBjb25zdHJ1Y3RvcihzdHJpbmdpZnksIHJvb3QsIG9wdHMpIHtcbiAgICAgICAgdGhpcy5zdHJpbmdpZnkgPSBzdHJpbmdpZnk7XG4gICAgICAgIHRoaXMubWFwT3B0cyAgID0gb3B0cy5tYXAgfHwgeyB9O1xuICAgICAgICB0aGlzLnJvb3QgICAgICA9IHJvb3Q7XG4gICAgICAgIHRoaXMub3B0cyAgICAgID0gb3B0cztcbiAgICB9XG5cbiAgICBpc01hcCgpIHtcbiAgICAgICAgaWYgKCB0eXBlb2YgdGhpcy5vcHRzLm1hcCAhPT0gJ3VuZGVmaW5lZCcgKSB7XG4gICAgICAgICAgICByZXR1cm4gISF0aGlzLm9wdHMubWFwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJldmlvdXMoKS5sZW5ndGggPiAwO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJldmlvdXMoKSB7XG4gICAgICAgIGlmICggIXRoaXMucHJldmlvdXNNYXBzICkge1xuICAgICAgICAgICAgdGhpcy5wcmV2aW91c01hcHMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMucm9vdC53YWxrKCBub2RlID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIG5vZGUuc291cmNlICYmIG5vZGUuc291cmNlLmlucHV0Lm1hcCApIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG1hcCA9IG5vZGUuc291cmNlLmlucHV0Lm1hcDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCB0aGlzLnByZXZpb3VzTWFwcy5pbmRleE9mKG1hcCkgPT09IC0xICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmV2aW91c01hcHMucHVzaChtYXApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5wcmV2aW91c01hcHM7XG4gICAgfVxuXG4gICAgaXNJbmxpbmUoKSB7XG4gICAgICAgIGlmICggdHlwZW9mIHRoaXMubWFwT3B0cy5pbmxpbmUgIT09ICd1bmRlZmluZWQnICkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFwT3B0cy5pbmxpbmU7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgYW5ub3RhdGlvbiA9IHRoaXMubWFwT3B0cy5hbm5vdGF0aW9uO1xuICAgICAgICBpZiAoIHR5cGVvZiBhbm5vdGF0aW9uICE9PSAndW5kZWZpbmVkJyAmJiBhbm5vdGF0aW9uICE9PSB0cnVlICkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCB0aGlzLnByZXZpb3VzKCkubGVuZ3RoICkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJldmlvdXMoKS5zb21lKCBpID0+IGkuaW5saW5lICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlzU291cmNlc0NvbnRlbnQoKSB7XG4gICAgICAgIGlmICggdHlwZW9mIHRoaXMubWFwT3B0cy5zb3VyY2VzQ29udGVudCAhPT0gJ3VuZGVmaW5lZCcgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXBPcHRzLnNvdXJjZXNDb250ZW50O1xuICAgICAgICB9XG4gICAgICAgIGlmICggdGhpcy5wcmV2aW91cygpLmxlbmd0aCApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnByZXZpb3VzKCkuc29tZSggaSA9PiBpLndpdGhDb250ZW50KCkgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgY2xlYXJBbm5vdGF0aW9uKCkge1xuICAgICAgICBpZiAoIHRoaXMubWFwT3B0cy5hbm5vdGF0aW9uID09PSBmYWxzZSApIHJldHVybjtcblxuICAgICAgICBsZXQgbm9kZTtcbiAgICAgICAgZm9yICggbGV0IGkgPSB0aGlzLnJvb3Qubm9kZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0gKSB7XG4gICAgICAgICAgICBub2RlID0gdGhpcy5yb290Lm5vZGVzW2ldO1xuICAgICAgICAgICAgaWYgKCBub2RlLnR5cGUgIT09ICdjb21tZW50JyApIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKCBub2RlLnRleHQuaW5kZXhPZignIyBzb3VyY2VNYXBwaW5nVVJMPScpID09PSAwICkge1xuICAgICAgICAgICAgICAgIHRoaXMucm9vdC5yZW1vdmVDaGlsZChpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHNldFNvdXJjZXNDb250ZW50KCkge1xuICAgICAgICBsZXQgYWxyZWFkeSA9IHsgfTtcbiAgICAgICAgdGhpcy5yb290LndhbGsoIG5vZGUgPT4ge1xuICAgICAgICAgICAgaWYgKCBub2RlLnNvdXJjZSApIHtcbiAgICAgICAgICAgICAgICBsZXQgZnJvbSA9IG5vZGUuc291cmNlLmlucHV0LmZyb207XG4gICAgICAgICAgICAgICAgaWYgKCBmcm9tICYmICFhbHJlYWR5W2Zyb21dICkge1xuICAgICAgICAgICAgICAgICAgICBhbHJlYWR5W2Zyb21dID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlbGF0aXZlID0gdGhpcy5yZWxhdGl2ZShmcm9tKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAuc2V0U291cmNlQ29udGVudChyZWxhdGl2ZSwgbm9kZS5zb3VyY2UuaW5wdXQuY3NzKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGFwcGx5UHJldk1hcHMoKSB7XG4gICAgICAgIGZvciAoIGxldCBwcmV2IG9mIHRoaXMucHJldmlvdXMoKSApIHtcbiAgICAgICAgICAgIGxldCBmcm9tID0gdGhpcy5yZWxhdGl2ZShwcmV2LmZpbGUpO1xuICAgICAgICAgICAgbGV0IHJvb3QgPSBwcmV2LnJvb3QgfHwgcGF0aC5kaXJuYW1lKHByZXYuZmlsZSk7XG4gICAgICAgICAgICBsZXQgbWFwO1xuXG4gICAgICAgICAgICBpZiAoIHRoaXMubWFwT3B0cy5zb3VyY2VzQ29udGVudCA9PT0gZmFsc2UgKSB7XG4gICAgICAgICAgICAgICAgbWFwID0gbmV3IG1vemlsbGEuU291cmNlTWFwQ29uc3VtZXIocHJldi50ZXh0KTtcbiAgICAgICAgICAgICAgICBpZiAoIG1hcC5zb3VyY2VzQ29udGVudCApIHtcbiAgICAgICAgICAgICAgICAgICAgbWFwLnNvdXJjZXNDb250ZW50ID0gbWFwLnNvdXJjZXNDb250ZW50Lm1hcCggKCkgPT4gbnVsbCApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbWFwID0gcHJldi5jb25zdW1lcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLm1hcC5hcHBseVNvdXJjZU1hcChtYXAsIGZyb20sIHRoaXMucmVsYXRpdmUocm9vdCkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNBbm5vdGF0aW9uKCkge1xuICAgICAgICBpZiAoIHRoaXMuaXNJbmxpbmUoKSApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgdGhpcy5tYXBPcHRzLmFubm90YXRpb24gIT09ICd1bmRlZmluZWQnICkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMubWFwT3B0cy5hbm5vdGF0aW9uO1xuICAgICAgICB9IGVsc2UgaWYgKCB0aGlzLnByZXZpb3VzKCkubGVuZ3RoICkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucHJldmlvdXMoKS5zb21lKCBpID0+IGkuYW5ub3RhdGlvbiApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0b0Jhc2U2NChzdHIpIHtcbiAgICAgICAgaWYgKCBCdWZmZXIgKSB7XG4gICAgICAgICAgICBpZiAoIEJ1ZmZlci5mcm9tICYmIEJ1ZmZlci5mcm9tICE9PSBVaW50OEFycmF5LmZyb20gKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHN0cikudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcihzdHIpLnRvU3RyaW5nKCdiYXNlNjQnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cuYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSkpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYWRkQW5ub3RhdGlvbigpIHtcbiAgICAgICAgbGV0IGNvbnRlbnQ7XG5cbiAgICAgICAgaWYgKCB0aGlzLmlzSW5saW5lKCkgKSB7XG5cbiAgICAgICAgICAgIGNvbnRlbnQgPSAnZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCwnICtcbiAgICAgICAgICAgICAgICB0aGlzLnRvQmFzZTY0KHRoaXMubWFwLnRvU3RyaW5nKCkpO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiB0aGlzLm1hcE9wdHMuYW5ub3RhdGlvbiA9PT0gJ3N0cmluZycgKSB7XG4gICAgICAgICAgICBjb250ZW50ID0gdGhpcy5tYXBPcHRzLmFubm90YXRpb247XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSB0aGlzLm91dHB1dEZpbGUoKSArICcubWFwJztcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBlb2wgICA9ICdcXG4nO1xuICAgICAgICBpZiAoIHRoaXMuY3NzLmluZGV4T2YoJ1xcclxcbicpICE9PSAtMSApIGVvbCA9ICdcXHJcXG4nO1xuXG4gICAgICAgIHRoaXMuY3NzICs9IGVvbCArICcvKiMgc291cmNlTWFwcGluZ1VSTD0nICsgY29udGVudCArICcgKi8nO1xuICAgIH1cblxuICAgIG91dHB1dEZpbGUoKSB7XG4gICAgICAgIGlmICggdGhpcy5vcHRzLnRvICkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucmVsYXRpdmUodGhpcy5vcHRzLnRvKTtcbiAgICAgICAgfSBlbHNlIGlmICggdGhpcy5vcHRzLmZyb20gKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWxhdGl2ZSh0aGlzLm9wdHMuZnJvbSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gJ3RvLmNzcyc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZW5lcmF0ZU1hcCgpIHtcbiAgICAgICAgdGhpcy5nZW5lcmF0ZVN0cmluZygpO1xuICAgICAgICBpZiAoIHRoaXMuaXNTb3VyY2VzQ29udGVudCgpICkgICAgdGhpcy5zZXRTb3VyY2VzQ29udGVudCgpO1xuICAgICAgICBpZiAoIHRoaXMucHJldmlvdXMoKS5sZW5ndGggPiAwICkgdGhpcy5hcHBseVByZXZNYXBzKCk7XG4gICAgICAgIGlmICggdGhpcy5pc0Fubm90YXRpb24oKSApICAgICAgICB0aGlzLmFkZEFubm90YXRpb24oKTtcblxuICAgICAgICBpZiAoIHRoaXMuaXNJbmxpbmUoKSApIHtcbiAgICAgICAgICAgIHJldHVybiBbdGhpcy5jc3NdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFt0aGlzLmNzcywgdGhpcy5tYXBdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmVsYXRpdmUoZmlsZSkge1xuICAgICAgICBpZiAoIGZpbGUuaW5kZXhPZignPCcpID09PSAwICkgcmV0dXJuIGZpbGU7XG4gICAgICAgIGlmICggL15cXHcrOlxcL1xcLy8udGVzdChmaWxlKSApIHJldHVybiBmaWxlO1xuXG4gICAgICAgIGxldCBmcm9tID0gdGhpcy5vcHRzLnRvID8gcGF0aC5kaXJuYW1lKHRoaXMub3B0cy50bykgOiAnLic7XG5cbiAgICAgICAgaWYgKCB0eXBlb2YgdGhpcy5tYXBPcHRzLmFubm90YXRpb24gPT09ICdzdHJpbmcnICkge1xuICAgICAgICAgICAgZnJvbSA9IHBhdGguZGlybmFtZSggcGF0aC5yZXNvbHZlKGZyb20sIHRoaXMubWFwT3B0cy5hbm5vdGF0aW9uKSApO1xuICAgICAgICB9XG5cbiAgICAgICAgZmlsZSA9IHBhdGgucmVsYXRpdmUoZnJvbSwgZmlsZSk7XG4gICAgICAgIGlmICggcGF0aC5zZXAgPT09ICdcXFxcJyApIHtcbiAgICAgICAgICAgIHJldHVybiBmaWxlLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBmaWxlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc291cmNlUGF0aChub2RlKSB7XG4gICAgICAgIGlmICggdGhpcy5tYXBPcHRzLmZyb20gKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXBPcHRzLmZyb207XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5yZWxhdGl2ZShub2RlLnNvdXJjZS5pbnB1dC5mcm9tKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdlbmVyYXRlU3RyaW5nKCkge1xuICAgICAgICB0aGlzLmNzcyA9ICcnO1xuICAgICAgICB0aGlzLm1hcCA9IG5ldyBtb3ppbGxhLlNvdXJjZU1hcEdlbmVyYXRvcih7IGZpbGU6IHRoaXMub3V0cHV0RmlsZSgpIH0pO1xuXG4gICAgICAgIGxldCBsaW5lICAgPSAxO1xuICAgICAgICBsZXQgY29sdW1uID0gMTtcblxuICAgICAgICBsZXQgbGluZXMsIGxhc3Q7XG4gICAgICAgIHRoaXMuc3RyaW5naWZ5KHRoaXMucm9vdCwgKHN0ciwgbm9kZSwgdHlwZSkgPT4ge1xuICAgICAgICAgICAgdGhpcy5jc3MgKz0gc3RyO1xuXG4gICAgICAgICAgICBpZiAoIG5vZGUgJiYgdHlwZSAhPT0gJ2VuZCcgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCBub2RlLnNvdXJjZSAmJiBub2RlLnNvdXJjZS5zdGFydCApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAuYWRkTWFwcGluZyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6ICAgIHRoaXMuc291cmNlUGF0aChub2RlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZDogeyBsaW5lLCBjb2x1bW46IGNvbHVtbiAtIDEgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsOiAge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmU6ICAgbm9kZS5zb3VyY2Uuc3RhcnQubGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IG5vZGUuc291cmNlLnN0YXJ0LmNvbHVtbiAtIDFcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAuYWRkTWFwcGluZyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6ICAgICc8bm8gc291cmNlPicsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbDogIHsgbGluZTogMSwgY29sdW1uOiAwIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQ6IHsgbGluZSwgY29sdW1uOiBjb2x1bW4gLSAxIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBsaW5lcyA9IHN0ci5tYXRjaCgvXFxuL2cpO1xuICAgICAgICAgICAgaWYgKCBsaW5lcyApIHtcbiAgICAgICAgICAgICAgICBsaW5lICArPSBsaW5lcy5sZW5ndGg7XG4gICAgICAgICAgICAgICAgbGFzdCAgID0gc3RyLmxhc3RJbmRleE9mKCdcXG4nKTtcbiAgICAgICAgICAgICAgICBjb2x1bW4gPSBzdHIubGVuZ3RoIC0gbGFzdDtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29sdW1uICs9IHN0ci5sZW5ndGg7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICggbm9kZSAmJiB0eXBlICE9PSAnc3RhcnQnICkge1xuICAgICAgICAgICAgICAgIGlmICggbm9kZS5zb3VyY2UgJiYgbm9kZS5zb3VyY2UuZW5kICkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm1hcC5hZGRNYXBwaW5nKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZTogICAgdGhpcy5zb3VyY2VQYXRoKG5vZGUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdGVkOiB7IGxpbmUsIGNvbHVtbjogY29sdW1uIC0gMSB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWw6ICB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZTogICBub2RlLnNvdXJjZS5lbmQubGluZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW46IG5vZGUuc291cmNlLmVuZC5jb2x1bW5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tYXAuYWRkTWFwcGluZyh7XG4gICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2U6ICAgICc8bm8gc291cmNlPicsXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbDogIHsgbGluZTogMSwgY29sdW1uOiAwIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmF0ZWQ6IHsgbGluZSwgY29sdW1uOiBjb2x1bW4gLSAxIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZW5lcmF0ZSgpIHtcbiAgICAgICAgdGhpcy5jbGVhckFubm90YXRpb24oKTtcblxuICAgICAgICBpZiAoIHRoaXMuaXNNYXAoKSApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmdlbmVyYXRlTWFwKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgICAgICB0aGlzLnN0cmluZ2lmeSh0aGlzLnJvb3QsIGkgPT4ge1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gW3Jlc3VsdF07XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiJdfQ==
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/node.js b/node_modules/postcss-reporter/node_modules/postcss/lib/node.js
new file mode 100644
index 00000000..31b163bf
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/node.js
@@ -0,0 +1,625 @@
+'use strict';
+
+exports.__esModule = true;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _cssSyntaxError = require('./css-syntax-error');
+
+var _cssSyntaxError2 = _interopRequireDefault(_cssSyntaxError);
+
+var _stringifier = require('./stringifier');
+
+var _stringifier2 = _interopRequireDefault(_stringifier);
+
+var _stringify = require('./stringify');
+
+var _stringify2 = _interopRequireDefault(_stringify);
+
+var _warnOnce = require('./warn-once');
+
+var _warnOnce2 = _interopRequireDefault(_warnOnce);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var cloneNode = function cloneNode(obj, parent) {
+ var cloned = new obj.constructor();
+
+ for (var i in obj) {
+ if (!obj.hasOwnProperty(i)) continue;
+ var value = obj[i];
+ var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);
+
+ if (i === 'parent' && type === 'object') {
+ if (parent) cloned[i] = parent;
+ } else if (i === 'source') {
+ cloned[i] = value;
+ } else if (value instanceof Array) {
+ cloned[i] = value.map(function (j) {
+ return cloneNode(j, cloned);
+ });
+ } else {
+ if (type === 'object' && value !== null) value = cloneNode(value);
+ cloned[i] = value;
+ }
+ }
+
+ return cloned;
+};
+
+/**
+ * All node classes inherit the following common methods.
+ *
+ * @abstract
+ */
+
+var Node = function () {
+
+ /**
+ * @param {object} [defaults] - value for node properties
+ */
+ function Node() {
+ var defaults = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ _classCallCheck(this, Node);
+
+ this.raws = {};
+ if ((typeof defaults === 'undefined' ? 'undefined' : _typeof(defaults)) !== 'object' && typeof defaults !== 'undefined') {
+ throw new Error('PostCSS nodes constructor accepts object, not ' + JSON.stringify(defaults));
+ }
+ for (var name in defaults) {
+ this[name] = defaults[name];
+ }
+ }
+
+ /**
+ * Returns a CssSyntaxError instance containing the original position
+ * of the node in the source, showing line and column numbers and also
+ * a small excerpt to facilitate debugging.
+ *
+ * If present, an input source map will be used to get the original position
+ * of the source, even from a previous compilation step
+ * (e.g., from Sass compilation).
+ *
+ * This method produces very useful error messages.
+ *
+ * @param {string} message - error description
+ * @param {object} [opts] - options
+ * @param {string} opts.plugin - plugin name that created this error.
+ * PostCSS will set it automatically.
+ * @param {string} opts.word - a word inside a node’s string that should
+ * be highlighted as the source of the error
+ * @param {number} opts.index - an index inside a node’s string that should
+ * be highlighted as the source of the error
+ *
+ * @return {CssSyntaxError} error object to throw it
+ *
+ * @example
+ * if ( !variables[name] ) {
+ * throw decl.error('Unknown variable ' + name, { word: name });
+ * // CssSyntaxError: postcss-vars:a.sass:4:3: Unknown variable $black
+ * // color: $black
+ * // a
+ * // ^
+ * // background: white
+ * }
+ */
+
+
+ Node.prototype.error = function error(message) {
+ var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ if (this.source) {
+ var pos = this.positionBy(opts);
+ return this.source.input.error(message, pos.line, pos.column, opts);
+ } else {
+ return new _cssSyntaxError2.default(message);
+ }
+ };
+
+ /**
+ * This method is provided as a convenience wrapper for {@link Result#warn}.
+ *
+ * @param {Result} result - the {@link Result} instance
+ * that will receive the warning
+ * @param {string} text - warning message
+ * @param {object} [opts] - options
+ * @param {string} opts.plugin - plugin name that created this warning.
+ * PostCSS will set it automatically.
+ * @param {string} opts.word - a word inside a node’s string that should
+ * be highlighted as the source of the warning
+ * @param {number} opts.index - an index inside a node’s string that should
+ * be highlighted as the source of the warning
+ *
+ * @return {Warning} created warning object
+ *
+ * @example
+ * const plugin = postcss.plugin('postcss-deprecated', () => {
+ * return (root, result) => {
+ * root.walkDecls('bad', decl => {
+ * decl.warn(result, 'Deprecated property bad');
+ * });
+ * };
+ * });
+ */
+
+
+ Node.prototype.warn = function warn(result, text, opts) {
+ var data = { node: this };
+ for (var i in opts) {
+ data[i] = opts[i];
+ }return result.warn(text, data);
+ };
+
+ /**
+ * Removes the node from its parent and cleans the parent properties
+ * from the node and its children.
+ *
+ * @example
+ * if ( decl.prop.match(/^-webkit-/) ) {
+ * decl.remove();
+ * }
+ *
+ * @return {Node} node to make calls chain
+ */
+
+
+ Node.prototype.remove = function remove() {
+ if (this.parent) {
+ this.parent.removeChild(this);
+ }
+ this.parent = undefined;
+ return this;
+ };
+
+ /**
+ * Returns a CSS string representing the node.
+ *
+ * @param {stringifier|syntax} [stringifier] - a syntax to use
+ * in string generation
+ *
+ * @return {string} CSS string of this node
+ *
+ * @example
+ * postcss.rule({ selector: 'a' }).toString() //=> "a {}"
+ */
+
+
+ Node.prototype.toString = function toString() {
+ var stringifier = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _stringify2.default;
+
+ if (stringifier.stringify) stringifier = stringifier.stringify;
+ var result = '';
+ stringifier(this, function (i) {
+ result += i;
+ });
+ return result;
+ };
+
+ /**
+ * Returns a clone of the node.
+ *
+ * The resulting cloned node and its (cloned) children will have
+ * a clean parent and code style properties.
+ *
+ * @param {object} [overrides] - new properties to override in the clone.
+ *
+ * @example
+ * const cloned = decl.clone({ prop: '-moz-' + decl.prop });
+ * cloned.raws.before //=> undefined
+ * cloned.parent //=> undefined
+ * cloned.toString() //=> -moz-transform: scale(0)
+ *
+ * @return {Node} clone of the node
+ */
+
+
+ Node.prototype.clone = function clone() {
+ var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ var cloned = cloneNode(this);
+ for (var name in overrides) {
+ cloned[name] = overrides[name];
+ }
+ return cloned;
+ };
+
+ /**
+ * Shortcut to clone the node and insert the resulting cloned node
+ * before the current node.
+ *
+ * @param {object} [overrides] - new properties to override in the clone.
+ *
+ * @example
+ * decl.cloneBefore({ prop: '-moz-' + decl.prop });
+ *
+ * @return {Node} - new node
+ */
+
+
+ Node.prototype.cloneBefore = function cloneBefore() {
+ var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ var cloned = this.clone(overrides);
+ this.parent.insertBefore(this, cloned);
+ return cloned;
+ };
+
+ /**
+ * Shortcut to clone the node and insert the resulting cloned node
+ * after the current node.
+ *
+ * @param {object} [overrides] - new properties to override in the clone.
+ *
+ * @return {Node} - new node
+ */
+
+
+ Node.prototype.cloneAfter = function cloneAfter() {
+ var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ var cloned = this.clone(overrides);
+ this.parent.insertAfter(this, cloned);
+ return cloned;
+ };
+
+ /**
+ * Inserts node(s) before the current node and removes the current node.
+ *
+ * @param {...Node} nodes - node(s) to replace current one
+ *
+ * @example
+ * if ( atrule.name == 'mixin' ) {
+ * atrule.replaceWith(mixinRules[atrule.params]);
+ * }
+ *
+ * @return {Node} current node to methods chain
+ */
+
+
+ Node.prototype.replaceWith = function replaceWith() {
+ if (this.parent) {
+ for (var _len = arguments.length, nodes = Array(_len), _key = 0; _key < _len; _key++) {
+ nodes[_key] = arguments[_key];
+ }
+
+ for (var _iterator = nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var node = _ref;
+
+ this.parent.insertBefore(this, node);
+ }
+
+ this.remove();
+ }
+
+ return this;
+ };
+
+ Node.prototype.moveTo = function moveTo(newParent) {
+ (0, _warnOnce2.default)('Node#moveTo was deprecated. Use Container#append.');
+ this.cleanRaws(this.root() === newParent.root());
+ this.remove();
+ newParent.append(this);
+ return this;
+ };
+
+ Node.prototype.moveBefore = function moveBefore(otherNode) {
+ (0, _warnOnce2.default)('Node#moveBefore was deprecated. Use Node#before.');
+ this.cleanRaws(this.root() === otherNode.root());
+ this.remove();
+ otherNode.parent.insertBefore(otherNode, this);
+ return this;
+ };
+
+ Node.prototype.moveAfter = function moveAfter(otherNode) {
+ (0, _warnOnce2.default)('Node#moveAfter was deprecated. Use Node#after.');
+ this.cleanRaws(this.root() === otherNode.root());
+ this.remove();
+ otherNode.parent.insertAfter(otherNode, this);
+ return this;
+ };
+
+ /**
+ * Returns the next child of the node’s parent.
+ * Returns `undefined` if the current node is the last child.
+ *
+ * @return {Node|undefined} next node
+ *
+ * @example
+ * if ( comment.text === 'delete next' ) {
+ * const next = comment.next();
+ * if ( next ) {
+ * next.remove();
+ * }
+ * }
+ */
+
+
+ Node.prototype.next = function next() {
+ if (!this.parent) return undefined;
+ var index = this.parent.index(this);
+ return this.parent.nodes[index + 1];
+ };
+
+ /**
+ * Returns the previous child of the node’s parent.
+ * Returns `undefined` if the current node is the first child.
+ *
+ * @return {Node|undefined} previous node
+ *
+ * @example
+ * const annotation = decl.prev();
+ * if ( annotation.type == 'comment' ) {
+ * readAnnotation(annotation.text);
+ * }
+ */
+
+
+ Node.prototype.prev = function prev() {
+ if (!this.parent) return undefined;
+ var index = this.parent.index(this);
+ return this.parent.nodes[index - 1];
+ };
+
+ /**
+ * Insert new node before current node to current node’s parent.
+ *
+ * Just alias for `node.parent.insertBefore(node, add)`.
+ *
+ * @param {Node|object|string|Node[]} add - new node
+ *
+ * @return {Node} this node for methods chain.
+ *
+ * @example
+ * decl.before('content: ""');
+ */
+
+
+ Node.prototype.before = function before(add) {
+ this.parent.insertBefore(this, add);
+ return this;
+ };
+
+ /**
+ * Insert new node after current node to current node’s parent.
+ *
+ * Just alias for `node.parent.insertAfter(node, add)`.
+ *
+ * @param {Node|object|string|Node[]} add - new node
+ *
+ * @return {Node} this node for methods chain.
+ *
+ * @example
+ * decl.after('color: black');
+ */
+
+
+ Node.prototype.after = function after(add) {
+ this.parent.insertAfter(this, add);
+ return this;
+ };
+
+ Node.prototype.toJSON = function toJSON() {
+ var fixed = {};
+
+ for (var name in this) {
+ if (!this.hasOwnProperty(name)) continue;
+ if (name === 'parent') continue;
+ var value = this[name];
+
+ if (value instanceof Array) {
+ fixed[name] = value.map(function (i) {
+ if ((typeof i === 'undefined' ? 'undefined' : _typeof(i)) === 'object' && i.toJSON) {
+ return i.toJSON();
+ } else {
+ return i;
+ }
+ });
+ } else if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && value.toJSON) {
+ fixed[name] = value.toJSON();
+ } else {
+ fixed[name] = value;
+ }
+ }
+
+ return fixed;
+ };
+
+ /**
+ * Returns a {@link Node#raws} value. If the node is missing
+ * the code style property (because the node was manually built or cloned),
+ * PostCSS will try to autodetect the code style property by looking
+ * at other nodes in the tree.
+ *
+ * @param {string} prop - name of code style property
+ * @param {string} [defaultType] - name of default value, it can be missed
+ * if the value is the same as prop
+ *
+ * @example
+ * const root = postcss.parse('a { background: white }');
+ * root.nodes[0].append({ prop: 'color', value: 'black' });
+ * root.nodes[0].nodes[1].raws.before //=> undefined
+ * root.nodes[0].nodes[1].raw('before') //=> ' '
+ *
+ * @return {string} code style value
+ */
+
+
+ Node.prototype.raw = function raw(prop, defaultType) {
+ var str = new _stringifier2.default();
+ return str.raw(this, prop, defaultType);
+ };
+
+ /**
+ * Finds the Root instance of the node’s tree.
+ *
+ * @example
+ * root.nodes[0].nodes[0].root() === root
+ *
+ * @return {Root} root parent
+ */
+
+
+ Node.prototype.root = function root() {
+ var result = this;
+ while (result.parent) {
+ result = result.parent;
+ }return result;
+ };
+
+ Node.prototype.cleanRaws = function cleanRaws(keepBetween) {
+ delete this.raws.before;
+ delete this.raws.after;
+ if (!keepBetween) delete this.raws.between;
+ };
+
+ Node.prototype.positionInside = function positionInside(index) {
+ var string = this.toString();
+ var column = this.source.start.column;
+ var line = this.source.start.line;
+
+ for (var i = 0; i < index; i++) {
+ if (string[i] === '\n') {
+ column = 1;
+ line += 1;
+ } else {
+ column += 1;
+ }
+ }
+
+ return { line: line, column: column };
+ };
+
+ Node.prototype.positionBy = function positionBy(opts) {
+ var pos = this.source.start;
+ if (opts.index) {
+ pos = this.positionInside(opts.index);
+ } else if (opts.word) {
+ var index = this.toString().indexOf(opts.word);
+ if (index !== -1) pos = this.positionInside(index);
+ }
+ return pos;
+ };
+
+ /**
+ * @memberof Node#
+ * @member {string} type - String representing the node’s type.
+ * Possible values are `root`, `atrule`, `rule`,
+ * `decl`, or `comment`.
+ *
+ * @example
+ * postcss.decl({ prop: 'color', value: 'black' }).type //=> 'decl'
+ */
+
+ /**
+ * @memberof Node#
+ * @member {Container} parent - the node’s parent node.
+ *
+ * @example
+ * root.nodes[0].parent == root;
+ */
+
+ /**
+ * @memberof Node#
+ * @member {source} source - the input source of the node
+ *
+ * The property is used in source map generation.
+ *
+ * If you create a node manually (e.g., with `postcss.decl()`),
+ * that node will not have a `source` property and will be absent
+ * from the source map. For this reason, the plugin developer should
+ * consider cloning nodes to create new ones (in which case the new node’s
+ * source will reference the original, cloned node) or setting
+ * the `source` property manually.
+ *
+ * ```js
+ * // Bad
+ * const prefixed = postcss.decl({
+ * prop: '-moz-' + decl.prop,
+ * value: decl.value
+ * });
+ *
+ * // Good
+ * const prefixed = decl.clone({ prop: '-moz-' + decl.prop });
+ * ```
+ *
+ * ```js
+ * if ( atrule.name == 'add-link' ) {
+ * const rule = postcss.rule({ selector: 'a', source: atrule.source });
+ * atrule.parent.insertBefore(atrule, rule);
+ * }
+ * ```
+ *
+ * @example
+ * decl.source.input.from //=> '/home/ai/a.sass'
+ * decl.source.start //=> { line: 10, column: 2 }
+ * decl.source.end //=> { line: 10, column: 12 }
+ */
+
+ /**
+ * @memberof Node#
+ * @member {object} raws - Information to generate byte-to-byte equal
+ * node string as it was in the origin input.
+ *
+ * Every parser saves its own properties,
+ * but the default CSS parser uses:
+ *
+ * * `before`: the space symbols before the node. It also stores `*`
+ * and `_` symbols before the declaration (IE hack).
+ * * `after`: the space symbols after the last child of the node
+ * to the end of the node.
+ * * `between`: the symbols between the property and value
+ * for declarations, selector and `{` for rules, or last parameter
+ * and `{` for at-rules.
+ * * `semicolon`: contains true if the last child has
+ * an (optional) semicolon.
+ * * `afterName`: the space between the at-rule name and its parameters.
+ * * `left`: the space symbols between `/*` and the comment’s text.
+ * * `right`: the space symbols between the comment’s text
+ * and <code>*&#47;</code>.
+ * * `important`: the content of the important statement,
+ * if it is not just `!important`.
+ *
+ * PostCSS cleans selectors, declaration values and at-rule parameters
+ * from comments and extra spaces, but it stores origin content in raws
+ * properties. As such, if you don’t change a declaration’s value,
+ * PostCSS will use the raw value with comments.
+ *
+ * @example
+ * const root = postcss.parse('a {\n color:black\n}')
+ * root.first.first.raws //=> { before: '\n ', between: ':' }
+ */
+
+ return Node;
+}();
+
+exports.default = Node;
+
+/**
+ * @typedef {object} position
+ * @property {number} line - source line in file
+ * @property {number} column - source column in file
+ */
+
+/**
+ * @typedef {object} source
+ * @property {Input} input - {@link Input} with input file
+ * @property {position} start - The starting position of the node’s source
+ * @property {position} end - The ending position of the node’s source
+ */
+
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIm5vZGUuZXM2Il0sIm5hbWVzIjpbImNsb25lTm9kZSIsIm9iaiIsInBhcmVudCIsImNsb25lZCIsImNvbnN0cnVjdG9yIiwiaSIsImhhc093blByb3BlcnR5IiwidmFsdWUiLCJ0eXBlIiwiQXJyYXkiLCJtYXAiLCJqIiwiTm9kZSIsImRlZmF1bHRzIiwicmF3cyIsIkVycm9yIiwiSlNPTiIsInN0cmluZ2lmeSIsIm5hbWUiLCJlcnJvciIsIm1lc3NhZ2UiLCJvcHRzIiwic291cmNlIiwicG9zIiwicG9zaXRpb25CeSIsImlucHV0IiwibGluZSIsImNvbHVtbiIsIkNzc1N5bnRheEVycm9yIiwid2FybiIsInJlc3VsdCIsInRleHQiLCJkYXRhIiwibm9kZSIsInJlbW92ZSIsInJlbW92ZUNoaWxkIiwidW5kZWZpbmVkIiwidG9TdHJpbmciLCJzdHJpbmdpZmllciIsImNsb25lIiwib3ZlcnJpZGVzIiwiY2xvbmVCZWZvcmUiLCJpbnNlcnRCZWZvcmUiLCJjbG9uZUFmdGVyIiwiaW5zZXJ0QWZ0ZXIiLCJyZXBsYWNlV2l0aCIsIm5vZGVzIiwibW92ZVRvIiwibmV3UGFyZW50IiwiY2xlYW5SYXdzIiwicm9vdCIsImFwcGVuZCIsIm1vdmVCZWZvcmUiLCJvdGhlck5vZGUiLCJtb3ZlQWZ0ZXIiLCJuZXh0IiwiaW5kZXgiLCJwcmV2IiwiYmVmb3JlIiwiYWRkIiwiYWZ0ZXIiLCJ0b0pTT04iLCJmaXhlZCIsInJhdyIsInByb3AiLCJkZWZhdWx0VHlwZSIsInN0ciIsIlN0cmluZ2lmaWVyIiwia2VlcEJldHdlZW4iLCJiZXR3ZWVuIiwicG9zaXRpb25JbnNpZGUiLCJzdHJpbmciLCJzdGFydCIsIndvcmQiLCJpbmRleE9mIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7Ozs7QUFFQSxJQUFJQSxZQUFZLFNBQVpBLFNBQVksQ0FBVUMsR0FBVixFQUFlQyxNQUFmLEVBQXVCO0FBQ25DLFFBQUlDLFNBQVMsSUFBSUYs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LElBQW5CLEVBQTBCO0FBQ3RCc0IseUJBQVMsQ0FBVDtBQUNBRCx3QkFBUyxDQUFUO0FBQ0gsYUFIRCxNQUdPO0FBQ0hDLDBCQUFVLENBQVY7QUFDSDtBQUNKOztBQUVELGVBQU8sRUFBRUQsVUFBRixFQUFRQyxjQUFSLEVBQVA7QUFDSCxLOzttQkFFREgsVSx1QkFBV0gsSSxFQUFNO0FBQ2IsWUFBSUUsTUFBTSxLQUFLRCxNQUFMLENBQVlrRCxLQUF0QjtBQUNBLFlBQUtuRCxLQUFLbUMsS0FBVixFQUFrQjtBQUNkakMsa0JBQU0sS0FBSytDLGNBQUwsQ0FBb0JqRCxLQUFLbUMsS0FBekIsQ0FBTjtBQUNILFNBRkQsTUFFTyxJQUFLbkMsS0FBS29ELElBQVYsRUFBaUI7QUFDcEIsZ0JBQUlqQixRQUFRLEtBQUtuQixRQUFMLEdBQWdCcUMsT0FBaEIsQ0FBd0JyRCxLQUFLb0QsSUFBN0IsQ0FBWjtBQUNBLGdCQUFLakIsVUFBVSxDQUFDLENBQWhCLEVBQW9CakMsTUFBTSxLQUFLK0MsY0FBTCxDQUFvQmQsS0FBcEIsQ0FBTjtBQUN2QjtBQUNELGVBQU9qQyxHQUFQO0FBQ0gsSzs7QUFFRDs7Ozs7Ozs7OztBQVVBOzs7Ozs7OztBQVFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBcUNBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2tCQW9DV1gsSTs7QUFFZjs7Ozs7O0FBTUEiLCJmaWxlIjoibm9kZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBDc3NTeW50YXhFcnJvciBmcm9tICcuL2Nzcy1zeW50YXgtZXJyb3InO1xuaW1wb3J0IFN0cmluZ2lmaWVyICAgIGZyb20gJy4vc3RyaW5naWZpZXInO1xuaW1wb3J0IHN0cmluZ2lmeSAgICAgIGZyb20gJy4vc3RyaW5naWZ5JztcbmltcG9ydCB3YXJuT25jZSAgICAgICBmcm9tICcuL3dhcm4tb25jZSc7XG5cbmxldCBjbG9uZU5vZGUgPSBmdW5jdGlvbiAob2JqLCBwYXJlbnQpIHtcbiAgICBsZXQgY2xvbmVkID0gbmV3IG9iai5jb25zdHJ1Y3RvcigpO1xuXG4gICAgZm9yICggbGV0IGkgaW4gb2JqICkge1xuICAgICAgICBpZiAoICFvYmouaGFzT3duUHJvcGVydHkoaSkgKSBjb250aW51ZTtcbiAgICAgICAgbGV0IHZhbHVlID0gb2JqW2ldO1xuICAgICAgICBsZXQgdHlwZSAgPSB0eXBlb2YgdmFsdWU7XG5cbiAgICAgICAgaWYgKCBpID09PSAncGFyZW50JyAmJiB0eXBlID09PSAnb2JqZWN0JyApIHtcbiAgICAgICAgICAgIGlmIChwYXJlbnQpIGNsb25lZFtpXSA9IHBhcmVudDtcbiAgICAgICAgfSBlbHNlIGlmICggaSA9PT0gJ3NvdXJjZScgKSB7XG4gICAgICAgICAgICBjbG9uZWRbaV0gPSB2YWx1ZTtcbiAgICAgICAgfSBlbHNlIGlmICggdmFsdWUgaW5zdGFuY2VvZiBBcnJheSApIHtcbiAgICAgICAgICAgIGNsb25lZFtpXSA9IHZhbHVlLm1hcCggaiA9PiBjbG9uZU5vZGUoaiwgY2xvbmVkKSApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCB0eXBlID09PSAnb2JqZWN0JyAmJiB2YWx1ZSAhPT0gbnVsbCApIHZhbHVlID0gY2xvbmVOb2RlKHZhbHVlKTtcbiAgICAgICAgICAgIGNsb25lZFtpXSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsb25lZDtcbn07XG5cbi8qKlxuICogQWxsIG5vZGUgY2xhc3NlcyBpbmhlcml0IHRoZSBmb2xsb3dpbmcgY29tbW9uIG1ldGhvZHMuXG4gKlxuICogQGFic3RyYWN0XG4gKi9cbmNsYXNzIE5vZGUge1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtvYmplY3R9IFtkZWZhdWx0c10gLSB2YWx1ZSBmb3Igbm9kZSBwcm9wZXJ0aWVzXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZGVmYXVsdHMgPSB7IH0pIHtcbiAgICAgICAgdGhpcy5yYXdzID0geyB9O1xuICAgICAgICBpZiAoIHR5cGVvZiBkZWZhdWx0cyAhPT0gJ29iamVjdCcgJiYgdHlwZW9mIGRlZmF1bHRzICE9PSAndW5kZWZpbmVkJyApIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnUG9zdENTUyBub2RlcyBjb25zdHJ1Y3RvciBhY2NlcHRzIG9iamVjdCwgbm90ICcgK1xuICAgICAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGRlZmF1bHRzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yICggbGV0IG5hbWUgaW4gZGVmYXVsdHMgKSB7XG4gICAgICAgICAgICB0aGlzW25hbWVdID0gZGVmYXVsdHNbbmFtZV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQ3NzU3ludGF4RXJyb3IgaW5zdGFuY2UgY29udGFpbmluZyB0aGUgb3JpZ2luYWwgcG9zaXRpb25cbiAgICAgKiBvZiB0aGUgbm9kZSBpbiB0aGUgc291cmNlLCBzaG93aW5nIGxpbmUgYW5kIGNvbHVtbiBudW1iZXJzIGFuZCBhbHNvXG4gICAgICogYSBzbWFsbCBleGNlcnB0IHRvIGZhY2lsaXRhdGUgZGVidWdnaW5nLlxuICAgICAqXG4gICAgICogSWYgcHJlc2VudCwgYW4gaW5wdXQgc291cmNlIG1hcCB3aWxsIGJlIHVzZWQgdG8gZ2V0IHRoZSBvcmlnaW5hbCBwb3NpdGlvblxuICAgICAqIG9mIHRoZSBzb3VyY2UsIGV2ZW4gZnJvbSBhIHByZXZpb3VzIGNvbXBpbGF0aW9uIHN0ZXBcbiAgICAgKiAoZS5nLiwgZnJvbSBTYXNzIGNvbXBpbGF0aW9uKS5cbiAgICAgKlxuICAgICAqIFRoaXMgbWV0aG9kIHByb2R1Y2VzIHZlcnkgdXNlZnVsIGVycm9yIG1lc3NhZ2VzLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgICAgIC0gZXJyb3IgZGVzY3JpcHRpb25cbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW29wdHNdICAgICAgLSBvcHRpb25zXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMucGx1Z2luIC0gcGx1Z2luIG5hbWUgdGhhdCBjcmVhdGVkIHRoaXMgZXJyb3IuXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zdENTUyB3aWxsIHNldCBpdCBhdXRvbWF0aWNhbGx5LlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLndvcmQgICAtIGEgd29yZCBpbnNpZGUgYSBub2Rl4oCZcyBzdHJpbmcgdGhhdCBzaG91bGRcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSBoaWdobGlnaHRlZCBhcyB0aGUgc291cmNlIG9mIHRoZSBlcnJvclxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLmluZGV4ICAtIGFuIGluZGV4IGluc2lkZSBhIG5vZGXigJlzIHN0cmluZyB0aGF0IHNob3VsZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGhpZ2hsaWdodGVkIGFzIHRoZSBzb3VyY2Ugb2YgdGhlIGVycm9yXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtDc3NTeW50YXhFcnJvcn0gZXJyb3Igb2JqZWN0IHRvIHRocm93IGl0XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGlmICggIXZhcmlhYmxlc1tuYW1lXSApIHtcbiAgICAgKiAgIHRocm93IGRlY2wuZXJyb3IoJ1Vua25vd24gdmFyaWFibGUgJyArIG5hbWUsIHsgd29yZDogbmFtZSB9KTtcbiAgICAgKiAgIC8vIENzc1N5bnRheEVycm9yOiBwb3N0Y3NzLXZhcnM6YS5zYXNzOjQ6MzogVW5rbm93biB2YXJpYWJsZSAkYmxhY2tcbiAgICAgKiAgIC8vICAgY29sb3I6ICRibGFja1xuICAgICAqICAgLy8gYVxuICAgICAqICAgLy8gICAgICAgICAgXlxuICAgICAqICAgLy8gICBiYWNrZ3JvdW5kOiB3aGl0ZVxuICAgICAqIH1cbiAgICAgKi9cbiAgICBlcnJvcihtZXNzYWdlLCBvcHRzID0geyB9KSB7XG4gICAgICAgIGlmICggdGhpcy5zb3VyY2UgKSB7XG4gICAgICAgICAgICBsZXQgcG9zID0gdGhpcy5wb3NpdGlvbkJ5KG9wdHMpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc291cmNlLmlucHV0LmVycm9yKG1lc3NhZ2UsIHBvcy5saW5lLCBwb3MuY29sdW1uLCBvcHRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgQ3NzU3ludGF4RXJyb3IobWVzc2FnZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIG1ldGhvZCBpcyBwcm92aWRlZCBhcyBhIGNvbnZlbmllbmNlIHdyYXBwZXIgZm9yIHtAbGluayBSZXN1bHQjd2Fybn0uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1Jlc3VsdH0gcmVzdWx0ICAgICAgLSB0aGUge0BsaW5rIFJlc3VsdH0gaW5zdGFuY2VcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHdpbGwgcmVjZWl2ZSB0aGUgd2FybmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSB0ZXh0ICAgICAgICAtIHdhcm5pbmcgbWVzc2FnZVxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0c10gICAgICAtIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5wbHVnaW4gLSBwbHVnaW4gbmFtZSB0aGF0IGNyZWF0ZWQgdGhpcyB3YXJuaW5nLlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvc3RDU1Mgd2lsbCBzZXQgaXQgYXV0b21hdGljYWxseS5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gb3B0cy53b3JkICAgLSBhIHdvcmQgaW5zaWRlIGEgbm9kZeKAmXMgc3RyaW5nIHRoYXQgc2hvdWxkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgaGlnaGxpZ2h0ZWQgYXMgdGhlIHNvdXJjZSBvZiB0aGUgd2FybmluZ1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLmluZGV4ICAtIGFuIGluZGV4IGluc2lkZSBhIG5vZGXigJlzIHN0cmluZyB0aGF0IHNob3VsZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGhpZ2hsaWdodGVkIGFzIHRoZSBzb3VyY2Ugb2YgdGhlIHdhcm5pbmdcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dhcm5pbmd9IGNyZWF0ZWQgd2FybmluZyBvYmplY3RcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc3QgcGx1Z2luID0gcG9zdGNzcy5wbHVnaW4oJ3Bvc3Rjc3MtZGVwcmVjYXRlZCcsICgpID0+IHtcbiAgICAgKiAgIHJldHVybiAocm9vdCwgcmVzdWx0KSA9PiB7XG4gICAgICogICAgIHJvb3Qud2Fsa0RlY2xzKCdiYWQnLCBkZWNsID0+IHtcbiAgICAgKiAgICAgICBkZWNsLndhcm4ocmVzdWx0LCAnRGVwcmVjYXRlZCBwcm9wZXJ0eSBiYWQnKTtcbiAgICAgKiAgICAgfSk7XG4gICAgICogICB9O1xuICAgICAqIH0pO1xuICAgICAqL1xuICAgIHdhcm4ocmVzdWx0LCB0ZXh0LCBvcHRzKSB7XG4gICAgICAgIGxldCBkYXRhID0geyBub2RlOiB0aGlzIH07XG4gICAgICAgIGZvciAoIGxldCBpIGluIG9wdHMgKSBkYXRhW2ldID0gb3B0c1tpXTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdC53YXJuKHRleHQsIGRhdGEpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlbW92ZXMgdGhlIG5vZGUgZnJvbSBpdHMgcGFyZW50IGFuZCBjbGVhbnMgdGhlIHBhcmVudCBwcm9wZXJ0aWVzXG4gICAgICogZnJvbSB0aGUgbm9kZSBhbmQgaXRzIGNoaWxkcmVuLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBpZiAoIGRlY2wucHJvcC5tYXRjaCgvXi13ZWJraXQtLykgKSB7XG4gICAgICogICBkZWNsLnJlbW92ZSgpO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge05vZGV9IG5vZGUgdG8gbWFrZSBjYWxscyBjaGFpblxuICAgICAqL1xuICAgIHJlbW92ZSgpIHtcbiAgICAgICAgaWYgKCB0aGlzLnBhcmVudCApIHtcbiAgICAgICAgICAgIHRoaXMucGFyZW50LnJlbW92ZUNoaWxkKHRoaXMpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucGFyZW50ID0gdW5kZWZpbmVkO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgQ1NTIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIG5vZGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ2lmaWVyfHN5bnRheH0gW3N0cmluZ2lmaWVyXSAtIGEgc3ludGF4IHRvIHVzZVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW4gc3RyaW5nIGdlbmVyYXRpb25cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gQ1NTIHN0cmluZyBvZiB0aGlzIG5vZGVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogcG9zdGNzcy5ydWxlKHsgc2VsZWN0b3I6ICdhJyB9KS50b1N0cmluZygpIC8vPT4gXCJhIHt9XCJcbiAgICAgKi9cbiAgICB0b1N0cmluZyhzdHJpbmdpZmllciA9IHN0cmluZ2lmeSkge1xuICAgICAgICBpZiAoIHN0cmluZ2lmaWVyLnN0cmluZ2lmeSApIHN0cmluZ2lmaWVyID0gc3RyaW5naWZpZXIuc3RyaW5naWZ5O1xuICAgICAgICBsZXQgcmVzdWx0ICA9ICcnO1xuICAgICAgICBzdHJpbmdpZmllcih0aGlzLCBpID0+IHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgY2xvbmUgb2YgdGhlIG5vZGUuXG4gICAgICpcbiAgICAgKiBUaGUgcmVzdWx0aW5nIGNsb25lZCBub2RlIGFuZCBpdHMgKGNsb25lZCkgY2hpbGRyZW4gd2lsbCBoYXZlXG4gICAgICogYSBjbGVhbiBwYXJlbnQgYW5kIGNvZGUgc3R5bGUgcHJvcGVydGllcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbb3ZlcnJpZGVzXSAtIG5ldyBwcm9wZXJ0aWVzIHRvIG92ZXJyaWRlIGluIHRoZSBjbG9uZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc3QgY2xvbmVkID0gZGVjbC5jbG9uZSh7IHByb3A6ICctbW96LScgKyBkZWNsLnByb3AgfSk7XG4gICAgICogY2xvbmVkLnJhd3MuYmVmb3JlICAvLz0+IHVuZGVmaW5lZFxuICAgICAqIGNsb25lZC5wYXJlbnQgICAgICAgLy89PiB1bmRlZmluZWRcbiAgICAgKiBjbG9uZWQudG9TdHJpbmcoKSAgIC8vPT4gLW1vei10cmFuc2Zvcm06IHNjYWxlKDApXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtOb2RlfSBjbG9uZSBvZiB0aGUgbm9kZVxuICAgICAqL1xuICAgIGNsb25lKG92ZXJyaWRlcyA9IHsgfSkge1xuICAgICAgICBsZXQgY2xvbmVkID0gY2xvbmVOb2RlKHRoaXMpO1xuICAgICAgICBmb3IgKCBsZXQgbmFtZSBpbiBvdmVycmlkZXMgKSB7XG4gICAgICAgICAgICBjbG9uZWRbbmFtZV0gPSBvdmVycmlkZXNbbmFtZV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNsb25lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTaG9ydGN1dCB0byBjbG9uZSB0aGUgbm9kZSBhbmQgaW5zZXJ0IHRoZSByZXN1bHRpbmcgY2xvbmVkIG5vZGVcbiAgICAgKiBiZWZvcmUgdGhlIGN1cnJlbnQgbm9kZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7b2JqZWN0fSBbb3ZlcnJpZGVzXSAtIG5ldyBwcm9wZXJ0aWVzIHRvIG92ZXJyaWRlIGluIHRoZSBjbG9uZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogZGVjbC5jbG9uZUJlZm9yZSh7IHByb3A6ICctbW96LScgKyBkZWNsLnByb3AgfSk7XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtOb2RlfSAtIG5ldyBub2RlXG4gICAgICovXG4gICAgY2xvbmVCZWZvcmUob3ZlcnJpZGVzID0geyB9KSB7XG4gICAgICAgIGxldCBjbG9uZWQgPSB0aGlzLmNsb25lKG92ZXJyaWRlcyk7XG4gICAgICAgIHRoaXMucGFyZW50Lmluc2VydEJlZm9yZSh0aGlzLCBjbG9uZWQpO1xuICAgICAgICByZXR1cm4gY2xvbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFNob3J0Y3V0IHRvIGNsb25lIHRoZSBub2RlIGFuZCBpbnNlcnQgdGhlIHJlc3VsdGluZyBjbG9uZWQgbm9kZVxuICAgICAqIGFmdGVyIHRoZSBjdXJyZW50IG5vZGUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge29iamVjdH0gW292ZXJyaWRlc10gLSBuZXcgcHJvcGVydGllcyB0byBvdmVycmlkZSBpbiB0aGUgY2xvbmUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtOb2RlfSAtIG5ldyBub2RlXG4gICAgICovXG4gICAgY2xvbmVBZnRlcihvdmVycmlkZXMgPSB7IH0pIHtcbiAgICAgICAgbGV0IGNsb25lZCA9IHRoaXMuY2xvbmUob3ZlcnJpZGVzKTtcbiAgICAgICAgdGhpcy5wYXJlbnQuaW5zZXJ0QWZ0ZXIodGhpcywgY2xvbmVkKTtcbiAgICAgICAgcmV0dXJuIGNsb25lZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJbnNlcnRzIG5vZGUocykgYmVmb3JlIHRoZSBjdXJyZW50IG5vZGUgYW5kIHJlbW92ZXMgdGhlIGN1cnJlbnQgbm9kZS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7Li4uTm9kZX0gbm9kZXMgLSBub2RlKHMpIHRvIHJlcGxhY2UgY3VycmVudCBvbmVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogaWYgKCBhdHJ1bGUubmFtZSA9PSAnbWl4aW4nICkge1xuICAgICAqICAgYXRydWxlLnJlcGxhY2VXaXRoKG1peGluUnVsZXNbYXRydWxlLnBhcmFtc10pO1xuICAgICAqIH1cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge05vZGV9IGN1cnJlbnQgbm9kZSB0byBtZXRob2RzIGNoYWluXG4gICAgICovXG4gICAgcmVwbGFjZVdpdGgoLi4ubm9kZXMpIHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBub2RlIG9mIG5vZGVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnQuaW5zZXJ0QmVmb3JlKHRoaXMsIG5vZGUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnJlbW92ZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgbW92ZVRvKG5ld1BhcmVudCkge1xuICAgICAgICB3YXJuT25jZSgnTm9kZSNtb3ZlVG8gd2FzIGRlcHJlY2F0ZWQuIFVzZSBDb250YWluZXIjYXBwZW5kLicpO1xuICAgICAgICB0aGlzLmNsZWFuUmF3cyh0aGlzLnJvb3QoKSA9PT0gbmV3UGFyZW50LnJvb3QoKSk7XG4gICAgICAgIHRoaXMucmVtb3ZlKCk7XG4gICAgICAgIG5ld1BhcmVudC5hcHBlbmQodGhpcyk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIG1vdmVCZWZvcmUob3RoZXJOb2RlKSB7XG4gICAgICAgIHdhcm5PbmNlKCdOb2RlI21vdmVCZWZvcmUgd2FzIGRlcHJlY2F0ZWQuIFVzZSBOb2RlI2JlZm9yZS4nKTtcbiAgICAgICAgdGhpcy5jbGVhblJhd3ModGhpcy5yb290KCkgPT09IG90aGVyTm9kZS5yb290KCkpO1xuICAgICAgICB0aGlzLnJlbW92ZSgpO1xuICAgICAgICBvdGhlck5vZGUucGFyZW50Lmluc2VydEJlZm9yZShvdGhlck5vZGUsIHRoaXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBtb3ZlQWZ0ZXIob3RoZXJOb2RlKSB7XG4gICAgICAgIHdhcm5PbmNlKCdOb2RlI21vdmVBZnRlciB3YXMgZGVwcmVjYXRlZC4gVXNlIE5vZGUjYWZ0ZXIuJyk7XG4gICAgICAgIHRoaXMuY2xlYW5SYXdzKHRoaXMucm9vdCgpID09PSBvdGhlck5vZGUucm9vdCgpKTtcbiAgICAgICAgdGhpcy5yZW1vdmUoKTtcbiAgICAgICAgb3RoZXJOb2RlLnBhcmVudC5pbnNlcnRBZnRlcihvdGhlck5vZGUsIHRoaXMpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIHRoZSBuZXh0IGNoaWxkIG9mIHRoZSBub2Rl4oCZcyBwYXJlbnQuXG4gICAgICogUmV0dXJucyBgdW5kZWZpbmVkYCBpZiB0aGUgY3VycmVudCBub2RlIGlzIHRoZSBsYXN0IGNoaWxkLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Tm9kZXx1bmRlZmluZWR9IG5leHQgbm9kZVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBpZiAoIGNvbW1lbnQudGV4dCA9PT0gJ2RlbGV0ZSBuZXh0JyApIHtcbiAgICAgKiAgIGNvbnN0IG5leHQgPSBjb21tZW50Lm5leHQoKTtcbiAgICAgKiAgIGlmICggbmV4dCApIHtcbiAgICAgKiAgICAgbmV4dC5yZW1vdmUoKTtcbiAgICAgKiAgIH1cbiAgICAgKiB9XG4gICAgICovXG4gICAgbmV4dCgpIHtcbiAgICAgICAgaWYgKCAhdGhpcy5wYXJlbnQgKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLnBhcmVudC5pbmRleCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50Lm5vZGVzW2luZGV4ICsgMV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB0aGUgcHJldmlvdXMgY2hpbGQgb2YgdGhlIG5vZGXigJlzIHBhcmVudC5cbiAgICAgKiBSZXR1cm5zIGB1bmRlZmluZWRgIGlmIHRoZSBjdXJyZW50IG5vZGUgaXMgdGhlIGZpcnN0IGNoaWxkLlxuICAgICAqXG4gICAgICogQHJldHVybiB7Tm9kZXx1bmRlZmluZWR9IHByZXZpb3VzIG5vZGVcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc3QgYW5ub3RhdGlvbiA9IGRlY2wucHJldigpO1xuICAgICAqIGlmICggYW5ub3RhdGlvbi50eXBlID09ICdjb21tZW50JyApIHtcbiAgICAgKiAgcmVhZEFubm90YXRpb24oYW5ub3RhdGlvbi50ZXh0KTtcbiAgICAgKiB9XG4gICAgICovXG4gICAgcHJldigpIHtcbiAgICAgICAgaWYgKCAhdGhpcy5wYXJlbnQgKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICBsZXQgaW5kZXggPSB0aGlzLnBhcmVudC5pbmRleCh0aGlzKTtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50Lm5vZGVzW2luZGV4IC0gMV07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW5zZXJ0IG5ldyBub2RlIGJlZm9yZSBjdXJyZW50IG5vZGUgdG8gY3VycmVudCBub2Rl4oCZcyBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBKdXN0IGFsaWFzIGZvciBgbm9kZS5wYXJlbnQuaW5zZXJ0QmVmb3JlKG5vZGUsIGFkZClgLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtOb2RlfG9iamVjdHxzdHJpbmd8Tm9kZVtdfSBhZGQgLSBuZXcgbm9kZVxuICAgICAqXG4gICAgICogQHJldHVybiB7Tm9kZX0gdGhpcyBub2RlIGZvciBtZXRob2RzIGNoYWluLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBkZWNsLmJlZm9yZSgnY29udGVudDogXCJcIicpO1xuICAgICAqL1xuICAgIGJlZm9yZShhZGQpIHtcbiAgICAgICAgdGhpcy5wYXJlbnQuaW5zZXJ0QmVmb3JlKHRoaXMsIGFkZCk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEluc2VydCBuZXcgbm9kZSBhZnRlciBjdXJyZW50IG5vZGUgdG8gY3VycmVudCBub2Rl4oCZcyBwYXJlbnQuXG4gICAgICpcbiAgICAgKiBKdXN0IGFsaWFzIGZvciBgbm9kZS5wYXJlbnQuaW5zZXJ0QWZ0ZXIobm9kZSwgYWRkKWAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge05vZGV8b2JqZWN0fHN0cmluZ3xOb2RlW119IGFkZCAtIG5ldyBub2RlXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtOb2RlfSB0aGlzIG5vZGUgZm9yIG1ldGhvZHMgY2hhaW4uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIGRlY2wuYWZ0ZXIoJ2NvbG9yOiBibGFjaycpO1xuICAgICAqL1xuICAgIGFmdGVyKGFkZCkge1xuICAgICAgICB0aGlzLnBhcmVudC5pbnNlcnRBZnRlcih0aGlzLCBhZGQpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0b0pTT04oKSB7XG4gICAgICAgIGxldCBmaXhlZCA9IHsgfTtcblxuICAgICAgICBmb3IgKCBsZXQgbmFtZSBpbiB0aGlzICkge1xuICAgICAgICAgICAgaWYgKCAhdGhpcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSApIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKCBuYW1lID09PSAncGFyZW50JyApIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IHZhbHVlID0gdGhpc1tuYW1lXTtcblxuICAgICAgICAgICAgaWYgKCB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5ICkge1xuICAgICAgICAgICAgICAgIGZpeGVkW25hbWVdID0gdmFsdWUubWFwKCBpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgaSA9PT0gJ29iamVjdCcgJiYgaS50b0pTT04gKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaS50b0pTT04oKTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnICYmIHZhbHVlLnRvSlNPTiApIHtcbiAgICAgICAgICAgICAgICBmaXhlZFtuYW1lXSA9IHZhbHVlLnRvSlNPTigpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBmaXhlZFtuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGZpeGVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB7QGxpbmsgTm9kZSNyYXdzfSB2YWx1ZS4gSWYgdGhlIG5vZGUgaXMgbWlzc2luZ1xuICAgICAqIHRoZSBjb2RlIHN0eWxlIHByb3BlcnR5IChiZWNhdXNlIHRoZSBub2RlIHdhcyBtYW51YWxseSBidWlsdCBvciBjbG9uZWQpLFxuICAgICAqIFBvc3RDU1Mgd2lsbCB0cnkgdG8gYXV0b2RldGVjdCB0aGUgY29kZSBzdHlsZSBwcm9wZXJ0eSBieSBsb29raW5nXG4gICAgICogYXQgb3RoZXIgbm9kZXMgaW4gdGhlIHRyZWUuXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gcHJvcCAgICAgICAgICAtIG5hbWUgb2YgY29kZSBzdHlsZSBwcm9wZXJ0eVxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVmYXVsdFR5cGVdIC0gbmFtZSBvZiBkZWZhdWx0IHZhbHVlLCBpdCBjYW4gYmUgbWlzc2VkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0aGUgdmFsdWUgaXMgdGhlIHNhbWUgYXMgcHJvcFxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZSgnYSB7IGJhY2tncm91bmQ6IHdoaXRlIH0nKTtcbiAgICAgKiByb290Lm5vZGVzWzBdLmFwcGVuZCh7IHByb3A6ICdjb2xvcicsIHZhbHVlOiAnYmxhY2snIH0pO1xuICAgICAqIHJvb3Qubm9kZXNbMF0ubm9kZXNbMV0ucmF3cy5iZWZvcmUgICAvLz0+IHVuZGVmaW5lZFxuICAgICAqIHJvb3Qubm9kZXNbMF0ubm9kZXNbMV0ucmF3KCdiZWZvcmUnKSAvLz0+ICcgJ1xuICAgICAqXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBjb2RlIHN0eWxlIHZhbHVlXG4gICAgICovXG4gICAgcmF3KHByb3AsIGRlZmF1bHRUeXBlKSB7XG4gICAgICAgIGxldCBzdHIgPSBuZXcgU3RyaW5naWZpZXIoKTtcbiAgICAgICAgcmV0dXJuIHN0ci5yYXcodGhpcywgcHJvcCwgZGVmYXVsdFR5cGUpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEZpbmRzIHRoZSBSb290IGluc3RhbmNlIG9mIHRoZSBub2Rl4oCZcyB0cmVlLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiByb290Lm5vZGVzWzBdLm5vZGVzWzBdLnJvb3QoKSA9PT0gcm9vdFxuICAgICAqXG4gICAgICogQHJldHVybiB7Um9vdH0gcm9vdCBwYXJlbnRcbiAgICAgKi9cbiAgICByb290KCkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gdGhpcztcbiAgICAgICAgd2hpbGUgKCByZXN1bHQucGFyZW50ICkgcmVzdWx0ID0gcmVzdWx0LnBhcmVudDtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBjbGVhblJhd3Moa2VlcEJldHdlZW4pIHtcbiAgICAgICAgZGVsZXRlIHRoaXMucmF3cy5iZWZvcmU7XG4gICAgICAgIGRlbGV0ZSB0aGlzLnJhd3MuYWZ0ZXI7XG4gICAgICAgIGlmICggIWtlZXBCZXR3ZWVuICkgZGVsZXRlIHRoaXMucmF3cy5iZXR3ZWVuO1xuICAgIH1cblxuICAgIHBvc2l0aW9uSW5zaWRlKGluZGV4KSB7XG4gICAgICAgIGxldCBzdHJpbmcgPSB0aGlzLnRvU3RyaW5nKCk7XG4gICAgICAgIGxldCBjb2x1bW4gPSB0aGlzLnNvdXJjZS5zdGFydC5jb2x1bW47XG4gICAgICAgIGxldCBsaW5lICAgPSB0aGlzLnNvdXJjZS5zdGFydC5saW5lO1xuXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IGluZGV4OyBpKysgKSB7XG4gICAgICAgICAgICBpZiAoIHN0cmluZ1tpXSA9PT0gJ1xcbicgKSB7XG4gICAgICAgICAgICAgICAgY29sdW1uID0gMTtcbiAgICAgICAgICAgICAgICBsaW5lICArPSAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb2x1bW4gKz0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7IGxpbmUsIGNvbHVtbiB9O1xuICAgIH1cblxuICAgIHBvc2l0aW9uQnkob3B0cykge1xuICAgICAgICBsZXQgcG9zID0gdGhpcy5zb3VyY2Uuc3RhcnQ7XG4gICAgICAgIGlmICggb3B0cy5pbmRleCApIHtcbiAgICAgICAgICAgIHBvcyA9IHRoaXMucG9zaXRpb25JbnNpZGUob3B0cy5pbmRleCk7XG4gICAgICAgIH0gZWxzZSBpZiAoIG9wdHMud29yZCApIHtcbiAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMudG9TdHJpbmcoKS5pbmRleE9mKG9wdHMud29yZCk7XG4gICAgICAgICAgICBpZiAoIGluZGV4ICE9PSAtMSApIHBvcyA9IHRoaXMucG9zaXRpb25JbnNpZGUoaW5kZXgpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3M7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIE5vZGUjXG4gICAgICogQG1lbWJlciB7c3RyaW5nfSB0eXBlIC0gU3RyaW5nIHJlcHJlc2VudGluZyB0aGUgbm9kZeKAmXMgdHlwZS5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBQb3NzaWJsZSB2YWx1ZXMgYXJlIGByb290YCwgYGF0cnVsZWAsIGBydWxlYCxcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBgZGVjbGAsIG9yIGBjb21tZW50YC5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogcG9zdGNzcy5kZWNsKHsgcHJvcDogJ2NvbG9yJywgdmFsdWU6ICdibGFjaycgfSkudHlwZSAvLz0+ICdkZWNsJ1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIE5vZGUjXG4gICAgICogQG1lbWJlciB7Q29udGFpbmVyfSBwYXJlbnQgLSB0aGUgbm9kZeKAmXMgcGFyZW50IG5vZGUuXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHJvb3Qubm9kZXNbMF0ucGFyZW50ID09IHJvb3Q7XG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgTm9kZSNcbiAgICAgKiBAbWVtYmVyIHtzb3VyY2V9IHNvdXJjZSAtIHRoZSBpbnB1dCBzb3VyY2Ugb2YgdGhlIG5vZGVcbiAgICAgKlxuICAgICAqIFRoZSBwcm9wZXJ0eSBpcyB1c2VkIGluIHNvdXJjZSBtYXAgZ2VuZXJhdGlvbi5cbiAgICAgKlxuICAgICAqIElmIHlvdSBjcmVhdGUgYSBub2RlIG1hbnVhbGx5IChlLmcuLCB3aXRoIGBwb3N0Y3NzLmRlY2woKWApLFxuICAgICAqIHRoYXQgbm9kZSB3aWxsIG5vdCBoYXZlIGEgYHNvdXJjZWAgcHJvcGVydHkgYW5kIHdpbGwgYmUgYWJzZW50XG4gICAgICogZnJvbSB0aGUgc291cmNlIG1hcC4gRm9yIHRoaXMgcmVhc29uLCB0aGUgcGx1Z2luIGRldmVsb3BlciBzaG91bGRcbiAgICAgKiBjb25zaWRlciBjbG9uaW5nIG5vZGVzIHRvIGNyZWF0ZSBuZXcgb25lcyAoaW4gd2hpY2ggY2FzZSB0aGUgbmV3IG5vZGXigJlzXG4gICAgICogc291cmNlIHdpbGwgcmVmZXJlbmNlIHRoZSBvcmlnaW5hbCwgY2xvbmVkIG5vZGUpIG9yIHNldHRpbmdcbiAgICAgKiB0aGUgYHNvdXJjZWAgcHJvcGVydHkgbWFudWFsbHkuXG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIC8vIEJhZFxuICAgICAqIGNvbnN0IHByZWZpeGVkID0gcG9zdGNzcy5kZWNsKHtcbiAgICAgKiAgIHByb3A6ICctbW96LScgKyBkZWNsLnByb3AsXG4gICAgICogICB2YWx1ZTogZGVjbC52YWx1ZVxuICAgICAqIH0pO1xuICAgICAqXG4gICAgICogLy8gR29vZFxuICAgICAqIGNvbnN0IHByZWZpeGVkID0gZGVjbC5jbG9uZSh7IHByb3A6ICctbW96LScgKyBkZWNsLnByb3AgfSk7XG4gICAgICogYGBgXG4gICAgICpcbiAgICAgKiBgYGBqc1xuICAgICAqIGlmICggYXRydWxlLm5hbWUgPT0gJ2FkZC1saW5rJyApIHtcbiAgICAgKiAgIGNvbnN0IHJ1bGUgPSBwb3N0Y3NzLnJ1bGUoeyBzZWxlY3RvcjogJ2EnLCBzb3VyY2U6IGF0cnVsZS5zb3VyY2UgfSk7XG4gICAgICogICBhdHJ1bGUucGFyZW50Lmluc2VydEJlZm9yZShhdHJ1bGUsIHJ1bGUpO1xuICAgICAqIH1cbiAgICAgKiBgYGBcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogZGVjbC5zb3VyY2UuaW5wdXQuZnJvbSAvLz0+ICcvaG9tZS9haS9hLnNhc3MnXG4gICAgICogZGVjbC5zb3VyY2Uuc3RhcnQgICAgICAvLz0+IHsgbGluZTogMTAsIGNvbHVtbjogMiB9XG4gICAgICogZGVjbC5zb3VyY2UuZW5kICAgICAgICAvLz0+IHsgbGluZTogMTAsIGNvbHVtbjogMTIgfVxuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIE5vZGUjXG4gICAgICogQG1lbWJlciB7b2JqZWN0fSByYXdzIC0gSW5mb3JtYXRpb24gdG8gZ2VuZXJhdGUgYnl0ZS10by1ieXRlIGVxdWFsXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSBzdHJpbmcgYXMgaXQgd2FzIGluIHRoZSBvcmlnaW4gaW5wdXQuXG4gICAgICpcbiAgICAgKiBFdmVyeSBwYXJzZXIgc2F2ZXMgaXRzIG93biBwcm9wZXJ0aWVzLFxuICAgICAqIGJ1dCB0aGUgZGVmYXVsdCBDU1MgcGFyc2VyIHVzZXM6XG4gICAgICpcbiAgICAgKiAqIGBiZWZvcmVgOiB0aGUgc3BhY2Ugc3ltYm9scyBiZWZvcmUgdGhlIG5vZGUuIEl0IGFsc28gc3RvcmVzIGAqYFxuICAgICAqICAgYW5kIGBfYCBzeW1ib2xzIGJlZm9yZSB0aGUgZGVjbGFyYXRpb24gKElFIGhhY2spLlxuICAgICAqICogYGFmdGVyYDogdGhlIHNwYWNlIHN5bWJvbHMgYWZ0ZXIgdGhlIGxhc3QgY2hpbGQgb2YgdGhlIG5vZGVcbiAgICAgKiAgIHRvIHRoZSBlbmQgb2YgdGhlIG5vZGUuXG4gICAgICogKiBgYmV0d2VlbmA6IHRoZSBzeW1ib2xzIGJldHdlZW4gdGhlIHByb3BlcnR5IGFuZCB2YWx1ZVxuICAgICAqICAgZm9yIGRlY2xhcmF0aW9ucywgc2VsZWN0b3IgYW5kIGB7YCBmb3IgcnVsZXMsIG9yIGxhc3QgcGFyYW1ldGVyXG4gICAgICogICBhbmQgYHtgIGZvciBhdC1ydWxlcy5cbiAgICAgKiAqIGBzZW1pY29sb25gOiBjb250YWlucyB0cnVlIGlmIHRoZSBsYXN0IGNoaWxkIGhhc1xuICAgICAqICAgYW4gKG9wdGlvbmFsKSBzZW1pY29sb24uXG4gICAgICogKiBgYWZ0ZXJOYW1lYDogdGhlIHNwYWNlIGJldHdlZW4gdGhlIGF0LXJ1bGUgbmFtZSBhbmQgaXRzIHBhcmFtZXRlcnMuXG4gICAgICogKiBgbGVmdGA6IHRoZSBzcGFjZSBzeW1ib2xzIGJldHdlZW4gYC8qYCBhbmQgdGhlIGNvbW1lbnTigJlzIHRleHQuXG4gICAgICogKiBgcmlnaHRgOiB0aGUgc3BhY2Ugc3ltYm9scyBiZXR3ZWVuIHRoZSBjb21tZW504oCZcyB0ZXh0XG4gICAgICogICBhbmQgPGNvZGU+KiYjNDc7PC9jb2RlPi5cbiAgICAgKiAqIGBpbXBvcnRhbnRgOiB0aGUgY29udGVudCBvZiB0aGUgaW1wb3J0YW50IHN0YXRlbWVudCxcbiAgICAgKiAgIGlmIGl0IGlzIG5vdCBqdXN0IGAhaW1wb3J0YW50YC5cbiAgICAgKlxuICAgICAqIFBvc3RDU1MgY2xlYW5zIHNlbGVjdG9ycywgZGVjbGFyYXRpb24gdmFsdWVzIGFuZCBhdC1ydWxlIHBhcmFtZXRlcnNcbiAgICAgKiBmcm9tIGNvbW1lbnRzIGFuZCBleHRyYSBzcGFjZXMsIGJ1dCBpdCBzdG9yZXMgb3JpZ2luIGNvbnRlbnQgaW4gcmF3c1xuICAgICAqIHByb3BlcnRpZXMuIEFzIHN1Y2gsIGlmIHlvdSBkb27igJl0IGNoYW5nZSBhIGRlY2xhcmF0aW9u4oCZcyB2YWx1ZSxcbiAgICAgKiBQb3N0Q1NTIHdpbGwgdXNlIHRoZSByYXcgdmFsdWUgd2l0aCBjb21tZW50cy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc3Qgcm9vdCA9IHBvc3Rjc3MucGFyc2UoJ2Ege1xcbiAgY29sb3I6YmxhY2tcXG59JylcbiAgICAgKiByb290LmZpcnN0LmZpcnN0LnJhd3MgLy89PiB7IGJlZm9yZTogJ1xcbiAgJywgYmV0d2VlbjogJzonIH1cbiAgICAgKi9cblxufVxuXG5leHBvcnQgZGVmYXVsdCBOb2RlO1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IHBvc2l0aW9uXG4gKiBAcHJvcGVydHkge251bWJlcn0gbGluZSAgIC0gc291cmNlIGxpbmUgaW4gZmlsZVxuICogQHByb3BlcnR5IHtudW1iZXJ9IGNvbHVtbiAtIHNvdXJjZSBjb2x1bW4gaW4gZmlsZVxuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gc291cmNlXG4gKiBAcHJvcGVydHkge0lucHV0fSBpbnB1dCAgICAtIHtAbGluayBJbnB1dH0gd2l0aCBpbnB1dCBmaWxlXG4gKiBAcHJvcGVydHkge3Bvc2l0aW9ufSBzdGFydCAtIFRoZSBzdGFydGluZyBwb3NpdGlvbiBvZiB0aGUgbm9kZeKAmXMgc291cmNlXG4gKiBAcHJvcGVydHkge3Bvc2l0aW9ufSBlbmQgICAtIFRoZSBlbmRpbmcgcG9zaXRpb24gb2YgdGhlIG5vZGXigJlzIHNvdXJjZVxuICovXG4iXX0=
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/parse.js b/node_modules/postcss-reporter/node_modules/postcss/lib/parse.js
new file mode 100644
index 00000000..03b98760
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/parse.js
@@ -0,0 +1,41 @@
+'use strict';
+
+exports.__esModule = true;
+exports.default = parse;
+
+var _parser = require('./parser');
+
+var _parser2 = _interopRequireDefault(_parser);
+
+var _input = require('./input');
+
+var _input2 = _interopRequireDefault(_input);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function parse(css, opts) {
+ if (opts && opts.safe) {
+ throw new Error('Option safe was removed. ' + 'Use parser: require("postcss-safe-parser")');
+ }
+
+ var input = new _input2.default(css, opts);
+ var parser = new _parser2.default(input);
+ try {
+ parser.parse();
+ } catch (e) {
+ if (e.name === 'CssSyntaxError' && opts && opts.from) {
+ if (/\.scss$/i.test(opts.from)) {
+ e.message += '\nYou tried to parse SCSS with ' + 'the standard CSS parser; ' + 'try again with the postcss-scss parser';
+ } else if (/\.sass/i.test(opts.from)) {
+ e.message += '\nYou tried to parse Sass with ' + 'the standard CSS parser; ' + 'try again with the postcss-sass parser';
+ } else if (/\.less$/i.test(opts.from)) {
+ e.message += '\nYou tried to parse Less with ' + 'the standard CSS parser; ' + 'try again with the postcss-less parser';
+ }
+ }
+ throw e;
+ }
+
+ return parser.root;
+}
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhcnNlLmVzNiJdLCJuYW1lcyI6WyJwYXJzZSIsImNzcyIsIm9wdHMiLCJzYWZlIiwiRXJyb3IiLCJpbnB1dCIsIklucHV0IiwicGFyc2VyIiwiUGFyc2VyIiwiZSIsIm5hbWUiLCJmcm9tIiwidGVzdCIsIm1lc3NhZ2UiLCJyb290Il0sIm1hcHBpbmdzIjoiOzs7a0JBR3dCQSxLOztBQUh4Qjs7OztBQUNBOzs7Ozs7QUFFZSxTQUFTQSxLQUFULENBQWVDLEdBQWYsRUFBb0JDLElBQXBCLEVBQTBCO0FBQ3JDLFFBQUtBLFFBQVFBLEtBQUtDLElBQWxCLEVBQXlCO0FBQ3JCLGNBQU0sSUFBSUMsS0FBSixDQUFVLDhCQUNBLDRDQURWLENBQU47QUFFSDs7QUFFRCxRQUFJQyxRQUFRLElBQUlDLGVBQUosQ0FBVUwsR0FBVixFQUFlQyxJQUFmLENBQVo7QUFDQSxRQUFJSyxTQUFTLElBQUlDLGdCQUFKLENBQVdILEtBQVgsQ0FBYjtBQUNBLFFBQUk7QUFDQUUsZUFBT1AsS0FBUDtBQUNILEtBRkQsQ0FFRSxPQUFPUyxDQUFQLEVBQVU7QUFDUixZQUFLQSxFQUFFQyxJQUFGLEtBQVcsZ0JBQVgsSUFBK0JSLElBQS9CLElBQXVDQSxLQUFLUyxJQUFqRCxFQUF3RDtBQUNwRCxnQkFBSyxXQUFXQyxJQUFYLENBQWdCVixLQUFLUyxJQUFyQixDQUFMLEVBQWtDO0FBQzlCRixrQkFBRUksT0FBRixJQUFhLG9DQUNBLDJCQURBLEdBRUEsd0NBRmI7QUFHSCxhQUpELE1BSU8sSUFBSyxVQUFVRCxJQUFWLENBQWVWLEtBQUtTLElBQXBCLENBQUwsRUFBaUM7QUFDcENGLGtCQUFFSSxPQUFGLElBQWEsb0NBQ0EsMkJBREEsR0FFQSx3Q0FGYjtBQUdILGFBSk0sTUFJQSxJQUFLLFdBQVdELElBQVgsQ0FBZ0JWLEtBQUtTLElBQXJCLENBQUwsRUFBa0M7QUFDckNGLGtCQUFFSSxPQUFGLElBQWEsb0NBQ0EsMkJBREEsR0FFQSx3Q0FGYjtBQUdIO0FBQ0o7QUFDRCxjQUFNSixDQUFOO0FBQ0g7O0FBRUQsV0FBT0YsT0FBT08sSUFBZDtBQUNIIiwiZmlsZSI6InBhcnNlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFBhcnNlciBmcm9tICcuL3BhcnNlcic7XG5pbXBvcnQgSW5wdXQgIGZyb20gJy4vaW5wdXQnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYXJzZShjc3MsIG9wdHMpIHtcbiAgICBpZiAoIG9wdHMgJiYgb3B0cy5zYWZlICkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ09wdGlvbiBzYWZlIHdhcyByZW1vdmVkLiAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICdVc2UgcGFyc2VyOiByZXF1aXJlKFwicG9zdGNzcy1zYWZlLXBhcnNlclwiKScpO1xuICAgIH1cblxuICAgIGxldCBpbnB1dCA9IG5ldyBJbnB1dChjc3MsIG9wdHMpO1xuICAgIGxldCBwYXJzZXIgPSBuZXcgUGFyc2VyKGlucHV0KTtcbiAgICB0cnkge1xuICAgICAgICBwYXJzZXIucGFyc2UoKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGlmICggZS5uYW1lID09PSAnQ3NzU3ludGF4RXJyb3InICYmIG9wdHMgJiYgb3B0cy5mcm9tICkge1xuICAgICAgICAgICAgaWYgKCAvXFwuc2NzcyQvaS50ZXN0KG9wdHMuZnJvbSkgKSB7XG4gICAgICAgICAgICAgICAgZS5tZXNzYWdlICs9ICdcXG5Zb3UgdHJpZWQgdG8gcGFyc2UgU0NTUyB3aXRoICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhlIHN0YW5kYXJkIENTUyBwYXJzZXI7ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJ5IGFnYWluIHdpdGggdGhlIHBvc3Rjc3Mtc2NzcyBwYXJzZXInO1xuICAgICAgICAgICAgfSBlbHNlIGlmICggL1xcLnNhc3MvaS50ZXN0KG9wdHMuZnJvbSkgKSB7XG4gICAgICAgICAgICAgICAgZS5tZXNzYWdlICs9ICdcXG5Zb3UgdHJpZWQgdG8gcGFyc2UgU2FzcyB3aXRoICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGhlIHN0YW5kYXJkIENTUyBwYXJzZXI7ICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndHJ5IGFnYWluIHdpdGggdGhlIHBvc3Rjc3Mtc2FzcyBwYXJzZXInO1xuICAgICAgICAgICAgfSBlbHNlIGlmICggL1xcLmxlc3MkL2kudGVzdChvcHRzLmZyb20pICkge1xuICAgICAgICAgICAgICAgIGUubWVzc2FnZSArPSAnXFxuWW91IHRyaWVkIHRvIHBhcnNlIExlc3Mgd2l0aCAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RoZSBzdGFuZGFyZCBDU1MgcGFyc2VyOyAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RyeSBhZ2FpbiB3aXRoIHRoZSBwb3N0Y3NzLWxlc3MgcGFyc2VyJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBlO1xuICAgIH1cblxuICAgIHJldHVybiBwYXJzZXIucm9vdDtcbn1cbiJdfQ==
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/parser.js b/node_modules/postcss-reporter/node_modules/postcss/lib/parser.js
new file mode 100644
index 00000000..d798ef79
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/parser.js
@@ -0,0 +1,552 @@
+'use strict';
+
+exports.__esModule = true;
+
+var _declaration = require('./declaration');
+
+var _declaration2 = _interopRequireDefault(_declaration);
+
+var _tokenize = require('./tokenize');
+
+var _tokenize2 = _interopRequireDefault(_tokenize);
+
+var _comment = require('./comment');
+
+var _comment2 = _interopRequireDefault(_comment);
+
+var _atRule = require('./at-rule');
+
+var _atRule2 = _interopRequireDefault(_atRule);
+
+var _root = require('./root');
+
+var _root2 = _interopRequireDefault(_root);
+
+var _rule = require('./rule');
+
+var _rule2 = _interopRequireDefault(_rule);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var Parser = function () {
+ function Parser(input) {
+ _classCallCheck(this, Parser);
+
+ this.input = input;
+
+ this.root = new _root2.default();
+ this.current = this.root;
+ this.spaces = '';
+ this.semicolon = false;
+
+ this.createTokenizer();
+ this.root.source = { input: input, start: { line: 1, column: 1 } };
+ }
+
+ Parser.prototype.createTokenizer = function createTokenizer() {
+ this.tokenizer = (0, _tokenize2.default)(this.input);
+ };
+
+ Parser.prototype.parse = function parse() {
+ var token = void 0;
+ while (!this.tokenizer.endOfFile()) {
+ token = this.tokenizer.nextToken();
+
+ switch (token[0]) {
+
+ case 'space':
+ this.spaces += token[1];
+ break;
+
+ case ';':
+ this.freeSemicolon(token);
+ break;
+
+ case '}':
+ this.end(token);
+ break;
+
+ case 'comment':
+ this.comment(token);
+ break;
+
+ case 'at-word':
+ this.atrule(token);
+ break;
+
+ case '{':
+ this.emptyRule(token);
+ break;
+
+ default:
+ this.other(token);
+ break;
+ }
+ }
+ this.endFile();
+ };
+
+ Parser.prototype.comment = function comment(token) {
+ var node = new _comment2.default();
+ this.init(node, token[2], token[3]);
+ node.source.end = { line: token[4], column: token[5] };
+
+ var text = token[1].slice(2, -2);
+ if (/^\s*$/.test(text)) {
+ node.text = '';
+ node.raws.left = text;
+ node.raws.right = '';
+ } else {
+ var match = text.match(/^(\s*)([^]*[^\s])(\s*)$/);
+ node.text = match[2];
+ node.raws.left = match[1];
+ node.raws.right = match[3];
+ }
+ };
+
+ Parser.prototype.emptyRule = function emptyRule(token) {
+ var node = new _rule2.default();
+ this.init(node, token[2], token[3]);
+ node.selector = '';
+ node.raws.between = '';
+ this.current = node;
+ };
+
+ Parser.prototype.other = function other(start) {
+ var end = false;
+ var type = null;
+ var colon = false;
+ var bracket = null;
+ var brackets = [];
+
+ var tokens = [];
+ var token = start;
+ while (token) {
+ type = token[0];
+ tokens.push(token);
+
+ if (type === '(' || type === '[') {
+ if (!bracket) bracket = token;
+ brackets.push(type === '(' ? ')' : ']');
+ } else if (brackets.length === 0) {
+ if (type === ';') {
+ if (colon) {
+ this.decl(tokens);
+ return;
+ } else {
+ break;
+ }
+ } else if (type === '{') {
+ this.rule(tokens);
+ return;
+ } else if (type === '}') {
+ this.tokenizer.back(tokens.pop());
+ end = true;
+ break;
+ } else if (type === ':') {
+ colon = true;
+ }
+ } else if (type === brackets[brackets.length - 1]) {
+ brackets.pop();
+ if (brackets.length === 0) bracket = null;
+ }
+
+ token = this.tokenizer.nextToken();
+ }
+
+ if (this.tokenizer.endOfFile()) end = true;
+ if (brackets.length > 0) this.unclosedBracket(bracket);
+
+ if (end && colon) {
+ while (tokens.length) {
+ token = tokens[tokens.length - 1][0];
+ if (token !== 'space' && token !== 'comment') break;
+ this.tokenizer.back(tokens.pop());
+ }
+ this.decl(tokens);
+ return;
+ } else {
+ this.unknownWord(tokens);
+ }
+ };
+
+ Parser.prototype.rule = function rule(tokens) {
+ tokens.pop();
+
+ var node = new _rule2.default();
+ this.init(node, tokens[0][2], tokens[0][3]);
+
+ node.raws.between = this.spacesAndCommentsFromEnd(tokens);
+ this.raw(node, 'selector', tokens);
+ this.current = node;
+ };
+
+ Parser.prototype.decl = function decl(tokens) {
+ var node = new _declaration2.default();
+ this.init(node);
+
+ var last = tokens[tokens.length - 1];
+ if (last[0] === ';') {
+ this.semicolon = true;
+ tokens.pop();
+ }
+ if (last[4]) {
+ node.source.end = { line: last[4], column: last[5] };
+ } else {
+ node.source.end = { line: last[2], column: last[3] };
+ }
+
+ while (tokens[0][0] !== 'word') {
+ if (tokens.length === 1) this.unknownWord(tokens);
+ node.raws.before += tokens.shift()[1];
+ }
+ node.source.start = { line: tokens[0][2], column: tokens[0][3] };
+
+ node.prop = '';
+ while (tokens.length) {
+ var type = tokens[0][0];
+ if (type === ':' || type === 'space' || type === 'comment') {
+ break;
+ }
+ node.prop += tokens.shift()[1];
+ }
+
+ node.raws.between = '';
+
+ var token = void 0;
+ while (tokens.length) {
+ token = tokens.shift();
+
+ if (token[0] === ':') {
+ node.raws.between += token[1];
+ break;
+ } else {
+ node.raws.between += token[1];
+ }
+ }
+
+ if (node.prop[0] === '_' || node.prop[0] === '*') {
+ node.raws.before += node.prop[0];
+ node.prop = node.prop.slice(1);
+ }
+ node.raws.between += this.spacesAndCommentsFromStart(tokens);
+ this.precheckMissedSemicolon(tokens);
+
+ for (var i = tokens.length - 1; i > 0; i--) {
+ token = tokens[i];
+ if (token[1].toLowerCase() === '!important') {
+ node.important = true;
+ var string = this.stringFrom(tokens, i);
+ string = this.spacesFromEnd(tokens) + string;
+ if (string !== ' !important') node.raws.important = string;
+ break;
+ } else if (token[1].toLowerCase() === 'important') {
+ var cache = tokens.slice(0);
+ var str = '';
+ for (var j = i; j > 0; j--) {
+ var _type = cache[j][0];
+ if (str.trim().indexOf('!') === 0 && _type !== 'space') {
+ break;
+ }
+ str = cache.pop()[1] + str;
+ }
+ if (str.trim().indexOf('!') === 0) {
+ node.important = true;
+ node.raws.important = str;
+ tokens = cache;
+ }
+ }
+
+ if (token[0] !== 'space' && token[0] !== 'comment') {
+ break;
+ }
+ }
+
+ this.raw(node, 'value', tokens);
+
+ if (node.value.indexOf(':') !== -1) this.checkMissedSemicolon(tokens);
+ };
+
+ Parser.prototype.atrule = function atrule(token) {
+ var node = new _atRule2.default();
+ node.name = token[1].slice(1);
+ if (node.name === '') {
+ this.unnamedAtrule(node, token);
+ }
+ this.init(node, token[2], token[3]);
+
+ var prev = void 0;
+ var shift = void 0;
+ var last = false;
+ var open = false;
+ var params = [];
+
+ while (!this.tokenizer.endOfFile()) {
+ token = this.tokenizer.nextToken();
+
+ if (token[0] === ';') {
+ node.source.end = { line: token[2], column: token[3] };
+ this.semicolon = true;
+ break;
+ } else if (token[0] === '{') {
+ open = true;
+ break;
+ } else if (token[0] === '}') {
+ if (params.length > 0) {
+ shift = params.length - 1;
+ prev = params[shift];
+ while (prev && prev[0] === 'space') {
+ prev = params[--shift];
+ }
+ if (prev) {
+ node.source.end = { line: prev[4], column: prev[5] };
+ }
+ }
+ this.end(token);
+ break;
+ } else {
+ params.push(token);
+ }
+
+ if (this.tokenizer.endOfFile()) {
+ last = true;
+ break;
+ }
+ }
+
+ node.raws.between = this.spacesAndCommentsFromEnd(params);
+ if (params.length) {
+ node.raws.afterName = this.spacesAndCommentsFromStart(params);
+ this.raw(node, 'params', params);
+ if (last) {
+ token = params[params.length - 1];
+ node.source.end = { line: token[4], column: token[5] };
+ this.spaces = node.raws.between;
+ node.raws.between = '';
+ }
+ } else {
+ node.raws.afterName = '';
+ node.params = '';
+ }
+
+ if (open) {
+ node.nodes = [];
+ this.current = node;
+ }
+ };
+
+ Parser.prototype.end = function end(token) {
+ if (this.current.nodes && this.current.nodes.length) {
+ this.current.raws.semicolon = this.semicolon;
+ }
+ this.semicolon = false;
+
+ this.current.raws.after = (this.current.raws.after || '') + this.spaces;
+ this.spaces = '';
+
+ if (this.current.parent) {
+ this.current.source.end = { line: token[2], column: token[3] };
+ this.current = this.current.parent;
+ } else {
+ this.unexpectedClose(token);
+ }
+ };
+
+ Parser.prototype.endFile = function endFile() {
+ if (this.current.parent) this.unclosedBlock();
+ if (this.current.nodes && this.current.nodes.length) {
+ this.current.raws.semicolon = this.semicolon;
+ }
+ this.current.raws.after = (this.current.raws.after || '') + this.spaces;
+ };
+
+ Parser.prototype.freeSemicolon = function freeSemicolon(token) {
+ this.spaces += token[1];
+ if (this.current.nodes) {
+ var prev = this.current.nodes[this.current.nodes.length - 1];
+ if (prev && prev.type === 'rule' && !prev.raws.ownSemicolon) {
+ prev.raws.ownSemicolon = this.spaces;
+ this.spaces = '';
+ }
+ }
+ };
+
+ // Helpers
+
+ Parser.prototype.init = function init(node, line, column) {
+ this.current.push(node);
+
+ node.source = { start: { line: line, column: column }, input: this.input };
+ node.raws.before = this.spaces;
+ this.spaces = '';
+ if (node.type !== 'comment') this.semicolon = false;
+ };
+
+ Parser.prototype.raw = function raw(node, prop, tokens) {
+ var token = void 0,
+ type = void 0;
+ var length = tokens.length;
+ var value = '';
+ var clean = true;
+ var next = void 0,
+ prev = void 0;
+ var pattern = /^([.|#])?([\w])+/i;
+
+ for (var i = 0; i < length; i += 1) {
+ token = tokens[i];
+ type = token[0];
+
+ if (type === 'comment' && node.type === 'rule') {
+ prev = tokens[i - 1];
+ next = tokens[i + 1];
+
+ if (prev[0] !== 'space' && next[0] !== 'space' && pattern.test(prev[1]) && pattern.test(next[1])) {
+ value += token[1];
+ } else {
+ clean = false;
+ }
+
+ continue;
+ }
+
+ if (type === 'comment' || type === 'space' && i === length - 1) {
+ clean = false;
+ } else {
+ value += token[1];
+ }
+ }
+ if (!clean) {
+ var raw = tokens.reduce(function (all, i) {
+ return all + i[1];
+ }, '');
+ node.raws[prop] = { value: value, raw: raw };
+ }
+ node[prop] = value;
+ };
+
+ Parser.prototype.spacesAndCommentsFromEnd = function spacesAndCommentsFromEnd(tokens) {
+ var lastTokenType = void 0;
+ var spaces = '';
+ while (tokens.length) {
+ lastTokenType = tokens[tokens.length - 1][0];
+ if (lastTokenType !== 'space' && lastTokenType !== 'comment') break;
+ spaces = tokens.pop()[1] + spaces;
+ }
+ return spaces;
+ };
+
+ Parser.prototype.spacesAndCommentsFromStart = function spacesAndCommentsFromStart(tokens) {
+ var next = void 0;
+ var spaces = '';
+ while (tokens.length) {
+ next = tokens[0][0];
+ if (next !== 'space' && next !== 'comment') break;
+ spaces += tokens.shift()[1];
+ }
+ return spaces;
+ };
+
+ Parser.prototype.spacesFromEnd = function spacesFromEnd(tokens) {
+ var lastTokenType = void 0;
+ var spaces = '';
+ while (tokens.length) {
+ lastTokenType = tokens[tokens.length - 1][0];
+ if (lastTokenType !== 'space') break;
+ spaces = tokens.pop()[1] + spaces;
+ }
+ return spaces;
+ };
+
+ Parser.prototype.stringFrom = function stringFrom(tokens, from) {
+ var result = '';
+ for (var i = from; i < tokens.length; i++) {
+ result += tokens[i][1];
+ }
+ tokens.splice(from, tokens.length - from);
+ return result;
+ };
+
+ Parser.prototype.colon = function colon(tokens) {
+ var brackets = 0;
+ var token = void 0,
+ type = void 0,
+ prev = void 0;
+ for (var i = 0; i < tokens.length; i++) {
+ token = tokens[i];
+ type = token[0];
+
+ if (type === '(') {
+ brackets += 1;
+ } else if (type === ')') {
+ brackets -= 1;
+ } else if (brackets === 0 && type === ':') {
+ if (!prev) {
+ this.doubleColon(token);
+ } else if (prev[0] === 'word' && prev[1] === 'progid') {
+ continue;
+ } else {
+ return i;
+ }
+ }
+
+ prev = token;
+ }
+ return false;
+ };
+
+ // Errors
+
+ Parser.prototype.unclosedBracket = function unclosedBracket(bracket) {
+ throw this.input.error('Unclosed bracket', bracket[2], bracket[3]);
+ };
+
+ Parser.prototype.unknownWord = function unknownWord(tokens) {
+ throw this.input.error('Unknown word', tokens[0][2], tokens[0][3]);
+ };
+
+ Parser.prototype.unexpectedClose = function unexpectedClose(token) {
+ throw this.input.error('Unexpected }', token[2], token[3]);
+ };
+
+ Parser.prototype.unclosedBlock = function unclosedBlock() {
+ var pos = this.current.source.start;
+ throw this.input.error('Unclosed block', pos.line, pos.column);
+ };
+
+ Parser.prototype.doubleColon = function doubleColon(token) {
+ throw this.input.error('Double colon', token[2], token[3]);
+ };
+
+ Parser.prototype.unnamedAtrule = function unnamedAtrule(node, token) {
+ throw this.input.error('At-rule without name', token[2], token[3]);
+ };
+
+ Parser.prototype.precheckMissedSemicolon = function precheckMissedSemicolon(tokens) {
+ // Hook for Safe Parser
+ tokens;
+ };
+
+ Parser.prototype.checkMissedSemicolon = function checkMissedSemicolon(tokens) {
+ var colon = this.colon(tokens);
+ if (colon === false) return;
+
+ var founded = 0;
+ var token = void 0;
+ for (var j = colon - 1; j >= 0; j--) {
+ token = tokens[j];
+ if (token[0] !== 'space') {
+ founded += 1;
+ if (founded === 2) break;
+ }
+ }
+ throw this.input.error('Missed semicolon', token[2], token[3]);
+ };
+
+ return Parser;
+}();
+
+exports.default = Parser;
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBhcnNlci5lczYiXSwibmFtZXMiOlsiUGFyc2VyIiwiaW5wdXQiLCJyb290IiwiUm9vdCIsImN1cnJlbnQiLCJzcGFjZXMiLCJzZW1pY29sb24iLCJjcmVhdGVUb2tlbml6ZXIiLCJzb3VyY2UiLCJzdGFydCIsImxpbmUiLCJjb2x1bW4iLCJ0b2tlbml6ZXIiLCJwYXJzZSIsInRva2VuIiwiZW5kT2ZGaWxlIiwibmV4dFRva2VuIiwiZnJlZVNlbWljb2xvbiIsImVuZCIsImNvbW1lbnQiLCJhdHJ1bGUiLCJlbXB0eVJ1bGUiLCJvdGhlciIsImVuZEZpbGUiLCJub2RlIiwiQ29tbWVudCIsImluaXQiLCJ0ZXh0Iiwic2xpY2UiLCJ0ZXN0IiwicmF3cyIsImxlZnQiLCJyaWdodCIsIm1hdGNoIiwiUnVsZSIsInNlbGVjdG9yIiwiYmV0d2VlbiIsInR5cGUiLCJjb2xvbiIsImJyYWNrZXQiLCJicmFja2V0cyIsInRva2VucyIsInB1c2giLCJsZW5ndGgiLCJkZWNsIiwicnVsZSIsImJhY2siLCJwb3AiLCJ1bmNsb3NlZEJyYWNrZXQiLCJ1bmtub3duV29yZCIsInNwYWNlc0FuZENvbW1lbnRzRnJvbUVuZCIsInJhdyIsIkRlY2xhcmF0aW9uIiwibGFzdCIsImJlZm9yZSIsInNoaWZ0IiwicHJvcCIsInNwYWNlc0FuZENvbW1lbnRzRnJvbVN0YXJ0IiwicHJlY2hlY2tNaXNzZWRTZW1pY29sb24iLCJpIiwidG9Mb3dlckNhc2UiLCJpbXBvcnRhbnQiLCJzdHJpbmciLCJzdHJpbmdGcm9tIiwic3BhY2VzRnJvbUVuZCIsImNhY2hlIiwic3RyIiwiaiIsInRyaW0iLCJpbmRleE9mIiwidmFsdWUiLCJjaGVja01pc3NlZFNlbWljb2xvbiIsIkF0UnVsZSIsIm5hbWUiLCJ1bm5hbWVkQXRydWxlIiwicHJldiIsIm9wZW4iLCJwYXJhbXMiLCJhZnRlck5hbWUiLCJub2RlcyIsImFmdGVyIiwicGFyZW50IiwidW5leHBlY3RlZENsb3NlIiwidW5jbG9zZWRCbG9jayIsIm93blNlbWljb2xvbiIsImNsZWFuIiwibmV4dCIsInBhdHRlcm4iLCJyZWR1Y2UiLCJhbGwiLCJsYXN0VG9rZW5UeXBlIiwiZnJvbSIsInJlc3VsdCIsInNwbGljZSIsImRvdWJsZUNvbG9uIiwiZXJyb3IiLCJwb3MiLCJmb3VuZGVkIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7OztJQUVxQkEsTTtBQUVqQixvQkFBWUMsS0FBWixFQUFtQjtBQUFBOztBQUNmLGFBQUtBLEtBQUwsR0FBYUEsS0FBYjs7QUFFQSxhQUFLQyxJQUFMLEdBQWlCLElBQUlDLGNBQUosRUFBakI7QUFDQSxhQUFLQyxPQUFMLEdBQWlCLEtBQUtGLElBQXRCO0FBQ0EsYUFBS0csTUFBTCxHQUFpQixFQUFqQjtBQUNBLGFBQUtDLFNBQUwsR0FBaUIsS0FBakI7O0FBRUEsYUFBS0MsZUFBTDtBQUNBLGFBQUtMLElBQUwsQ0FBVU0sTUFBVixHQUFtQixFQUFFUCxZQUFGLEVBQVNRLE9BQU8sRUFBRUMsTUFBTSxDQUFSLEVBQVdDLFFBQVEsQ0FBbkIsRUFBaEIsRUFBbkI7QUFDSDs7cUJBRURKLGUsOEJBQWtCO0FBQ2QsYUFBS0ssU0FBTCxHQUFpQix3QkFBVSxLQUFLWCxLQUFmLENBQWpCO0FBQ0gsSzs7cUJBRURZLEssb0JBQVE7QUFDSixZQUFJQyxjQUFKO0FBQ0EsZUFBUSxDQUFDLEtBQUtGLFNBQUwsQ0FBZUcsU0FBZixFQUFULEVBQXNDO0FBQ2xDRCxvQkFBUSxLQUFLRixTQUFMLENBQWVJLFNBQWYsRUFBUjs7QUFFQSxvQkFBU0YsTUFBTSxDQUFOLENBQVQ7O0FBRUEscUJBQUssT0FBTDtBQUNJLHlCQUFLVCxNQUFMLElBQWVTLE1BQU0sQ0FBTixDQUFmO0FBQ0E7O0FBRUoscUJBQUssR0FBTDtBQUNJLHlCQUFLRyxhQUFMLENBQW1CSCxLQUFuQjtBQUNBOztBQUVKLHFCQUFLLEdBQUw7QUFDSSx5QkFBS0ksR0FBTCxDQUFTSixLQUFUO0FBQ0E7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QUFqQixFQUFxQ2pGLE1BQU0sQ0FBTixDQUFyQyxFQUErQ0EsTUFBTSxDQUFOLENBQS9DLENBQU47QUFDSCxLOzs7OztrQkFyZ0JnQmQsTSIsImZpbGUiOiJwYXJzZXIuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgRGVjbGFyYXRpb24gZnJvbSAnLi9kZWNsYXJhdGlvbic7XG5pbXBvcnQgdG9rZW5pemVyICAgZnJvbSAnLi90b2tlbml6ZSc7XG5pbXBvcnQgQ29tbWVudCAgICAgZnJvbSAnLi9jb21tZW50JztcbmltcG9ydCBBdFJ1bGUgICAgICBmcm9tICcuL2F0LXJ1bGUnO1xuaW1wb3J0IFJvb3QgICAgICAgIGZyb20gJy4vcm9vdCc7XG5pbXBvcnQgUnVsZSAgICAgICAgZnJvbSAnLi9ydWxlJztcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGFyc2VyIHtcblxuICAgIGNvbnN0cnVjdG9yKGlucHV0KSB7XG4gICAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDtcblxuICAgICAgICB0aGlzLnJvb3QgICAgICA9IG5ldyBSb290KCk7XG4gICAgICAgIHRoaXMuY3VycmVudCAgID0gdGhpcy5yb290O1xuICAgICAgICB0aGlzLnNwYWNlcyAgICA9ICcnO1xuICAgICAgICB0aGlzLnNlbWljb2xvbiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY3JlYXRlVG9rZW5pemVyKCk7XG4gICAgICAgIHRoaXMucm9vdC5zb3VyY2UgPSB7IGlucHV0LCBzdGFydDogeyBsaW5lOiAxLCBjb2x1bW46IDEgfSB9O1xuICAgIH1cblxuICAgIGNyZWF0ZVRva2VuaXplcigpIHtcbiAgICAgICAgdGhpcy50b2tlbml6ZXIgPSB0b2tlbml6ZXIodGhpcy5pbnB1dCk7XG4gICAgfVxuXG4gICAgcGFyc2UoKSB7XG4gICAgICAgIGxldCB0b2tlbjtcbiAgICAgICAgd2hpbGUgKCAhdGhpcy50b2tlbml6ZXIuZW5kT2ZGaWxlKCkgKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRoaXMudG9rZW5pemVyLm5leHRUb2tlbigpO1xuXG4gICAgICAgICAgICBzd2l0Y2ggKCB0b2tlblswXSApIHtcblxuICAgICAgICAgICAgY2FzZSAnc3BhY2UnOlxuICAgICAgICAgICAgICAgIHRoaXMuc3BhY2VzICs9IHRva2VuWzFdO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICc7JzpcbiAgICAgICAgICAgICAgICB0aGlzLmZyZWVTZW1pY29sb24odG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICd9JzpcbiAgICAgICAgICAgICAgICB0aGlzLmVuZCh0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ2NvbW1lbnQnOlxuICAgICAgICAgICAgICAgIHRoaXMuY29tbWVudCh0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ2F0LXdvcmQnOlxuICAgICAgICAgICAgICAgIHRoaXMuYXRydWxlKHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAneyc6XG4gICAgICAgICAgICAgICAgdGhpcy5lbXB0eVJ1bGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMub3RoZXIodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5kRmlsZSgpO1xuICAgIH1cblxuICAgIGNvbW1lbnQodG9rZW4pIHtcbiAgICAgICAgbGV0IG5vZGUgPSBuZXcgQ29tbWVudCgpO1xuICAgICAgICB0aGlzLmluaXQobm9kZSwgdG9rZW5bMl0sIHRva2VuWzNdKTtcbiAgICAgICAgbm9kZS5zb3VyY2UuZW5kID0geyBsaW5lOiB0b2tlbls0XSwgY29sdW1uOiB0b2tlbls1XSB9O1xuXG4gICAgICAgIGxldCB0ZXh0ID0gdG9rZW5bMV0uc2xpY2UoMiwgLTIpO1xuICAgICAgICBpZiAoIC9eXFxzKiQvLnRlc3QodGV4dCkgKSB7XG4gICAgICAgICAgICBub2RlLnRleHQgICAgICAgPSAnJztcbiAgICAgICAgICAgIG5vZGUucmF3cy5sZWZ0ICA9IHRleHQ7XG4gICAgICAgICAgICBub2RlLnJhd3MucmlnaHQgPSAnJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBtYXRjaCA9IHRleHQubWF0Y2goL14oXFxzKikoW15dKlteXFxzXSkoXFxzKikkLyk7XG4gICAgICAgICAgICBub2RlLnRleHQgICAgICAgPSBtYXRjaFsyXTtcbiAgICAgICAgICAgIG5vZGUucmF3cy5sZWZ0ICA9IG1hdGNoWzFdO1xuICAgICAgICAgICAgbm9kZS5yYXdzLnJpZ2h0ID0gbWF0Y2hbM107XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBlbXB0eVJ1bGUodG9rZW4pIHtcbiAgICAgICAgbGV0IG5vZGUgPSBuZXcgUnVsZSgpO1xuICAgICAgICB0aGlzLmluaXQobm9kZSwgdG9rZW5bMl0sIHRva2VuWzNdKTtcbiAgICAgICAgbm9kZS5zZWxlY3RvciA9ICcnO1xuICAgICAgICBub2RlLnJhd3MuYmV0d2VlbiA9ICcnO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBub2RlO1xuICAgIH1cblxuICAgIG90aGVyKHN0YXJ0KSB7XG4gICAgICAgIGxldCBlbmQgICAgICA9IGZhbHNlO1xuICAgICAgICBsZXQgdHlwZSAgICAgPSBudWxsO1xuICAgICAgICBsZXQgY29sb24gICAgPSBmYWxzZTtcbiAgICAgICAgbGV0IGJyYWNrZXQgID0gbnVsbDtcbiAgICAgICAgbGV0IGJyYWNrZXRzID0gW107XG5cbiAgICAgICAgbGV0IHRva2VucyA9IFtdO1xuICAgICAgICBsZXQgdG9rZW4gPSBzdGFydDtcbiAgICAgICAgd2hpbGUgKCB0b2tlbiApIHtcbiAgICAgICAgICAgIHR5cGUgPSB0b2tlblswXTtcbiAgICAgICAgICAgIHRva2Vucy5wdXNoKHRva2VuKTtcblxuICAgICAgICAgICAgaWYgKCB0eXBlID09PSAnKCcgfHwgdHlwZSA9PT0gJ1snICkge1xuICAgICAgICAgICAgICAgIGlmICggIWJyYWNrZXQgKSBicmFja2V0ID0gdG9rZW47XG4gICAgICAgICAgICAgICAgYnJhY2tldHMucHVzaCh0eXBlID09PSAnKCcgPyAnKScgOiAnXScpO1xuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKCBicmFja2V0cy5sZW5ndGggPT09IDAgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCB0eXBlID09PSAnOycgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggY29sb24gKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlY2wodG9rZW5zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlID09PSAneycgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucnVsZSh0b2tlbnMpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlID09PSAnfScgKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMudG9rZW5pemVyLmJhY2sodG9rZW5zLnBvcCgpKTtcbiAgICAgICAgICAgICAgICAgICAgZW5kID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCB0eXBlID09PSAnOicgKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbG9uID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGUgPT09IGJyYWNrZXRzW2JyYWNrZXRzLmxlbmd0aCAtIDFdICkge1xuICAgICAgICAgICAgICAgIGJyYWNrZXRzLnBvcCgpO1xuICAgICAgICAgICAgICAgIGlmICggYnJhY2tldHMubGVuZ3RoID09PSAwICkgYnJhY2tldCA9IG51bGw7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRva2VuID0gdGhpcy50b2tlbml6ZXIubmV4dFRva2VuKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIHRoaXMudG9rZW5pemVyLmVuZE9mRmlsZSgpICkgZW5kID0gdHJ1ZTtcbiAgICAgICAgaWYgKCBicmFja2V0cy5sZW5ndGggPiAwICkgdGhpcy51bmNsb3NlZEJyYWNrZXQoYnJhY2tldCk7XG5cbiAgICAgICAgaWYgKCBlbmQgJiYgY29sb24gKSB7XG4gICAgICAgICAgICB3aGlsZSAoIHRva2Vucy5sZW5ndGggKSB7XG4gICAgICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdWzBdO1xuICAgICAgICAgICAgICAgIGlmICggdG9rZW4gIT09ICdzcGFjZScgJiYgdG9rZW4gIT09ICdjb21tZW50JyApIGJyZWFrO1xuICAgICAgICAgICAgICAgIHRoaXMudG9rZW5pemVyLmJhY2sodG9rZW5zLnBvcCgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGVjbCh0b2tlbnMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy51bmtub3duV29yZCh0b2tlbnMpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcnVsZSh0b2tlbnMpIHtcbiAgICAgICAgdG9rZW5zLnBvcCgpO1xuXG4gICAgICAgIGxldCBub2RlID0gbmV3IFJ1bGUoKTtcbiAgICAgICAgdGhpcy5pbml0KG5vZGUsIHRva2Vuc1swXVsyXSwgdG9rZW5zWzBdWzNdKTtcblxuICAgICAgICBub2RlLnJhd3MuYmV0d2VlbiA9IHRoaXMuc3BhY2VzQW5kQ29tbWVudHNGcm9tRW5kKHRva2Vucyk7XG4gICAgICAgIHRoaXMucmF3KG5vZGUsICdzZWxlY3RvcicsIHRva2Vucyk7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IG5vZGU7XG4gICAgfVxuXG4gICAgZGVjbCh0b2tlbnMpIHtcbiAgICAgICAgbGV0IG5vZGUgPSBuZXcgRGVjbGFyYXRpb24oKTtcbiAgICAgICAgdGhpcy5pbml0KG5vZGUpO1xuXG4gICAgICAgIGxldCBsYXN0ID0gdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXTtcbiAgICAgICAgaWYgKCBsYXN0WzBdID09PSAnOycgKSB7XG4gICAgICAgICAgICB0aGlzLnNlbWljb2xvbiA9IHRydWU7XG4gICAgICAgICAgICB0b2tlbnMucG9wKCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCBsYXN0WzRdICkge1xuICAgICAgICAgICAgbm9kZS5zb3VyY2UuZW5kID0geyBsaW5lOiBsYXN0WzRdLCBjb2x1bW46IGxhc3RbNV0gfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5vZGUuc291cmNlLmVuZCA9IHsgbGluZTogbGFzdFsyXSwgY29sdW1uOiBsYXN0WzNdIH07XG4gICAgICAgIH1cblxuICAgICAgICB3aGlsZSAoIHRva2Vuc1swXVswXSAhPT0gJ3dvcmQnICkge1xuICAgICAgICAgICAgaWYgKCB0b2tlbnMubGVuZ3RoID09PSAxICkgdGhpcy51bmtub3duV29yZCh0b2tlbnMpO1xuICAgICAgICAgICAgbm9kZS5yYXdzLmJlZm9yZSArPSB0b2tlbnMuc2hpZnQoKVsxXTtcbiAgICAgICAgfVxuICAgICAgICBub2RlLnNvdXJjZS5zdGFydCA9IHsgbGluZTogdG9rZW5zWzBdWzJdLCBjb2x1bW46IHRva2Vuc1swXVszXSB9O1xuXG4gICAgICAgIG5vZGUucHJvcCA9ICcnO1xuICAgICAgICB3aGlsZSAoIHRva2Vucy5sZW5ndGggKSB7XG4gICAgICAgICAgICBsZXQgdHlwZSA9IHRva2Vuc1swXVswXTtcbiAgICAgICAgICAgIGlmICggdHlwZSA9PT0gJzonIHx8IHR5cGUgPT09ICdzcGFjZScgfHwgdHlwZSA9PT0gJ2NvbW1lbnQnICkge1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbm9kZS5wcm9wICs9IHRva2Vucy5zaGlmdCgpWzFdO1xuICAgICAgICB9XG5cbiAgICAgICAgbm9kZS5yYXdzLmJldHdlZW4gPSAnJztcblxuICAgICAgICBsZXQgdG9rZW47XG4gICAgICAgIHdoaWxlICggdG9rZW5zLmxlbmd0aCApIHtcbiAgICAgICAgICAgIHRva2VuID0gdG9rZW5zLnNoaWZ0KCk7XG5cbiAgICAgICAgICAgIGlmICggdG9rZW5bMF0gPT09ICc6JyApIHtcbiAgICAgICAgICAgICAgICBub2RlLnJhd3MuYmV0d2VlbiArPSB0b2tlblsxXTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgbm9kZS5yYXdzLmJldHdlZW4gKz0gdG9rZW5bMV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIG5vZGUucHJvcFswXSA9PT0gJ18nIHx8IG5vZGUucHJvcFswXSA9PT0gJyonICkge1xuICAgICAgICAgICAgbm9kZS5yYXdzLmJlZm9yZSArPSBub2RlLnByb3BbMF07XG4gICAgICAgICAgICBub2RlLnByb3AgPSBub2RlLnByb3Auc2xpY2UoMSk7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5yYXdzLmJldHdlZW4gKz0gdGhpcy5zcGFjZXNBbmRDb21tZW50c0Zyb21TdGFydCh0b2tlbnMpO1xuICAgICAgICB0aGlzLnByZWNoZWNrTWlzc2VkU2VtaWNvbG9uKHRva2Vucyk7XG5cbiAgICAgICAgZm9yICggbGV0IGkgPSB0b2tlbnMubGVuZ3RoIC0gMTsgaSA+IDA7IGktLSApIHtcbiAgICAgICAgICAgIHRva2VuID0gdG9rZW5zW2ldO1xuICAgICAgICAgICAgaWYgKCB0b2tlblsxXS50b0xvd2VyQ2FzZSgpID09PSAnIWltcG9ydGFudCcgKSB7XG4gICAgICAgICAgICAgICAgbm9kZS5pbXBvcnRhbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGxldCBzdHJpbmcgPSB0aGlzLnN0cmluZ0Zyb20odG9rZW5zLCBpKTtcbiAgICAgICAgICAgICAgICBzdHJpbmcgPSB0aGlzLnNwYWNlc0Zyb21FbmQodG9rZW5zKSArIHN0cmluZztcbiAgICAgICAgICAgICAgICBpZiAoIHN0cmluZyAhPT0gJyAhaW1wb3J0YW50JyApIG5vZGUucmF3cy5pbXBvcnRhbnQgPSBzdHJpbmc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodG9rZW5bMV0udG9Mb3dlckNhc2UoKSA9PT0gJ2ltcG9ydGFudCcpIHtcbiAgICAgICAgICAgICAgICBsZXQgY2FjaGUgPSB0b2tlbnMuc2xpY2UoMCk7XG4gICAgICAgICAgICAgICAgbGV0IHN0ciAgID0gJyc7XG4gICAgICAgICAgICAgICAgZm9yICggbGV0IGogPSBpOyBqID4gMDsgai0tICkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdHlwZSA9IGNhY2hlW2pdWzBdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIHN0ci50cmltKCkuaW5kZXhPZignIScpID09PSAwICYmIHR5cGUgIT09ICdzcGFjZScgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBjYWNoZS5wb3AoKVsxXSArIHN0cjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCBzdHIudHJpbSgpLmluZGV4T2YoJyEnKSA9PT0gMCApIHtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5pbXBvcnRhbnQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBub2RlLnJhd3MuaW1wb3J0YW50ID0gc3RyO1xuICAgICAgICAgICAgICAgICAgICB0b2tlbnMgPSBjYWNoZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICggdG9rZW5bMF0gIT09ICdzcGFjZScgJiYgdG9rZW5bMF0gIT09ICdjb21tZW50JyApIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMucmF3KG5vZGUsICd2YWx1ZScsIHRva2Vucyk7XG5cbiAgICAgICAgaWYgKCBub2RlLnZhbHVlLmluZGV4T2YoJzonKSAhPT0gLTEgKSB0aGlzLmNoZWNrTWlzc2VkU2VtaWNvbG9uKHRva2Vucyk7XG4gICAgfVxuXG4gICAgYXRydWxlKHRva2VuKSB7XG4gICAgICAgIGxldCBub2RlICA9IG5ldyBBdFJ1bGUoKTtcbiAgICAgICAgbm9kZS5uYW1lID0gdG9rZW5bMV0uc2xpY2UoMSk7XG4gICAgICAgIGlmICggbm9kZS5uYW1lID09PSAnJyApIHtcbiAgICAgICAgICAgIHRoaXMudW5uYW1lZEF0cnVsZShub2RlLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbml0KG5vZGUsIHRva2VuWzJdLCB0b2tlblszXSk7XG5cbiAgICAgICAgbGV0IHByZXY7XG4gICAgICAgIGxldCBzaGlmdDtcbiAgICAgICAgbGV0IGxhc3QgICA9IGZhbHNlO1xuICAgICAgICBsZXQgb3BlbiAgID0gZmFsc2U7XG4gICAgICAgIGxldCBwYXJhbXMgPSBbXTtcblxuICAgICAgICB3aGlsZSAoICF0aGlzLnRva2VuaXplci5lbmRPZkZpbGUoKSApIHtcbiAgICAgICAgICAgIHRva2VuID0gdGhpcy50b2tlbml6ZXIubmV4dFRva2VuKCk7XG5cbiAgICAgICAgICAgIGlmICggdG9rZW5bMF0gPT09ICc7JyApIHtcbiAgICAgICAgICAgICAgICBub2RlLnNvdXJjZS5lbmQgPSB7IGxpbmU6IHRva2VuWzJdLCBjb2x1bW46IHRva2VuWzNdIH07XG4gICAgICAgICAgICAgICAgdGhpcy5zZW1pY29sb24gPSB0cnVlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIGlmICggdG9rZW5bMF0gPT09ICd7JyApIHtcbiAgICAgICAgICAgICAgICBvcGVuID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHRva2VuWzBdID09PSAnfScpIHtcbiAgICAgICAgICAgICAgICBpZiAoIHBhcmFtcy5sZW5ndGggPiAwICkge1xuICAgICAgICAgICAgICAgICAgICBzaGlmdCA9IHBhcmFtcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgICAgICBwcmV2ID0gcGFyYW1zW3NoaWZ0XTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCBwcmV2ICYmIHByZXZbMF0gPT09ICdzcGFjZScgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcmV2ID0gcGFyYW1zWy0tc2hpZnRdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICggcHJldiApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUuc291cmNlLmVuZCA9IHsgbGluZTogcHJldls0XSwgY29sdW1uOiBwcmV2WzVdIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5lbmQodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaCh0b2tlbik7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICggdGhpcy50b2tlbml6ZXIuZW5kT2ZGaWxlKCkgKSB7XG4gICAgICAgICAgICAgICAgbGFzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBub2RlLnJhd3MuYmV0d2VlbiA9IHRoaXMuc3BhY2VzQW5kQ29tbWVudHNGcm9tRW5kKHBhcmFtcyk7XG4gICAgICAgIGlmICggcGFyYW1zLmxlbmd0aCApIHtcbiAgICAgICAgICAgIG5vZGUucmF3cy5hZnRlck5hbWUgPSB0aGlzLnNwYWNlc0FuZENvbW1lbnRzRnJvbVN0YXJ0KHBhcmFtcyk7XG4gICAgICAgICAgICB0aGlzLnJhdyhub2RlLCAncGFyYW1zJywgcGFyYW1zKTtcbiAgICAgICAgICAgIGlmICggbGFzdCApIHtcbiAgICAgICAgICAgICAgICB0b2tlbiA9IHBhcmFtc1twYXJhbXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgbm9kZS5zb3VyY2UuZW5kICAgPSB7IGxpbmU6IHRva2VuWzRdLCBjb2x1bW46IHRva2VuWzVdIH07XG4gICAgICAgICAgICAgICAgdGhpcy5zcGFjZXMgICAgICAgPSBub2RlLnJhd3MuYmV0d2VlbjtcbiAgICAgICAgICAgICAgICBub2RlLnJhd3MuYmV0d2VlbiA9ICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbm9kZS5yYXdzLmFmdGVyTmFtZSA9ICcnO1xuICAgICAgICAgICAgbm9kZS5wYXJhbXMgICAgICAgICA9ICcnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCBvcGVuICkge1xuICAgICAgICAgICAgbm9kZS5ub2RlcyAgID0gW107XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSBub2RlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZW5kKHRva2VuKSB7XG4gICAgICAgIGlmICggdGhpcy5jdXJyZW50Lm5vZGVzICYmIHRoaXMuY3VycmVudC5ub2Rlcy5sZW5ndGggKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQucmF3cy5zZW1pY29sb24gPSB0aGlzLnNlbWljb2xvbjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlbWljb2xvbiA9IGZhbHNlO1xuXG4gICAgICAgIHRoaXMuY3VycmVudC5yYXdzLmFmdGVyID0gKHRoaXMuY3VycmVudC5yYXdzLmFmdGVyIHx8ICcnKSArIHRoaXMuc3BhY2VzO1xuICAgICAgICB0aGlzLnNwYWNlcyA9ICcnO1xuXG4gICAgICAgIGlmICggdGhpcy5jdXJyZW50LnBhcmVudCApIHtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudC5zb3VyY2UuZW5kID0geyBsaW5lOiB0b2tlblsyXSwgY29sdW1uOiB0b2tlblszXSB9O1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5jdXJyZW50LnBhcmVudDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudW5leHBlY3RlZENsb3NlKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGVuZEZpbGUoKSB7XG4gICAgICAgIGlmICggdGhpcy5jdXJyZW50LnBhcmVudCApIHRoaXMudW5jbG9zZWRCbG9jaygpO1xuICAgICAgICBpZiAoIHRoaXMuY3VycmVudC5ub2RlcyAmJiB0aGlzLmN1cnJlbnQubm9kZXMubGVuZ3RoICkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50LnJhd3Muc2VtaWNvbG9uID0gdGhpcy5zZW1pY29sb247XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jdXJyZW50LnJhd3MuYWZ0ZXIgPSAodGhpcy5jdXJyZW50LnJhd3MuYWZ0ZXIgfHwgJycpICsgdGhpcy5zcGFjZXM7XG4gICAgfVxuXG4gICAgZnJlZVNlbWljb2xvbih0b2tlbikge1xuICAgICAgICB0aGlzLnNwYWNlcyArPSB0b2tlblsxXTtcbiAgICAgICAgaWYgKCB0aGlzLmN1cnJlbnQubm9kZXMgKSB7XG4gICAgICAgICAgICBsZXQgcHJldiA9IHRoaXMuY3VycmVudC5ub2Rlc1t0aGlzLmN1cnJlbnQubm9kZXMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBpZiAoIHByZXYgJiYgcHJldi50eXBlID09PSAncnVsZScgJiYgIXByZXYucmF3cy5vd25TZW1pY29sb24gKSB7XG4gICAgICAgICAgICAgICAgcHJldi5yYXdzLm93blNlbWljb2xvbiA9IHRoaXMuc3BhY2VzO1xuICAgICAgICAgICAgICAgIHRoaXMuc3BhY2VzID0gJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIZWxwZXJzXG5cbiAgICBpbml0KG5vZGUsIGxpbmUsIGNvbHVtbikge1xuICAgICAgICB0aGlzLmN1cnJlbnQucHVzaChub2RlKTtcblxuICAgICAgICBub2RlLnNvdXJjZSA9IHsgc3RhcnQ6IHsgbGluZSwgY29sdW1uIH0sIGlucHV0OiB0aGlzLmlucHV0IH07XG4gICAgICAgIG5vZGUucmF3cy5iZWZvcmUgPSB0aGlzLnNwYWNlcztcbiAgICAgICAgdGhpcy5zcGFjZXMgPSAnJztcbiAgICAgICAgaWYgKCBub2RlLnR5cGUgIT09ICdjb21tZW50JyApIHRoaXMuc2VtaWNvbG9uID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmF3KG5vZGUsIHByb3AsIHRva2Vucykge1xuICAgICAgICBsZXQgdG9rZW4sIHR5cGU7XG4gICAgICAgIGxldCBsZW5ndGggPSB0b2tlbnMubGVuZ3RoO1xuICAgICAgICBsZXQgdmFsdWUgID0gJyc7XG4gICAgICAgIGxldCBjbGVhbiAgPSB0cnVlO1xuICAgICAgICBsZXQgbmV4dCwgcHJldjtcbiAgICAgICAgY29uc3QgcGF0dGVybiA9IC9eKFsufCNdKT8oW1xcd10pKy9pO1xuXG4gICAgICAgIGZvciAoIGxldCBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxICkge1xuICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICAgICAgICB0eXBlICA9IHRva2VuWzBdO1xuXG4gICAgICAgICAgICBpZiAoIHR5cGUgPT09ICdjb21tZW50JyAmJiBub2RlLnR5cGUgPT09ICdydWxlJyApIHtcbiAgICAgICAgICAgICAgICBwcmV2ID0gdG9rZW5zW2kgLSAxXTtcbiAgICAgICAgICAgICAgICBuZXh0ID0gdG9rZW5zW2kgKyAxXTtcblxuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgcHJldlswXSAhPT0gJ3NwYWNlJyAmJlxuICAgICAgICAgICAgICAgICAgICBuZXh0WzBdICE9PSAnc3BhY2UnICYmXG4gICAgICAgICAgICAgICAgICAgIHBhdHRlcm4udGVzdChwcmV2WzFdKSAmJlxuICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuLnRlc3QobmV4dFsxXSlcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgKz0gdG9rZW5bMV07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY2xlYW4gPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCB0eXBlID09PSAnY29tbWVudCcgfHwgdHlwZSA9PT0gJ3NwYWNlJyAmJiBpID09PSBsZW5ndGggLSAxICkge1xuICAgICAgICAgICAgICAgIGNsZWFuID0gZmFsc2U7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlICs9IHRva2VuWzFdO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICggIWNsZWFuICkge1xuICAgICAgICAgICAgbGV0IHJhdyA9IHRva2Vucy5yZWR1Y2UoIChhbGwsIGkpID0+IGFsbCArIGlbMV0sICcnKTtcbiAgICAgICAgICAgIG5vZGUucmF3c1twcm9wXSA9IHsgdmFsdWUsIHJhdyB9O1xuICAgICAgICB9XG4gICAgICAgIG5vZGVbcHJvcF0gPSB2YWx1ZTtcbiAgICB9XG5cbiAgICBzcGFjZXNBbmRDb21tZW50c0Zyb21FbmQodG9rZW5zKSB7XG4gICAgICAgIGxldCBsYXN0VG9rZW5UeXBlO1xuICAgICAgICBsZXQgc3BhY2VzID0gJyc7XG4gICAgICAgIHdoaWxlICggdG9rZW5zLmxlbmd0aCApIHtcbiAgICAgICAgICAgIGxhc3RUb2tlblR5cGUgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdWzBdO1xuICAgICAgICAgICAgaWYgKCBsYXN0VG9rZW5UeXBlICE9PSAnc3BhY2UnICYmXG4gICAgICAgICAgICAgICAgbGFzdFRva2VuVHlwZSAhPT0gJ2NvbW1lbnQnICkgYnJlYWs7XG4gICAgICAgICAgICBzcGFjZXMgPSB0b2tlbnMucG9wKClbMV0gKyBzcGFjZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNwYWNlcztcbiAgICB9XG5cbiAgICBzcGFjZXNBbmRDb21tZW50c0Zyb21TdGFydCh0b2tlbnMpIHtcbiAgICAgICAgbGV0IG5leHQ7XG4gICAgICAgIGxldCBzcGFjZXMgPSAnJztcbiAgICAgICAgd2hpbGUgKCB0b2tlbnMubGVuZ3RoICkge1xuICAgICAgICAgICAgbmV4dCA9IHRva2Vuc1swXVswXTtcbiAgICAgICAgICAgIGlmICggbmV4dCAhPT0gJ3NwYWNlJyAmJiBuZXh0ICE9PSAnY29tbWVudCcgKSBicmVhaztcbiAgICAgICAgICAgIHNwYWNlcyArPSB0b2tlbnMuc2hpZnQoKVsxXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3BhY2VzO1xuICAgIH1cblxuICAgIHNwYWNlc0Zyb21FbmQodG9rZW5zKSB7XG4gICAgICAgIGxldCBsYXN0VG9rZW5UeXBlO1xuICAgICAgICBsZXQgc3BhY2VzID0gJyc7XG4gICAgICAgIHdoaWxlICggdG9rZW5zLmxlbmd0aCApIHtcbiAgICAgICAgICAgIGxhc3RUb2tlblR5cGUgPSB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdWzBdO1xuICAgICAgICAgICAgaWYgKCBsYXN0VG9rZW5UeXBlICE9PSAnc3BhY2UnICkgYnJlYWs7XG4gICAgICAgICAgICBzcGFjZXMgPSB0b2tlbnMucG9wKClbMV0gKyBzcGFjZXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNwYWNlcztcbiAgICB9XG5cbiAgICBzdHJpbmdGcm9tKHRva2VucywgZnJvbSkge1xuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgICAgIGZvciAoIGxldCBpID0gZnJvbTsgaSA8IHRva2Vucy5sZW5ndGg7IGkrKyApIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSB0b2tlbnNbaV1bMV07XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW5zLnNwbGljZShmcm9tLCB0b2tlbnMubGVuZ3RoIC0gZnJvbSk7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgY29sb24odG9rZW5zKSB7XG4gICAgICAgIGxldCBicmFja2V0cyA9IDA7XG4gICAgICAgIGxldCB0b2tlbiwgdHlwZSwgcHJldjtcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgdG9rZW5zLmxlbmd0aDsgaSsrICkge1xuICAgICAgICAgICAgdG9rZW4gPSB0b2tlbnNbaV07XG4gICAgICAgICAgICB0eXBlICA9IHRva2VuWzBdO1xuXG4gICAgICAgICAgICBpZiAoIHR5cGUgPT09ICcoJyApIHtcbiAgICAgICAgICAgICAgICBicmFja2V0cyArPSAxO1xuICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZSA9PT0gJyknICkge1xuICAgICAgICAgICAgICAgIGJyYWNrZXRzIC09IDE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCBicmFja2V0cyA9PT0gMCAmJiB0eXBlID09PSAnOicgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCAhcHJldiApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb3VibGVDb2xvbih0b2tlbik7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmICggcHJldlswXSA9PT0gJ3dvcmQnICYmIHByZXZbMV0gPT09ICdwcm9naWQnICkge1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHByZXYgPSB0b2tlbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgLy8gRXJyb3JzXG5cbiAgICB1bmNsb3NlZEJyYWNrZXQoYnJhY2tldCkge1xuICAgICAgICB0aHJvdyB0aGlzLmlucHV0LmVycm9yKCdVbmNsb3NlZCBicmFja2V0JywgYnJhY2tldFsyXSwgYnJhY2tldFszXSk7XG4gICAgfVxuXG4gICAgdW5rbm93bldvcmQodG9rZW5zKSB7XG4gICAgICAgIHRocm93IHRoaXMuaW5wdXQuZXJyb3IoJ1Vua25vd24gd29yZCcsIHRva2Vuc1swXVsyXSwgdG9rZW5zWzBdWzNdKTtcbiAgICB9XG5cbiAgICB1bmV4cGVjdGVkQ2xvc2UodG9rZW4pIHtcbiAgICAgICAgdGhyb3cgdGhpcy5pbnB1dC5lcnJvcignVW5leHBlY3RlZCB9JywgdG9rZW5bMl0sIHRva2VuWzNdKTtcbiAgICB9XG5cbiAgICB1bmNsb3NlZEJsb2NrKCkge1xuICAgICAgICBsZXQgcG9zID0gdGhpcy5jdXJyZW50LnNvdXJjZS5zdGFydDtcbiAgICAgICAgdGhyb3cgdGhpcy5pbnB1dC5lcnJvcignVW5jbG9zZWQgYmxvY2snLCBwb3MubGluZSwgcG9zLmNvbHVtbik7XG4gICAgfVxuXG4gICAgZG91YmxlQ29sb24odG9rZW4pIHtcbiAgICAgICAgdGhyb3cgdGhpcy5pbnB1dC5lcnJvcignRG91YmxlIGNvbG9uJywgdG9rZW5bMl0sIHRva2VuWzNdKTtcbiAgICB9XG5cbiAgICB1bm5hbWVkQXRydWxlKG5vZGUsIHRva2VuKSB7XG4gICAgICAgIHRocm93IHRoaXMuaW5wdXQuZXJyb3IoJ0F0LXJ1bGUgd2l0aG91dCBuYW1lJywgdG9rZW5bMl0sIHRva2VuWzNdKTtcbiAgICB9XG5cbiAgICBwcmVjaGVja01pc3NlZFNlbWljb2xvbih0b2tlbnMpIHtcbiAgICAgICAgLy8gSG9vayBmb3IgU2FmZSBQYXJzZXJcbiAgICAgICAgdG9rZW5zO1xuICAgIH1cblxuICAgIGNoZWNrTWlzc2VkU2VtaWNvbG9uKHRva2Vucykge1xuICAgICAgICBsZXQgY29sb24gPSB0aGlzLmNvbG9uKHRva2Vucyk7XG4gICAgICAgIGlmICggY29sb24gPT09IGZhbHNlICkgcmV0dXJuO1xuXG4gICAgICAgIGxldCBmb3VuZGVkID0gMDtcbiAgICAgICAgbGV0IHRva2VuO1xuICAgICAgICBmb3IgKCBsZXQgaiA9IGNvbG9uIC0gMTsgaiA+PSAwOyBqLS0gKSB7XG4gICAgICAgICAgICB0b2tlbiA9IHRva2Vuc1tqXTtcbiAgICAgICAgICAgIGlmICggdG9rZW5bMF0gIT09ICdzcGFjZScgKSB7XG4gICAgICAgICAgICAgICAgZm91bmRlZCArPSAxO1xuICAgICAgICAgICAgICAgIGlmICggZm91bmRlZCA9PT0gMiApIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRocm93IHRoaXMuaW5wdXQuZXJyb3IoJ01pc3NlZCBzZW1pY29sb24nLCB0b2tlblsyXSwgdG9rZW5bM10pO1xuICAgIH1cblxufVxuIl19
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/postcss.d.ts b/node_modules/postcss-reporter/node_modules/postcss/lib/postcss.d.ts
new file mode 100644
index 00000000..8123e3fe
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/postcss.d.ts
@@ -0,0 +1,1301 @@
+import * as mozilla from 'source-map';
+
+/**
+ * @param plugins Can also be included with the Processor#use method.
+ * @returns A processor that will apply plugins as CSS processors.
+ */
+declare function postcss(plugins?: postcss.AcceptedPlugin[]): postcss.Processor;
+declare function postcss(...plugins: postcss.AcceptedPlugin[]): postcss.Processor;
+declare namespace postcss {
+ type AcceptedPlugin = Plugin<any> | Transformer | {
+ postcss: TransformCallback | Processor;
+ } | Processor;
+ /**
+ * Creates a PostCSS plugin with a standard API.
+ * @param name Plugin name. Same as in name property in package.json. It will
+ * be saved in plugin.postcssPlugin property.
+ * @param initializer Will receive plugin options and should return functions
+ * to modify nodes in input CSS.
+ */
+ function plugin<T>(name: string, initializer: PluginInitializer<T>): Plugin<T>;
+ interface Plugin<T> extends Transformer {
+ (opts?: T): Transformer;
+ postcss: Transformer;
+ process: (css: string | {
+ toString(): string;
+ } | Result, opts?: any) => LazyResult;
+ }
+ interface Transformer extends TransformCallback {
+ postcssPlugin?: string;
+ postcssVersion?: string;
+ }
+ interface TransformCallback {
+ /**
+ * @returns Asynchronous plugins should return a promise.
+ */
+ (root: Root, result?: Result): void | Function | any;
+ }
+ interface PluginInitializer<T> {
+ (pluginOptions?: T): Transformer;
+ }
+ /**
+ * Contains helpers for working with vendor prefixes.
+ */
+ export namespace vendor {
+ /**
+ * @returns The vendor prefix extracted from the input string.
+ */
+ function prefix(prop: string): string;
+ /**
+ * @returns The input string stripped of its vendor prefix.
+ */
+ function unprefixed(prop: string): string;
+ }
+ export class Stringifier {
+ builder: Stringifier.Builder;
+ constructor(builder?: Stringifier.Builder);
+ stringify(node: Node, semicolon?: boolean): void;
+ root(node: any): void;
+ comment(node: any): void;
+ decl(node: any, semicolon: any): void;
+ rule(node: any): void;
+ atrule(node: any, semicolon: any): void;
+ body(node: any): void;
+ block(node: any, start: any): void;
+ raw(node: Node, own: string, detect?: string): any;
+ rawSemicolon(root: any): any;
+ rawEmptyBody(root: any): any;
+ rawIndent(root: any): any;
+ rawBeforeComment(root: any, node: any): any;
+ rawBeforeDecl(root: any, node: any): any;
+ rawBeforeRule(root: any): any;
+ rawBeforeClose(root: any): any;
+ rawBeforeOpen(root: any): any;
+ rawColon(root: any): any;
+ beforeAfter(node: any, detect: any): any;
+ rawValue(node: any, prop: any): any;
+ }
+ export namespace Stringifier {
+ interface Builder {
+ (str: string, node?: Node, str2?: string): void;
+ }
+ }
+ /**
+ * Default function to convert a node tree into a CSS string.
+ */
+ function stringify(node: Node, builder: Stringifier.Builder): void;
+ /**
+ * Parses source CSS.
+ * @param css The CSS to parse.
+ * @param options
+ * @returns {} A new Root node, which contains the source CSS nodes.
+ */
+ function parse(css: string | {
+ toString(): string;
+ } | LazyResult | Result, options?: {
+ from?: string;
+ map?: postcss.SourceMapOptions;
+ }): Root;
+ /**
+ * Contains helpers for safely splitting lists of CSS values, preserving
+ * parentheses and quotes.
+ */
+ export namespace list {
+ /**
+ * Safely splits space-separated values (such as those for background,
+ * border-radius and other shorthand properties).
+ */
+ function space(str: string): string[];
+ /**
+ * Safely splits comma-separated values (such as those for transition-* and
+ * background properties).
+ */
+ function comma(str: string): string[];
+ }
+ /**
+ * Creates a new Comment node.
+ * @param defaults Properties for the new Comment node.
+ * @returns The new node.
+ */
+ function comment(defaults?: CommentNewProps): Comment;
+ /**
+ * Creates a new AtRule node.
+ * @param defaults Properties for the new AtRule node.
+ * @returns The new node.
+ */
+ function atRule(defaults?: AtRuleNewProps): AtRule;
+ /**
+ * Creates a new Declaration node.
+ * @param defaults Properties for the new Declaration node.
+ * @returns The new node.
+ */
+ function decl(defaults?: DeclarationNewProps): Declaration;
+ /**
+ * Creates a new Rule node.
+ * @param defaults Properties for the new Rule node.
+ * @returns The new node.
+ */
+ function rule(defaults?: RuleNewProps): Rule;
+ /**
+ * Creates a new Root node.
+ * @param defaults Properties for the new Root node.
+ * @returns The new node.
+ */
+ function root(defaults?: object): Root;
+ interface SourceMapOptions {
+ /**
+ * Indicates that the source map should be embedded in the output CSS as a
+ * Base64-encoded comment. By default, it is true. But if all previous maps
+ * are external, not inline, PostCSS will not embed the map even if you do
+ * not set this option.
+ *
+ * If you have an inline source map, the result.map property will be empty,
+ * as the source map will be contained within the text of result.css.
+ */
+ inline?: boolean;
+ /**
+ * Source map content from a previous processing step (e.g., Sass compilation).
+ * PostCSS will try to read the previous source map automatically (based on comments
+ * within the source CSS), but you can use this option to identify it manually.
+ * If desired, you can omit the previous map with prev: false.
+ */
+ prev?: any;
+ /**
+ * Indicates that PostCSS should set the origin content (e.g., Sass source)
+ * of the source map. By default, it is true. But if all previous maps do not
+ * contain sources content, PostCSS will also leave it out even if you do not set
+ * this option.
+ */
+ sourcesContent?: boolean;
+ /**
+ * Indicates that PostCSS should add annotation comments to the CSS. By default,
+ * PostCSS will always add a comment with a path to the source map. PostCSS will
+ * not add annotations to CSS files that do not contain any comments.
+ *
+ * By default, PostCSS presumes that you want to save the source map as
+ * opts.to + '.map' and will use this path in the annotation comment. A different
+ * path can be set by providing a string value for annotation.
+ *
+ * If you have set inline: true, annotation cannot be disabled.
+ */
+ annotation?: boolean | string;
+ /**
+ * If true, PostCSS will try to correct any syntax errors that it finds in the CSS.
+ * This is useful for legacy code filled with hacks. Another use-case is interactive
+ * tools with live input — for example, the Autoprefixer demo.
+ */
+ safe?: boolean;
+ }
+ /**
+ * A Processor instance contains plugins to process CSS. Create one
+ * Processor instance, initialize its plugins, and then use that instance
+ * on numerous CSS files.
+ */
+ interface Processor {
+ /**
+ * Adds a plugin to be used as a CSS processor. Plugins can also be
+ * added by passing them as arguments when creating a postcss instance.
+ */
+ use(plugin: AcceptedPlugin): Processor;
+ /**
+ * Parses source CSS. Because some plugins can be asynchronous it doesn't
+ * make any transformations. Transformations will be applied in LazyResult's
+ * methods.
+ * @param css Input CSS or any object with toString() method, like a file
+ * stream. If a Result instance is passed the processor will take the
+ * existing Root parser from it.
+ */
+ process(css: string | {
+ toString(): string;
+ } | Result, options?: ProcessOptions): LazyResult;
+ /**
+ * Contains plugins added to this processor.
+ */
+ plugins: Plugin<any>[];
+ /**
+ * Contains the current version of PostCSS (e.g., "4.0.5").
+ */
+ version: string;
+ }
+ interface ProcessOptions extends Syntax {
+ /**
+ * The path of the CSS source file. You should always set from, because it is
+ * used in source map generation and syntax error messages.
+ */
+ from?: string;
+ /**
+ * The path where you'll put the output CSS file. You should always set it
+ * to generate correct source maps.
+ */
+ to?: string;
+ syntax?: Syntax;
+ /**
+ * Enable Safe Mode, in which PostCSS will try to fix CSS syntax errors.
+ */
+ safe?: boolean;
+ map?: postcss.SourceMapOptions;
+ /**
+ * Function to generate AST by string.
+ */
+ parser?: Parse | Syntax;
+ /**
+ * Class to generate string by AST.
+ */
+ stringifier?: Stringify | Syntax;
+ }
+ interface Syntax {
+ /**
+ * Function to generate AST by string.
+ */
+ parse?: Parse;
+ /**
+ * Class to generate string by AST.
+ */
+ stringify?: Stringify;
+ }
+ interface Parse {
+ (css?: string, opts?: postcss.SourceMapOptions): Root;
+ }
+ interface Stringify {
+ (node?: postcss.Node, builder?: any): postcss.Result | void;
+ }
+ /**
+ * A promise proxy for the result of PostCSS transformations.
+ */
+ interface LazyResult {
+ /**
+ * Processes input CSS through synchronous and asynchronous plugins.
+ * @param onRejected Called if any plugin throws an error.
+ */
+ then(onFulfilled: (result: Result) => void, onRejected?: (error: Error) => void): Function | any;
+ /**
+ * Processes input CSS through synchronous and asynchronous plugins.
+ * @param onRejected Called if any plugin throws an error.
+ */
+ catch(onRejected: (error: Error) => void): Function | any;
+ /**
+ * Alias for css property.
+ */
+ toString(): string;
+ /**
+ * Processes input CSS through synchronous plugins and converts Root to
+ * CSS string. This property will only work with synchronous plugins. If
+ * the processor contains any asynchronous plugins it will throw an error.
+ * In this case, you should use LazyResult#then() instead.
+ * @returns Result#css.
+ */
+ css: string;
+ /**
+ * Alias for css property to use when syntaxes generate non-CSS output.
+ */
+ content: string;
+ /**
+ * Processes input CSS through synchronous plugins. This property will
+ * work only with synchronous plugins. If processor contains any
+ * asynchronous plugins it will throw an error. You should use
+ * LazyResult#then() instead.
+ */
+ map: ResultMap;
+ /**
+ * Processes input CSS through synchronous plugins. This property will work
+ * only with synchronous plugins. If processor contains any asynchronous
+ * plugins it will throw an error. You should use LazyResult#then() instead.
+ */
+ root: Root;
+ /**
+ * Processes input CSS through synchronous plugins and calls Result#warnings().
+ * This property will only work with synchronous plugins. If the processor
+ * contains any asynchronous plugins it will throw an error. In this case,
+ * you should use LazyResult#then() instead.
+ */
+ warnings(): ResultMessage[];
+ /**
+ * Processes input CSS through synchronous plugins. This property will work
+ * only with synchronous plugins. If processor contains any asynchronous
+ * plugins it will throw an error. You should use LazyResult#then() instead.
+ */
+ messages: ResultMessage[];
+ /**
+ * @returns A processor used for CSS transformations.
+ */
+ processor: Processor;
+ /**
+ * @returns Options from the Processor#process(css, opts) call that produced
+ * this Result instance.
+ */
+ opts: ResultOptions;
+ }
+ /**
+ * Provides the result of the PostCSS transformations.
+ */
+ interface Result {
+ /**
+ * Alias for css property.
+ */
+ toString(): string;
+ /**
+ * Creates an instance of Warning and adds it to messages.
+ * @param message Used in the text property of the message object.
+ * @param options Properties for Message object.
+ */
+ warn(message: string, options?: WarningOptions): void;
+ /**
+ * @returns Warnings from plugins, filtered from messages.
+ */
+ warnings(): ResultMessage[];
+ /**
+ * A CSS string representing this Result's Root instance.
+ */
+ css: string;
+ /**
+ * Alias for css property to use with syntaxes that generate non-CSS output.
+ */
+ content: string;
+ /**
+ * An instance of the SourceMapGenerator class from the source-map library,
+ * representing changes to the Result's Root instance.
+ * This property will have a value only if the user does not want an inline
+ * source map. By default, PostCSS generates inline source maps, written
+ * directly into the processed CSS. The map property will be empty by default.
+ * An external source map will be generated — and assigned to map — only if
+ * the user has set the map.inline option to false, or if PostCSS was passed
+ * an external input source map.
+ */
+ map: ResultMap;
+ /**
+ * Contains the Root node after all transformations.
+ */
+ root?: Root;
+ /**
+ * Contains messages from plugins (e.g., warnings or custom messages).
+ * Add a warning using Result#warn() and get all warnings
+ * using the Result#warnings() method.
+ */
+ messages: ResultMessage[];
+ /**
+ * The Processor instance used for this transformation.
+ */
+ processor?: Processor;
+ /**
+ * Options from the Processor#process(css, opts) or Root#toResult(opts) call
+ * that produced this Result instance.
+ */
+ opts?: ResultOptions;
+ }
+ interface ResultOptions extends ProcessOptions {
+ /**
+ * The CSS node that was the source of the warning.
+ */
+ node?: postcss.Node;
+ /**
+ * Name of plugin that created this warning. Result#warn() will fill it
+ * automatically with plugin.postcssPlugin value.
+ */
+ plugin?: string;
+ }
+ interface ResultMap {
+ /**
+ * 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:
+ * @param mapping
+ * @returns {}
+ */
+ addMapping(mapping: mozilla.Mapping): void;
+ /**
+ * Set the source content for an original source file.
+ * @param sourceFile The URL of the original source file.
+ * @param sourceContent The content of the source file.
+ */
+ setSourceContent(sourceFile: string, sourceContent: string): void;
+ /**
+ * 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.
+ * @param sourceMapConsumer The SourceMap to be applied.
+ * @param sourceFile The filename of the source file. If omitted, sourceMapConsumer
+ * file will be used, if it exists. Otherwise an error will be thrown.
+ * @param sourceMapPath 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).
+ */
+ applySourceMap(
+ sourceMapConsumer: mozilla.SourceMapConsumer,
+ sourceFile?: string,
+ sourceMapPath?: string
+ ): void;
+ /**
+ * Renders the source map being generated to JSON.
+ */
+ toJSON: () => mozilla.RawSourceMap;
+ /**
+ * Renders the source map being generated to a string.
+ */
+ toString: () => string;
+ }
+ interface ResultMessage {
+ type: string;
+ text?: string;
+ plugin?: string;
+ browsers?: string[];
+ }
+ /**
+ * Represents a plugin warning. It can be created using Result#warn().
+ */
+ interface Warning {
+ /**
+ * @returns Error position, message.
+ */
+ toString(): string;
+ /**
+ * Contains the warning message.
+ */
+ text: string;
+ /**
+ * Contains the name of the plugin that created this warning. When you
+ * call Result#warn(), it will fill this property automatically.
+ */
+ plugin: string;
+ /**
+ * The CSS node that caused the warning.
+ */
+ node: Node;
+ /**
+ * The line in the input file with this warning's source.
+ */
+ line: number;
+ /**
+ * Column in the input file with this warning's source.
+ */
+ column: number;
+ }
+ interface WarningOptions extends ResultOptions {
+ /**
+ * A word inside a node's string that should be highlighted as source
+ * of warning.
+ */
+ word?: string;
+ /**
+ * The index inside a node's string that should be highlighted as
+ * source of warning.
+ */
+ index?: number;
+ }
+ /**
+ * The CSS parser throws this error for broken CSS.
+ */
+ interface CssSyntaxError extends InputOrigin {
+ name: string;
+ /**
+ * @returns Error position, message and source code of broken part.
+ */
+ toString(): string;
+ /**
+ * @param color Whether arrow should be colored red by terminal color codes.
+ * By default, PostCSS will use process.stdout.isTTY and
+ * process.env.NODE_DISABLE_COLORS.
+ * @returns A few lines of CSS source that caused the error. If CSS has
+ * input source map without sourceContent this method will return an empty
+ * string.
+ */
+ showSourceCode(color?: boolean): string;
+ /**
+ * Contains full error text in the GNU error format.
+ */
+ message: string;
+ /**
+ * Contains only the error description.
+ */
+ reason: string;
+ /**
+ * Contains the PostCSS plugin name if the error didn't come from the
+ * CSS parser.
+ */
+ plugin?: string;
+ input?: InputOrigin;
+ }
+ interface InputOrigin {
+ /**
+ * If parser's from option is set, contains the absolute path to the
+ * broken file. PostCSS will use the input source map to detect the
+ * original error location. If you wrote a Sass file, then compiled it
+ * to CSS and parsed it with PostCSS, PostCSS will show the original
+ * position in the Sass file. If you need the position in the PostCSS
+ * input (e.g., to debug the previous compiler), use error.input.file.
+ */
+ file?: string;
+ /**
+ * Contains the source line of the error. PostCSS will use the input
+ * source map to detect the original error location. If you wrote a Sass
+ * file, then compiled it to CSS and parsed it with PostCSS, PostCSS
+ * will show the original position in the Sass file. If you need the
+ * position in the PostCSS input (e.g., to debug the previous
+ * compiler), use error.input.line.
+ */
+ line?: number;
+ /**
+ * Contains the source column of the error. PostCSS will use input
+ * source map to detect the original error location. If you wrote a
+ * Sass file, then compiled it to CSS and parsed it with PostCSS,
+ * PostCSS will show the original position in the Sass file. If you
+ * need the position in the PostCSS input (e.g., to debug the
+ * previous compiler), use error.input.column.
+ */
+ column?: number;
+ /**
+ * Contains the source code of the broken file. PostCSS will use the
+ * input source map to detect the original error location. If you wrote
+ * a Sass file, then compiled it to CSS and parsed it with PostCSS,
+ * PostCSS will show the original position in the Sass file. If you need
+ * the position in the PostCSS input (e.g., to debug the previous
+ * compiler), use error.input.source.
+ */
+ source?: string;
+ }
+ export class PreviousMap {
+ private inline;
+ annotation: string;
+ root: string;
+ private consumerCache;
+ text: string;
+ file: string;
+ constructor(css: any, opts: any);
+ consumer(): mozilla.SourceMapConsumer;
+ withContent(): boolean;
+ startWith(string: string, start: string): boolean;
+ loadAnnotation(css: string): void;
+ decodeInline(text: string): string;
+ loadMap(
+ file: any,
+ prev: string | Function | mozilla.SourceMapConsumer | mozilla.SourceMapGenerator | mozilla.RawSourceMap
+ ): string;
+ isMap(map: any): boolean;
+ }
+ /**
+ * Represents the source CSS.
+ */
+ interface Input {
+ /**
+ * The absolute path to the CSS source file defined with the "from" option.
+ */
+ file: string;
+ /**
+ * The unique ID of the CSS source. Used if "from" option is not provided
+ * (because PostCSS does not know the file path).
+ */
+ id: string;
+ /**
+ * The CSS source identifier. Contains input.file if the user set the
+ * "from" option, or input.id if they did not.
+ */
+ from: string;
+ /**
+ * Represents the input source map passed from a compilation step before
+ * PostCSS (e.g., from the Sass compiler).
+ */
+ map: PreviousMap;
+ /**
+ * Reads the input source map.
+ * @returns A symbol position in the input source (e.g., in a Sass file
+ * that was compiled to CSS before being passed to PostCSS):
+ */
+ origin(line: number, column: number): InputOrigin;
+ }
+ type ChildNode = AtRule | Rule | Declaration | Comment;
+ type Node = Root | ChildNode;
+ interface NodeBase {
+ /**
+ * Returns the input source of the node. The property is used in source
+ * map generation. If you create a node manually
+ * (e.g., with postcss.decl() ), that node will not have a source
+ * property and will be absent from the source map. For this reason, the
+ * plugin developer should consider cloning nodes to create new ones
+ * (in which case the new node's source will reference the original,
+ * cloned node) or setting the source property manually.
+ */
+ source: NodeSource;
+ /**
+ * Contains information to generate byte-to-byte equal node string as it
+ * was in origin input.
+ */
+ raws: NodeRaws;
+ /**
+ * @returns A CSS string representing the node.
+ */
+ toString(): string;
+ /**
+ * This method produces very useful error messages. If present, an input
+ * source map will be used to get the original position of the source, even
+ * from a previous compilation step (e.g., from Sass compilation).
+ * @returns The original position of the node in the source, showing line
+ * and column numbers and also a small excerpt to facilitate debugging.
+ */
+ error(
+ /**
+ * Error description.
+ */
+ message: string, options?: NodeErrorOptions): CssSyntaxError;
+ /**
+ * Creates an instance of Warning and adds it to messages. This method is
+ * provided as a convenience wrapper for Result#warn.
+ * Note that `opts.node` is automatically passed to Result#warn for you.
+ * @param result The result that will receive the warning.
+ * @param text Warning message. It will be used in the `text` property of
+ * the message object.
+ * @param opts Properties to assign to the message object.
+ */
+ warn(result: Result, text: string, opts?: WarningOptions): void;
+ /**
+ * @returns The next child of the node's parent; or, returns undefined if
+ * the current node is the last child.
+ */
+ next(): ChildNode | void;
+ /**
+ * @returns The previous child of the node's parent; or, returns undefined
+ * if the current node is the first child.
+ */
+ prev(): ChildNode | void;
+ /**
+ * Insert new node before current node to current node’s parent.
+ *
+ * Just an alias for `node.parent.insertBefore(node, newNode)`.
+ *
+ * @returns this node for method chaining.
+ *
+ * @example
+ * decl.before('content: ""');
+ */
+ before(newNode: Node | object | string | Node[]): this;
+ /**
+ * Insert new node after current node to current node’s parent.
+ *
+ * Just an alias for `node.parent.insertAfter(node, newNode)`.
+ *
+ * @returns this node for method chaining.
+ *
+ * @example
+ * decl.after('color: black');
+ */
+ after(newNode: Node | object | string | Node[]): this;
+ /**
+ * @returns The Root instance of the node's tree.
+ */
+ root(): Root;
+ /**
+ * Removes the node from its parent and cleans the parent property in the
+ * node and its children.
+ * @returns This node for chaining.
+ */
+ remove(): this;
+ /**
+ * Inserts node(s) before the current node and removes the current node.
+ * @returns This node for chaining.
+ */
+ replaceWith(...nodes: (Node | object)[]): this;
+ /**
+ * @param overrides New properties to override in the clone.
+ * @returns A clone of this node. The node and its (cloned) children will
+ * have a clean parent and code style properties.
+ */
+ clone(overrides?: object): this;
+ /**
+ * Shortcut to clone the node and insert the resulting cloned node before
+ * the current node.
+ * @param overrides New Properties to override in the clone.
+ * @returns The cloned node.
+ */
+ cloneBefore(overrides?: object): this;
+ /**
+ * Shortcut to clone the node and insert the resulting cloned node after
+ * the current node.
+ * @param overrides New Properties to override in the clone.
+ * @returns The cloned node.
+ */
+ cloneAfter(overrides?: object): this;
+ /**
+ * @param prop Name or code style property.
+ * @param defaultType Name of default value. It can be easily missed if the
+ * value is the same as prop.
+ * @returns A code style property value. If the node is missing the code
+ * style property (because the node was manually built or cloned), PostCSS
+ * will try to autodetect the code style property by looking at other nodes
+ * in the tree.
+ */
+ raw(prop: string, defaultType?: string): any;
+ }
+ interface NodeNewProps {
+ source?: NodeSource;
+ raws?: NodeRaws;
+ }
+ interface NodeRaws {
+ /**
+ * The space symbols before the node. It also stores `*` and `_`
+ * symbols before the declaration (IE hack).
+ */
+ before?: string;
+ /**
+ * The space symbols after the last child of the node to the end of
+ * the node.
+ */
+ after?: string;
+ /**
+ * The symbols between the property and value for declarations,
+ * selector and "{" for rules, last parameter and "{" for at-rules.
+ */
+ between?: string;
+ /**
+ * True if last child has (optional) semicolon.
+ */
+ semicolon?: boolean;
+ /**
+ * The space between the at-rule's name and parameters.
+ */
+ afterName?: string;
+ /**
+ * The space symbols between "/*" and comment's text.
+ */
+ left?: string;
+ /**
+ * The space symbols between comment's text and "*\/".
+ */
+ right?: string;
+ /**
+ * The content of important statement, if it is not just "!important".
+ */
+ important?: string;
+ }
+ interface NodeSource {
+ input: Input;
+ /**
+ * The starting position of the node's source.
+ */
+ start?: {
+ column: number;
+ line: number;
+ };
+ /**
+ * The ending position of the node's source.
+ */
+ end?: {
+ column: number;
+ line: number;
+ };
+ }
+ interface NodeErrorOptions {
+ /**
+ * Plugin name that created this error. PostCSS will set it automatically.
+ */
+ plugin?: string;
+ /**
+ * A word inside a node's string, that should be highlighted as source
+ * of error.
+ */
+ word?: string;
+ /**
+ * An index inside a node's string that should be highlighted as source
+ * of error.
+ */
+ index?: number;
+ }
+ interface JsonNode {
+ /**
+ * Returns a string representing the node's type. Possible values are
+ * root, atrule, rule, decl or comment.
+ */
+ type?: string;
+ /**
+ * Returns the node's parent node.
+ */
+ parent?: JsonContainer;
+ /**
+ * Returns the input source of the node. The property is used in source
+ * map generation. If you create a node manually (e.g., with
+ * postcss.decl() ), that node will not have a source property and
+ * will be absent from the source map. For this reason, the plugin
+ * developer should consider cloning nodes to create new ones (in which
+ * case the new node's source will reference the original, cloned node)
+ * or setting the source property manually.
+ */
+ source?: NodeSource;
+ /**
+ * Contains information to generate byte-to-byte equal node string as it
+ * was in origin input.
+ */
+ raws?: NodeRaws;
+ }
+ type Container = Root | AtRule | Rule;
+ /**
+ * Containers can store any content. If you write a rule inside a rule,
+ * PostCSS will parse it.
+ */
+ interface ContainerBase extends NodeBase {
+ /**
+ * Contains the container's children.
+ */
+ nodes?: ChildNode[];
+ /**
+ * @returns The container's first child.
+ */
+ first?: ChildNode;
+ /**
+ * @returns The container's last child.
+ */
+ last?: ChildNode;
+ /**
+ * @param overrides New properties to override in the clone.
+ * @returns A clone of this node. The node and its (cloned) children will
+ * have a clean parent and code style properties.
+ */
+ clone(overrides?: object): this;
+ /**
+ * @param child Child of the current container.
+ * @returns The child's index within the container's "nodes" array.
+ */
+ index(child: ChildNode | number): number;
+ /**
+ * Determines whether all child nodes satisfy the specified test.
+ * @param callback A function that accepts up to three arguments. The
+ * every method calls the callback function for each node until the
+ * callback returns false, or until the end of the array.
+ * @returns True if the callback returns true for all of the container's
+ * children.
+ */
+ every(callback: (node: ChildNode, index: number, nodes: ChildNode[]) => any, thisArg?: any): boolean;
+ /**
+ * Determines whether the specified callback returns true for any child node.
+ * @param callback A function that accepts up to three arguments. The some
+ * method calls the callback for each node until the callback returns true,
+ * or until the end of the array.
+ * @param thisArg An object to which the this keyword can refer in the
+ * callback function. If thisArg is omitted, undefined is used as the
+ * this value.
+ * @returns True if callback returns true for (at least) one of the
+ * container's children.
+ */
+ some(callback: (node: ChildNode, index: number, nodes: ChildNode[]) => boolean, thisArg?: any): boolean;
+ /**
+ * Iterates through the container's immediate children, calling the
+ * callback function for each child. If you need to recursively iterate
+ * through all the container's descendant nodes, use container.walk().
+ * Unlike the for {} -cycle or Array#forEach() this iterator is safe if
+ * you are mutating the array of child nodes during iteration.
+ * @param callback Iterator. Returning false will break iteration. Safe
+ * if you are mutating the array of child nodes during iteration. PostCSS
+ * will adjust the current index to match the mutations.
+ * @returns False if the callback returns false during iteration.
+ */
+ each(callback: (node: ChildNode, index: number) => any): boolean | void;
+ /**
+ * Traverses the container's descendant nodes, calling `callback` for each
+ * node. Like container.each(), this method is safe to use if you are
+ * mutating arrays during iteration. If you only need to iterate through
+ * the container's immediate children, use container.each().
+ * @param callback Iterator.
+ */
+ walk(callback: (node: ChildNode, index: number) => any): boolean | void;
+ /**
+ * Traverses the container's descendant nodes, calling `callback` for each
+ * declaration. Like container.each(), this method is safe to use if you
+ * are mutating arrays during iteration.
+ * @param propFilter Filters declarations by property name. Only those
+ * declarations whose property matches propFilter will be iterated over.
+ * @param callback Called for each declaration node within the container.
+ */
+ walkDecls(propFilter: string | RegExp, callback?: (decl: Declaration, index: number) => any): boolean | void;
+ walkDecls(callback: (decl: Declaration, index: number) => any): boolean | void;
+ /**
+ * Traverses the container's descendant nodes, calling `callback` for each
+ * at-rule. Like container.each(), this method is safe to use if you are
+ * mutating arrays during iteration.
+ * @param nameFilter Filters at-rules by name. If provided, iteration
+ * will only happen over at-rules that have matching names.
+ * @param callback Iterator called for each at-rule node within the
+ * container.
+ */
+ walkAtRules(nameFilter: string | RegExp, callback: (atRule: AtRule, index: number) => any): boolean | void;
+ walkAtRules(callback: (atRule: AtRule, index: number) => any): boolean | void;
+ /**
+ * Traverses the container's descendant nodes, calling `callback` for each
+ * rule. Like container.each(), this method is safe to use if you are
+ * mutating arrays during iteration.
+ * @param selectorFilter Filters rules by selector. If provided,
+ * iteration will only happen over rules that have matching names.
+ * @param callback Iterator called for each rule node within the
+ * container.
+ */
+ walkRules(selectorFilter: string | RegExp, callback: (atRule: Rule, index: number) => any): boolean | void;
+ walkRules(callback: (atRule: Rule, index: number) => any): boolean | void;
+ walkRules(selectorFilter: any, callback?: (atRule: Rule, index: number) => any): boolean | void;
+ /**
+ * Traverses the container's descendant nodes, calling `callback` for each
+ * comment. Like container.each(), this method is safe to use if you are
+ * mutating arrays during iteration.
+ * @param callback Iterator called for each comment node within the container.
+ */
+ walkComments(callback: (comment: Comment, indexed: number) => any): void | boolean;
+ /**
+ * Passes all declaration values within the container that match pattern
+ * through the callback, replacing those values with the returned result of
+ * callback. This method is useful if you are using a custom unit or
+ * function and need to iterate through all values.
+ * @param pattern Pattern that we need to replace.
+ * @param options Options to speed up the search.
+ * @param callbackOrReplaceValue String to replace pattern or callback
+ * that will return a new value. The callback will receive the same
+ * arguments as those passed to a function parameter of String#replace.
+ */
+ replaceValues(pattern: string | RegExp, options: {
+ /**
+ * Property names. The method will only search for values that match
+ * regexp within declarations of listed properties.
+ */
+ props?: string[];
+ /**
+ * Used to narrow down values and speed up the regexp search. Searching
+ * every single value with a regexp can be slow. If you pass a fast
+ * string, PostCSS will first check whether the value contains the fast
+ * string; and only if it does will PostCSS check that value against
+ * regexp. For example, instead of just checking for /\d+rem/ on all
+ * values, set fast: 'rem' to first check whether a value has the rem
+ * unit, and only if it does perform the regexp check.
+ */
+ fast?: string;
+ }, callbackOrReplaceValue: string | {
+ (substring: string, ...args: any[]): string;
+ }): this;
+ replaceValues(pattern: string | RegExp, callbackOrReplaceValue: string | {
+ (substring: string, ...args: any[]): string;
+ }): this;
+ /**
+ * Inserts new nodes to the beginning of the container.
+ * Because each node class is identifiable by unique properties, use the
+ * following shortcuts to create nodes in insert methods:
+ * root.prepend({ name: '@charset', params: '"UTF-8"' }); // at-rule
+ * root.prepend({ selector: 'a' }); // rule
+ * rule.prepend({ prop: 'color', value: 'black' }); // declaration
+ * rule.prepend({ text: 'Comment' }) // comment
+ * A string containing the CSS of the new element can also be used. This
+ * approach is slower than the above shortcuts.
+ * root.prepend('a {}');
+ * root.first.prepend('color: black; z-index: 1');
+ * @param nodes New nodes.
+ * @returns This container for chaining.
+ */
+ prepend(...nodes: (Node | object | string)[]): this;
+ /**
+ * Inserts new nodes to the end of the container.
+ * Because each node class is identifiable by unique properties, use the
+ * following shortcuts to create nodes in insert methods:
+ * root.append({ name: '@charset', params: '"UTF-8"' }); // at-rule
+ * root.append({ selector: 'a' }); // rule
+ * rule.append({ prop: 'color', value: 'black' }); // declaration
+ * rule.append({ text: 'Comment' }) // comment
+ * A string containing the CSS of the new element can also be used. This
+ * approach is slower than the above shortcuts.
+ * root.append('a {}');
+ * root.first.append('color: black; z-index: 1');
+ * @param nodes New nodes.
+ * @returns This container for chaining.
+ */
+ append(...nodes: (Node | object | string)[]): this;
+ /**
+ * Insert newNode before oldNode within the container.
+ * @param oldNode Child or child's index.
+ * @returns This container for chaining.
+ */
+ insertBefore(oldNode: ChildNode | number, newNode: ChildNode | object | string): this;
+ /**
+ * Insert newNode after oldNode within the container.
+ * @param oldNode Child or child's index.
+ * @returns This container for chaining.
+ */
+ insertAfter(oldNode: ChildNode | number, newNode: ChildNode | object | string): this;
+ /**
+ * Removes the container from its parent and cleans the parent property in the
+ * container and its children.
+ * @returns This container for chaining.
+ */
+ remove(): this;
+ /**
+ * Removes child from the container and cleans the parent properties
+ * from the node and its children.
+ * @param child Child or child's index.
+ * @returns This container for chaining.
+ */
+ removeChild(child: ChildNode | number): this;
+ /**
+ * Removes all children from the container and cleans their parent
+ * properties.
+ * @returns This container for chaining.
+ */
+ removeAll(): this;
+ }
+ interface ContainerNewProps extends NodeNewProps {
+ /**
+ * Contains the container's children.
+ */
+ nodes?: ChildNode[];
+ raws?: ContainerRaws;
+ }
+ interface ContainerRaws extends NodeRaws {
+ indent?: string;
+ }
+ interface JsonContainer extends JsonNode {
+ /**
+ * Contains the container's children.
+ */
+ nodes?: ChildNode[];
+ /**
+ * @returns The container's first child.
+ */
+ first?: ChildNode;
+ /**
+ * @returns The container's last child.
+ */
+ last?: ChildNode;
+ }
+ /**
+ * Represents a CSS file and contains all its parsed nodes.
+ */
+ interface Root extends ContainerBase {
+ type: 'root';
+ /**
+ * Inherited from Container. Should always be undefined for a Root node.
+ */
+ parent: void;
+ /**
+ * @param overrides New properties to override in the clone.
+ * @returns A clone of this node. The node and its (cloned) children will
+ * have a clean parent and code style properties.
+ */
+ clone(overrides?: object): this;
+ /**
+ * @returns A Result instance representing the root's CSS.
+ */
+ toResult(options?: {
+ /**
+ * The path where you'll put the output CSS file. You should always
+ * set "to" to generate correct source maps.
+ */
+ to?: string;
+ map?: SourceMapOptions;
+ }): Result;
+ /**
+ * Removes child from the root node, and the parent properties of node and
+ * its children.
+ * @param child Child or child's index.
+ * @returns This root node for chaining.
+ */
+ removeChild(child: ChildNode | number): this;
+ }
+ interface RootNewProps extends ContainerNewProps {
+ }
+ interface JsonRoot extends JsonContainer {
+ }
+ /**
+ * Represents an at-rule. If it's followed in the CSS by a {} block, this
+ * node will have a nodes property representing its children.
+ */
+ interface AtRule extends ContainerBase {
+ type: 'atrule';
+ /**
+ * Returns the atrule's parent node.
+ */
+ parent: Container;
+ /**
+ * The identifier that immediately follows the @.
+ */
+ name: string;
+ /**
+ * These are the values that follow the at-rule's name, but precede any {}
+ * block. The spec refers to this area as the at-rule's "prelude".
+ */
+ params: string;
+ /**
+ * @param overrides New properties to override in the clone.
+ * @returns A clone of this node. The node and its (cloned) children will
+ * have a clean parent and code style properties.
+ */
+ clone(overrides?: object): this;
+ }
+ interface AtRuleNewProps extends ContainerNewProps {
+ /**
+ * The identifier that immediately follows the @.
+ */
+ name?: string;
+ /**
+ * These are the values that follow the at-rule's name, but precede any {}
+ * block. The spec refers to this area as the at-rule's "prelude".
+ */
+ params?: string | number;
+ raws?: AtRuleRaws;
+ }
+ interface AtRuleRaws extends NodeRaws {
+ params?: string;
+ }
+ interface JsonAtRule extends JsonContainer {
+ /**
+ * The identifier that immediately follows the @.
+ */
+ name?: string;
+ /**
+ * These are the values that follow the at-rule's name, but precede any {}
+ * block. The spec refers to this area as the at-rule's "prelude".
+ */
+ params?: string;
+ }
+ /**
+ * Represents a CSS rule: a selector followed by a declaration block.
+ */
+ interface Rule extends ContainerBase {
+ type: 'rule';
+ /**
+ * Returns the rule's parent node.
+ */
+ parent: Container;
+ /**
+ * The rule's full selector. If there are multiple comma-separated selectors,
+ * the entire group will be included.
+ */
+ selector: string;
+ /**
+ * An array containing the rule's individual selectors.
+ * Groups of selectors are split at commas.
+ */
+ selectors?: string[];
+ /**
+ * @param overrides New properties to override in the clone.
+ * @returns A clone of this node. The node and its (cloned) children will
+ * have a clean parent and code style properties.
+ */
+ clone(overrides?: object): this;
+ }
+ interface RuleNewProps extends ContainerNewProps {
+ /**
+ * The rule's full selector. If there are multiple comma-separated selectors,
+ * the entire group will be included.
+ */
+ selector?: string;
+ /**
+ * An array containing the rule's individual selectors. Groups of selectors
+ * are split at commas.
+ */
+ selectors?: string[];
+ raws?: RuleRaws;
+ }
+ interface RuleRaws extends ContainerRaws {
+ /**
+ * The rule's full selector. If there are multiple comma-separated selectors,
+ * the entire group will be included.
+ */
+ selector?: string;
+ }
+ interface JsonRule extends JsonContainer {
+ /**
+ * The rule's full selector. If there are multiple comma-separated selectors,
+ * the entire group will be included.
+ */
+ selector?: string;
+ /**
+ * An array containing the rule's individual selectors.
+ * Groups of selectors are split at commas.
+ */
+ selectors?: string[];
+ }
+ /**
+ * Represents a CSS declaration.
+ */
+ interface Declaration extends NodeBase {
+ type: 'decl';
+ /**
+ * Returns the declaration's parent node.
+ */
+ parent: Container;
+ /**
+ * The declaration's property name.
+ */
+ prop: string;
+ /**
+ * The declaration's value. This value will be cleaned of comments. If the
+ * source value contained comments, those comments will be available in the
+ * _value.raws property. If you have not changed the value, the result of
+ * decl.toString() will include the original raws value (comments and all).
+ */
+ value: string;
+ /**
+ * True if the declaration has an !important annotation.
+ */
+ important: boolean;
+ /**
+ * @param overrides New properties to override in the clone.
+ * @returns A clone of this node. The node and its (cloned) children will
+ * have a clean parent and code style properties.
+ */
+ clone(overrides?: object): this;
+ }
+ interface DeclarationNewProps {
+ /**
+ * The declaration's property name.
+ */
+ prop?: string;
+ /**
+ * The declaration's value. This value will be cleaned of comments. If the
+ * source value contained comments, those comments will be available in the
+ * _value.raws property. If you have not changed the value, the result of
+ * decl.toString() will include the original raws value (comments and all).
+ */
+ value?: string;
+ raws?: DeclarationRaws;
+ }
+ interface DeclarationRaws extends NodeRaws {
+ /**
+ * The declaration's value. This value will be cleaned of comments.
+ * If the source value contained comments, those comments will be
+ * available in the _value.raws property. If you have not changed the value, the result of
+ * decl.toString() will include the original raws value (comments and all).
+ */
+ value?: string;
+ }
+ interface JsonDeclaration extends JsonNode {
+ /**
+ * True if the declaration has an !important annotation.
+ */
+ important?: boolean;
+ }
+ /**
+ * Represents a comment between declarations or statements (rule and at-rules).
+ * Comments inside selectors, at-rule parameters, or declaration values will
+ * be stored in the Node#raws properties.
+ */
+ interface Comment extends NodeBase {
+ type: 'comment';
+ /**
+ * Returns the comment's parent node.
+ */
+ parent: Container;
+ /**
+ * The comment's text.
+ */
+ text: string;
+ /**
+ * @param overrides New properties to override in the clone.
+ * @returns A clone of this node. The node and its (cloned) children will
+ * have a clean parent and code style properties.
+ */
+ clone(overrides?: object): this;
+ }
+ interface CommentNewProps {
+ /**
+ * The comment's text.
+ */
+ text?: string;
+ }
+ interface JsonComment extends JsonNode {
+ }
+}
+export = postcss;
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/postcss.js b/node_modules/postcss-reporter/node_modules/postcss/lib/postcss.js
new file mode 100644
index 00000000..86eb7fe8
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/postcss.js
@@ -0,0 +1,292 @@
+'use strict';
+
+exports.__esModule = true;
+
+var _declaration = require('./declaration');
+
+var _declaration2 = _interopRequireDefault(_declaration);
+
+var _processor = require('./processor');
+
+var _processor2 = _interopRequireDefault(_processor);
+
+var _stringify = require('./stringify');
+
+var _stringify2 = _interopRequireDefault(_stringify);
+
+var _comment = require('./comment');
+
+var _comment2 = _interopRequireDefault(_comment);
+
+var _atRule = require('./at-rule');
+
+var _atRule2 = _interopRequireDefault(_atRule);
+
+var _vendor = require('./vendor');
+
+var _vendor2 = _interopRequireDefault(_vendor);
+
+var _parse = require('./parse');
+
+var _parse2 = _interopRequireDefault(_parse);
+
+var _list = require('./list');
+
+var _list2 = _interopRequireDefault(_list);
+
+var _rule = require('./rule');
+
+var _rule2 = _interopRequireDefault(_rule);
+
+var _root = require('./root');
+
+var _root2 = _interopRequireDefault(_root);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+/**
+ * Create a new {@link Processor} instance that will apply `plugins`
+ * as CSS processors.
+ *
+ * @param {Array.<Plugin|pluginFunction>|Processor} plugins - PostCSS
+ * plugins. See {@link Processor#use} for plugin format.
+ *
+ * @return {Processor} Processor to process multiple CSS
+ *
+ * @example
+ * import postcss from 'postcss';
+ *
+ * postcss(plugins).process(css, { from, to }).then(result => {
+ * console.log(result.css);
+ * });
+ *
+ * @namespace postcss
+ */
+function postcss() {
+ for (var _len = arguments.length, plugins = Array(_len), _key = 0; _key < _len; _key++) {
+ plugins[_key] = arguments[_key];
+ }
+
+ if (plugins.length === 1 && Array.isArray(plugins[0])) {
+ plugins = plugins[0];
+ }
+ return new _processor2.default(plugins);
+}
+
+/**
+ * Creates a PostCSS plugin with a standard API.
+ *
+ * The newly-wrapped function will provide both the name and PostCSS
+ * version of the plugin.
+ *
+ * ```js
+ * const processor = postcss([replace]);
+ * processor.plugins[0].postcssPlugin //=> 'postcss-replace'
+ * processor.plugins[0].postcssVersion //=> '5.1.0'
+ * ```
+ *
+ * The plugin function receives 2 arguments: {@link Root}
+ * and {@link Result} instance. The function should mutate the provided
+ * `Root` node. Alternatively, you can create a new `Root` node
+ * and override the `result.root` property.
+ *
+ * ```js
+ * const cleaner = postcss.plugin('postcss-cleaner', () => {
+ * return (root, result) => {
+ * result.root = postcss.root();
+ * };
+ * });
+ * ```
+ *
+ * As a convenience, plugins also expose a `process` method so that you can use
+ * them as standalone tools.
+ *
+ * ```js
+ * cleaner.process(css, processOpts, pluginOpts);
+ * // This is equivalent to:
+ * postcss([ cleaner(pluginOpts) ]).process(css, processOpts);
+ * ```
+ *
+ * Asynchronous plugins should return a `Promise` instance.
+ *
+ * ```js
+ * postcss.plugin('postcss-import', () => {
+ * return (root, result) => {
+ * return new Promise( (resolve, reject) => {
+ * fs.readFile('base.css', (base) => {
+ * root.prepend(base);
+ * resolve();
+ * });
+ * });
+ * };
+ * });
+ * ```
+ *
+ * Add warnings using the {@link Node#warn} method.
+ * Send data to other plugins using the {@link Result#messages} array.
+ *
+ * ```js
+ * postcss.plugin('postcss-caniuse-test', () => {
+ * return (root, result) => {
+ * root.walkDecls(decl => {
+ * if ( !caniuse.support(decl.prop) ) {
+ * decl.warn(result, 'Some browsers do not support ' + decl.prop);
+ * }
+ * });
+ * };
+ * });
+ * ```
+ *
+ * @param {string} name - PostCSS plugin name. Same as in `name`
+ * property in `package.json`. It will be saved
+ * in `plugin.postcssPlugin` property.
+ * @param {function} initializer - will receive plugin options
+ * and should return {@link pluginFunction}
+ *
+ * @return {Plugin} PostCSS plugin
+ */
+postcss.plugin = function plugin(name, initializer) {
+ var creator = function creator() {
+ var transformer = initializer.apply(undefined, arguments);
+ transformer.postcssPlugin = name;
+ transformer.postcssVersion = new _processor2.default().version;
+ return transformer;
+ };
+
+ var cache = void 0;
+ Object.defineProperty(creator, 'postcss', {
+ get: function get() {
+ if (!cache) cache = creator();
+ return cache;
+ }
+ });
+
+ creator.process = function (css, processOpts, pluginOpts) {
+ return postcss([creator(pluginOpts)]).process(css, processOpts);
+ };
+
+ return creator;
+};
+
+/**
+ * Default function to convert a node tree into a CSS string.
+ *
+ * @param {Node} node - start node for stringifing. Usually {@link Root}.
+ * @param {builder} builder - function to concatenate CSS from node’s parts
+ * or generate string and source map
+ *
+ * @return {void}
+ *
+ * @function
+ */
+postcss.stringify = _stringify2.default;
+
+/**
+ * Parses source css and returns a new {@link Root} node,
+ * which contains the source CSS nodes.
+ *
+ * @param {string|toString} css - string with input CSS or any object
+ * with toString() method, like a Buffer
+ * @param {processOptions} [opts] - options with only `from` and `map` keys
+ *
+ * @return {Root} PostCSS AST
+ *
+ * @example
+ * // Simple CSS concatenation with source map support
+ * const root1 = postcss.parse(css1, { from: file1 });
+ * const root2 = postcss.parse(css2, { from: file2 });
+ * root1.append(root2).toResult().css;
+ *
+ * @function
+ */
+postcss.parse = _parse2.default;
+
+/**
+ * @member {vendor} - Contains the {@link vendor} module.
+ *
+ * @example
+ * postcss.vendor.unprefixed('-moz-tab') //=> ['tab']
+ */
+postcss.vendor = _vendor2.default;
+
+/**
+ * @member {list} - Contains the {@link list} module.
+ *
+ * @example
+ * postcss.list.space('5px calc(10% + 5px)') //=> ['5px', 'calc(10% + 5px)']
+ */
+postcss.list = _list2.default;
+
+/**
+ * Creates a new {@link Comment} node.
+ *
+ * @param {object} [defaults] - properties for the new node.
+ *
+ * @return {Comment} new Comment node
+ *
+ * @example
+ * postcss.comment({ text: 'test' })
+ */
+postcss.comment = function (defaults) {
+ return new _comment2.default(defaults);
+};
+
+/**
+ * Creates a new {@link AtRule} node.
+ *
+ * @param {object} [defaults] - properties for the new node.
+ *
+ * @return {AtRule} new AtRule node
+ *
+ * @example
+ * postcss.atRule({ name: 'charset' }).toString() //=> "@charset"
+ */
+postcss.atRule = function (defaults) {
+ return new _atRule2.default(defaults);
+};
+
+/**
+ * Creates a new {@link Declaration} node.
+ *
+ * @param {object} [defaults] - properties for the new node.
+ *
+ * @return {Declaration} new Declaration node
+ *
+ * @example
+ * postcss.decl({ prop: 'color', value: 'red' }).toString() //=> "color: red"
+ */
+postcss.decl = function (defaults) {
+ return new _declaration2.default(defaults);
+};
+
+/**
+ * Creates a new {@link Rule} node.
+ *
+ * @param {object} [defaults] - properties for the new node.
+ *
+ * @return {Rule} new Rule node
+ *
+ * @example
+ * postcss.rule({ selector: 'a' }).toString() //=> "a {\n}"
+ */
+postcss.rule = function (defaults) {
+ return new _rule2.default(defaults);
+};
+
+/**
+ * Creates a new {@link Root} node.
+ *
+ * @param {object} [defaults] - properties for the new node.
+ *
+ * @return {Root} new Root node
+ *
+ * @example
+ * postcss.root({ after: '\n' }).toString() //=> "\n"
+ */
+postcss.root = function (defaults) {
+ return new _root2.default(defaults);
+};
+
+exports.default = postcss;
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInBvc3Rjc3MuZXM2Il0sIm5hbWVzIjpbInBvc3Rjc3MiLCJwbHVnaW5zIiwibGVuZ3RoIiwiQXJyYXkiLCJpc0FycmF5IiwiUHJvY2Vzc29yIiwicGx1Z2luIiwibmFtZSIsImluaXRpYWxpemVyIiwiY3JlYXRvciIsInRyYW5zZm9ybWVyIiwicG9zdGNzc1BsdWdpbiIsInBvc3Rjc3NWZXJzaW9uIiwidmVyc2lvbiIsImNhY2hlIiwiT2JqZWN0IiwiZGVmaW5lUHJvcGVydHkiLCJnZXQiLCJwcm9jZXNzIiwiY3NzIiwicHJvY2Vzc09wdHMiLCJwbHVnaW5PcHRzIiwic3RyaW5naWZ5IiwicGFyc2UiLCJ2ZW5kb3IiLCJsaXN0IiwiY29tbWVudCIsIkNvbW1lbnQiLCJkZWZhdWx0cyIsImF0UnVsZSIsIkF0UnVsZSIsImRlY2wiLCJEZWNsYXJhdGlvbiIsInJ1bGUiLCJSdWxlIiwicm9vdCIsIlJvb3QiXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7OztBQUNBOzs7O0FBQ0E7Ozs7QUFDQTs7Ozs7O0FBRUE7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQSxTQUFTQSxPQUFULEdBQTZCO0FBQUEsb0NBQVRDLE9BQVM7QUFBVEEsV0FBUztBQUFBOztBQUN6QixNQUFLQSxRQUFRQyxNQUFSLEtBQW1CLENBQW5CLElBQXdCQyxNQUFNQyxPQUFOLENBQWNILFFBQVEsQ0FBUixDQUFkLENBQTdCLEVBQXlEO0FBQ3JEQSxjQUFVQSxRQUFRLENBQVIsQ0FBVjtBQUNIO0FBQ0QsU0FBTyxJQUFJSSxtQkFBSixDQUFjSixPQUFkLENBQVA7QUFDSDs7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBd0VBRCxRQUFRTSxNQUFSLEdBQWlCLFNBQVNBLE1BQVQsQ0FBZ0JDLElBQWhCLEVBQXNCQyxXQUF0QixFQUFtQztBQUNoRCxNQUFJQyxVQUFVLFNBQVZBLE9BQVUsR0FBbUI7QUFDN0IsUUFBSUMsY0FBY0YsdUNBQWxCO0FBQ0FFLGdCQUFZQyxhQUFaLEdBQTZCSixJQUE3QjtBQUNBRyxnQkFBWUUsY0FBWixHQUE4QixJQUFJUCxtQkFBSixFQUFELENBQWtCUSxPQUEvQztBQUNBLFdBQU9ILFdBQVA7QUFDSCxHQUxEOztBQU9BLE1BQUlJLGNBQUo7QUFDQUMsU0FBT0MsY0FBUCxDQUFzQlAsT0FBdEIsRUFBK0IsU0FBL0IsRUFBMEM7QUFDdENRLE9BRHNDLGlCQUNoQztBQUNGLFVBQUssQ0FBQ0gsS0FBTixFQUFjQSxRQUFRTCxTQUFSO0FBQ2QsYUFBT0ssS0FBUDtBQUNIO0FBSnFDLEdBQTFDOztBQU9BTCxVQUFRUyxPQUFSLEdBQWtCLFVBQVVDLEdBQVYsRUFBZUMsV0FBZixFQUE0QkMsVUFBNUIsRUFBd0M7QUFDdEQsV0FBT3JCLFFBQVEsQ0FBRVMsUUFBUVksVUFBUixDQUFGLENBQVIsRUFBaUNILE9BQWpDLENBQXlDQyxHQUF6QyxFQUE4Q0MsV0FBOUMsQ0FBUDtBQUNILEdBRkQ7O0FBSUEsU0FBT1gsT0FBUDtBQUNILENBckJEOztBQXVCQTs7Ozs7Ozs7Ozs7QUFXQVQsUUFBUXNCLFNBQVIsR0FBb0JBLG1CQUFwQjs7QUFFQTs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBa0JBdEIsUUFBUXVCLEtBQVIsR0FBZ0JBLGVBQWhCOztBQUVBOzs7Ozs7QUFNQXZCLFFBQVF3QixNQUFSLEdBQWlCQSxnQkFBakI7O0FBRUE7Ozs7OztBQU1BeEIsUUFBUXlCLElBQVIsR0FBZUEsY0FBZjs7QUFFQTs7Ozs7Ozs7OztBQVVBekIsUUFBUTBCLE9BQVIsR0FBa0I7QUFBQSxTQUFZLElBQUlDLGlCQUFKLENBQVlDLFFBQVosQ0FBWjtBQUFBLENBQWxCOztBQUVBOzs7Ozs7Ozs7O0FBVUE1QixRQUFRNkIsTUFBUixHQUFpQjtBQUFBLFNBQVksSUFBSUMsZ0JBQUosQ0FBV0YsUUFBWCxDQUFaO0FBQUEsQ0FBakI7O0FBRUE7Ozs7Ozs7Ozs7QUFVQTVCLFFBQVErQixJQUFSLEdBQWU7QUFBQSxTQUFZLElBQUlDLHFCQUFKLENBQWdCSixRQUFoQixDQUFaO0FBQUEsQ0FBZjs7QUFFQTs7Ozs7Ozs7OztBQVVBNUIsUUFBUWlDLElBQVIsR0FBZTtBQUFBLFNBQVksSUFBSUMsY0FBSixDQUFTTixRQUFULENBQVo7QUFBQSxDQUFmOztBQUVBOzs7Ozs7Ozs7O0FBVUE1QixRQUFRbUMsSUFBUixHQUFlO0FBQUEsU0FBWSxJQUFJQyxjQUFKLENBQVNSLFFBQVQsQ0FBWjtBQUFBLENBQWY7O2tCQUVlNUIsTyIsImZpbGUiOiJwb3N0Y3NzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IERlY2xhcmF0aW9uIGZyb20gJy4vZGVjbGFyYXRpb24nO1xuaW1wb3J0IFByb2Nlc3NvciAgIGZyb20gJy4vcHJvY2Vzc29yJztcbmltcG9ydCBzdHJpbmdpZnkgICBmcm9tICcuL3N0cmluZ2lmeSc7XG5pbXBvcnQgQ29tbWVudCAgICAgZnJvbSAnLi9jb21tZW50JztcbmltcG9ydCBBdFJ1bGUgICAgICBmcm9tICcuL2F0LXJ1bGUnO1xuaW1wb3J0IHZlbmRvciAgICAgIGZyb20gJy4vdmVuZG9yJztcbmltcG9ydCBwYXJzZSAgICAgICBmcm9tICcuL3BhcnNlJztcbmltcG9ydCBsaXN0ICAgICAgICBmcm9tICcuL2xpc3QnO1xuaW1wb3J0IFJ1bGUgICAgICAgIGZyb20gJy4vcnVsZSc7XG5pbXBvcnQgUm9vdCAgICAgICAgZnJvbSAnLi9yb290JztcblxuLyoqXG4gKiBDcmVhdGUgYSBuZXcge0BsaW5rIFByb2Nlc3Nvcn0gaW5zdGFuY2UgdGhhdCB3aWxsIGFwcGx5IGBwbHVnaW5zYFxuICogYXMgQ1NTIHByb2Nlc3NvcnMuXG4gKlxuICogQHBhcmFtIHtBcnJheS48UGx1Z2lufHBsdWdpbkZ1bmN0aW9uPnxQcm9jZXNzb3J9IHBsdWdpbnMgLSBQb3N0Q1NTXG4gKiAgICAgICAgcGx1Z2lucy4gU2VlIHtAbGluayBQcm9jZXNzb3IjdXNlfSBmb3IgcGx1Z2luIGZvcm1hdC5cbiAqXG4gKiBAcmV0dXJuIHtQcm9jZXNzb3J9IFByb2Nlc3NvciB0byBwcm9jZXNzIG11bHRpcGxlIENTU1xuICpcbiAqIEBleGFtcGxlXG4gKiBpbXBvcnQgcG9zdGNzcyBmcm9tICdwb3N0Y3NzJztcbiAqXG4gKiBwb3N0Y3NzKHBsdWdpbnMpLnByb2Nlc3MoY3NzLCB7IGZyb20sIHRvIH0pLnRoZW4ocmVzdWx0ID0+IHtcbiAqICAgY29uc29sZS5sb2cocmVzdWx0LmNzcyk7XG4gKiB9KTtcbiAqXG4gKiBAbmFtZXNwYWNlIHBvc3Rjc3NcbiAqL1xuZnVuY3Rpb24gcG9zdGNzcyguLi5wbHVnaW5zKSB7XG4gICAgaWYgKCBwbHVnaW5zLmxlbmd0aCA9PT0gMSAmJiBBcnJheS5pc0FycmF5KHBsdWdpbnNbMF0pICkge1xuICAgICAgICBwbHVnaW5zID0gcGx1Z2luc1swXTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBQcm9jZXNzb3IocGx1Z2lucyk7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIFBvc3RDU1MgcGx1Z2luIHdpdGggYSBzdGFuZGFyZCBBUEkuXG4gKlxuICogVGhlIG5ld2x5LXdyYXBwZWQgZnVuY3Rpb24gd2lsbCBwcm92aWRlIGJvdGggdGhlIG5hbWUgYW5kIFBvc3RDU1NcbiAqIHZlcnNpb24gb2YgdGhlIHBsdWdpbi5cbiAqXG4gKiBgYGBqc1xuICogIGNvbnN0IHByb2Nlc3NvciA9IHBvc3Rjc3MoW3JlcGxhY2VdKTtcbiAqICBwcm9jZXNzb3IucGx1Z2luc1swXS5wb3N0Y3NzUGx1Z2luICAvLz0+ICdwb3N0Y3NzLXJlcGxhY2UnXG4gKiAgcHJvY2Vzc29yLnBsdWdpbnNbMF0ucG9zdGNzc1ZlcnNpb24gLy89PiAnNS4xLjAnXG4gKiBgYGBcbiAqXG4gKiBUaGUgcGx1Z2luIGZ1bmN0aW9uIHJlY2VpdmVzIDIgYXJndW1lbnRzOiB7QGxpbmsgUm9vdH1cbiAqIGFuZCB7QGxpbmsgUmVzdWx0fSBpbnN0YW5jZS4gVGhlIGZ1bmN0aW9uIHNob3VsZCBtdXRhdGUgdGhlIHByb3ZpZGVkXG4gKiBgUm9vdGAgbm9kZS4gQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBjcmVhdGUgYSBuZXcgYFJvb3RgIG5vZGVcbiAqIGFuZCBvdmVycmlkZSB0aGUgYHJlc3VsdC5yb290YCBwcm9wZXJ0eS5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgY2xlYW5lciA9IHBvc3Rjc3MucGx1Z2luKCdwb3N0Y3NzLWNsZWFuZXInLCAoKSA9PiB7XG4gKiAgIHJldHVybiAocm9vdCwgcmVzdWx0KSA9PiB7XG4gKiAgICAgcmVzdWx0LnJvb3QgPSBwb3N0Y3NzLnJvb3QoKTtcbiAqICAgfTtcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQXMgYSBjb252ZW5pZW5jZSwgcGx1Z2lucyBhbHNvIGV4cG9zZSBhIGBwcm9jZXNzYCBtZXRob2Qgc28gdGhhdCB5b3UgY2FuIHVzZVxuICogdGhlbSBhcyBzdGFuZGFsb25lIHRvb2xzLlxuICpcbiAqIGBgYGpzXG4gKiBjbGVhbmVyLnByb2Nlc3MoY3NzLCBwcm9jZXNzT3B0cywgcGx1Z2luT3B0cyk7XG4gKiAvLyBUaGlzIGlzIGVxdWl2YWxlbnQgdG86XG4gKiBwb3N0Y3NzKFsgY2xlYW5lcihwbHVnaW5PcHRzKSBdKS5wcm9jZXNzKGNzcywgcHJvY2Vzc09wdHMpO1xuICogYGBgXG4gKlxuICogQXN5bmNocm9ub3VzIHBsdWdpbnMgc2hvdWxkIHJldHVybiBhIGBQcm9taXNlYCBpbnN0YW5jZS5cbiAqXG4gKiBgYGBqc1xuICogcG9zdGNzcy5wbHVnaW4oJ3Bvc3Rjc3MtaW1wb3J0JywgKCkgPT4ge1xuICogICByZXR1cm4gKHJvb3QsIHJlc3VsdCkgPT4ge1xuICogICAgIHJldHVybiBuZXcgUHJvbWlzZSggKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICogICAgICAgZnMucmVhZEZpbGUoJ2Jhc2UuY3NzJywgKGJhc2UpID0+IHtcbiAqICAgICAgICAgcm9vdC5wcmVwZW5kKGJhc2UpO1xuICogICAgICAgICByZXNvbHZlKCk7XG4gKiAgICAgICB9KTtcbiAqICAgICB9KTtcbiAqICAgfTtcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQWRkIHdhcm5pbmdzIHVzaW5nIHRoZSB7QGxpbmsgTm9kZSN3YXJufSBtZXRob2QuXG4gKiBTZW5kIGRhdGEgdG8gb3RoZXIgcGx1Z2lucyB1c2luZyB0aGUge0BsaW5rIFJlc3VsdCNtZXNzYWdlc30gYXJyYXkuXG4gKlxuICogYGBganNcbiAqIHBvc3Rjc3MucGx1Z2luKCdwb3N0Y3NzLWNhbml1c2UtdGVzdCcsICgpID0+IHtcbiAqICAgcmV0dXJuIChyb290LCByZXN1bHQpID0+IHtcbiAqICAgICByb290LndhbGtEZWNscyhkZWNsID0+IHtcbiAqICAgICAgIGlmICggIWNhbml1c2Uuc3VwcG9ydChkZWNsLnByb3ApICkge1xuICogICAgICAgICBkZWNsLndhcm4ocmVzdWx0LCAnU29tZSBicm93c2VycyBkbyBub3Qgc3VwcG9ydCAnICsgZGVjbC5wcm9wKTtcbiAqICAgICAgIH1cbiAqICAgICB9KTtcbiAqICAgfTtcbiAqIH0pO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWUgICAgICAgICAgLSBQb3N0Q1NTIHBsdWdpbiBuYW1lLiBTYW1lIGFzIGluIGBuYW1lYFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eSBpbiBgcGFja2FnZS5qc29uYC4gSXQgd2lsbCBiZSBzYXZlZFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiBgcGx1Z2luLnBvc3Rjc3NQbHVnaW5gIHByb3BlcnR5LlxuICogQHBhcmFtIHtmdW5jdGlvbn0gaW5pdGlhbGl6ZXIgLSB3aWxsIHJlY2VpdmUgcGx1Z2luIG9wdGlvbnNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIHNob3VsZCByZXR1cm4ge0BsaW5rIHBsdWdpbkZ1bmN0aW9ufVxuICpcbiAqIEByZXR1cm4ge1BsdWdpbn0gUG9zdENTUyBwbHVnaW5cbiAqL1xucG9zdGNzcy5wbHVnaW4gPSBmdW5jdGlvbiBwbHVnaW4obmFtZSwgaW5pdGlhbGl6ZXIpIHtcbiAgICBsZXQgY3JlYXRvciA9IGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgIGxldCB0cmFuc2Zvcm1lciA9IGluaXRpYWxpemVyKC4uLmFyZ3MpO1xuICAgICAgICB0cmFuc2Zvcm1lci5wb3N0Y3NzUGx1Z2luICA9IG5hbWU7XG4gICAgICAgIHRyYW5zZm9ybWVyLnBvc3Rjc3NWZXJzaW9uID0gKG5ldyBQcm9jZXNzb3IoKSkudmVyc2lvbjtcbiAgICAgICAgcmV0dXJuIHRyYW5zZm9ybWVyO1xuICAgIH07XG5cbiAgICBsZXQgY2FjaGU7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNyZWF0b3IsICdwb3N0Y3NzJywge1xuICAgICAgICBnZXQoKSB7XG4gICAgICAgICAgICBpZiAoICFjYWNoZSApIGNhY2hlID0gY3JlYXRvcigpO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBjcmVhdG9yLnByb2Nlc3MgPSBmdW5jdGlvbiAoY3NzLCBwcm9jZXNzT3B0cywgcGx1Z2luT3B0cykge1xuICAgICAgICByZXR1cm4gcG9zdGNzcyhbIGNyZWF0b3IocGx1Z2luT3B0cykgXSkucHJvY2Vzcyhjc3MsIHByb2Nlc3NPcHRzKTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIGNyZWF0b3I7XG59O1xuXG4vKipcbiAqIERlZmF1bHQgZnVuY3Rpb24gdG8gY29udmVydCBhIG5vZGUgdHJlZSBpbnRvIGEgQ1NTIHN0cmluZy5cbiAqXG4gKiBAcGFyYW0ge05vZGV9IG5vZGUgICAgICAgLSBzdGFydCBub2RlIGZvciBzdHJpbmdpZmluZy4gVXN1YWxseSB7QGxpbmsgUm9vdH0uXG4gKiBAcGFyYW0ge2J1aWxkZXJ9IGJ1aWxkZXIgLSBmdW5jdGlvbiB0byBjb25jYXRlbmF0ZSBDU1MgZnJvbSBub2Rl4oCZcyBwYXJ0c1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgZ2VuZXJhdGUgc3RyaW5nIGFuZCBzb3VyY2UgbWFwXG4gKlxuICogQHJldHVybiB7dm9pZH1cbiAqXG4gKiBAZnVuY3Rpb25cbiAqL1xucG9zdGNzcy5zdHJpbmdpZnkgPSBzdHJpbmdpZnk7XG5cbi8qKlxuICogUGFyc2VzIHNvdXJjZSBjc3MgYW5kIHJldHVybnMgYSBuZXcge0BsaW5rIFJvb3R9IG5vZGUsXG4gKiB3aGljaCBjb250YWlucyB0aGUgc291cmNlIENTUyBub2Rlcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3x0b1N0cmluZ30gY3NzICAgLSBzdHJpbmcgd2l0aCBpbnB1dCBDU1Mgb3IgYW55IG9iamVjdFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aCB0b1N0cmluZygpIG1ldGhvZCwgbGlrZSBhIEJ1ZmZlclxuICogQHBhcmFtIHtwcm9jZXNzT3B0aW9uc30gW29wdHNdIC0gb3B0aW9ucyB3aXRoIG9ubHkgYGZyb21gIGFuZCBgbWFwYCBrZXlzXG4gKlxuICogQHJldHVybiB7Um9vdH0gUG9zdENTUyBBU1RcbiAqXG4gKiBAZXhhbXBsZVxuICogLy8gU2ltcGxlIENTUyBjb25jYXRlbmF0aW9uIHdpdGggc291cmNlIG1hcCBzdXBwb3J0XG4gKiBjb25zdCByb290MSA9IHBvc3Rjc3MucGFyc2UoY3NzMSwgeyBmcm9tOiBmaWxlMSB9KTtcbiAqIGNvbnN0IHJvb3QyID0gcG9zdGNzcy5wYXJzZShjc3MyLCB7IGZyb206IGZpbGUyIH0pO1xuICogcm9vdDEuYXBwZW5kKHJvb3QyKS50b1Jlc3VsdCgpLmNzcztcbiAqXG4gKiBAZnVuY3Rpb25cbiAqL1xucG9zdGNzcy5wYXJzZSA9IHBhcnNlO1xuXG4vKipcbiAqIEBtZW1iZXIge3ZlbmRvcn0gLSBDb250YWlucyB0aGUge0BsaW5rIHZlbmRvcn0gbW9kdWxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBwb3N0Y3NzLnZlbmRvci51bnByZWZpeGVkKCctbW96LXRhYicpIC8vPT4gWyd0YWInXVxuICovXG5wb3N0Y3NzLnZlbmRvciA9IHZlbmRvcjtcblxuLyoqXG4gKiBAbWVtYmVyIHtsaXN0fSAtIENvbnRhaW5zIHRoZSB7QGxpbmsgbGlzdH0gbW9kdWxlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBwb3N0Y3NzLmxpc3Quc3BhY2UoJzVweCBjYWxjKDEwJSArIDVweCknKSAvLz0+IFsnNXB4JywgJ2NhbGMoMTAlICsgNXB4KSddXG4gKi9cbnBvc3Rjc3MubGlzdCA9IGxpc3Q7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB7QGxpbmsgQ29tbWVudH0gbm9kZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gW2RlZmF1bHRzXSAtIHByb3BlcnRpZXMgZm9yIHRoZSBuZXcgbm9kZS5cbiAqXG4gKiBAcmV0dXJuIHtDb21tZW50fSBuZXcgQ29tbWVudCBub2RlXG4gKlxuICogQGV4YW1wbGVcbiAqIHBvc3Rjc3MuY29tbWVudCh7IHRleHQ6ICd0ZXN0JyB9KVxuICovXG5wb3N0Y3NzLmNvbW1lbnQgPSBkZWZhdWx0cyA9PiBuZXcgQ29tbWVudChkZWZhdWx0cyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB7QGxpbmsgQXRSdWxlfSBub2RlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBbZGVmYXVsdHNdIC0gcHJvcGVydGllcyBmb3IgdGhlIG5ldyBub2RlLlxuICpcbiAqIEByZXR1cm4ge0F0UnVsZX0gbmV3IEF0UnVsZSBub2RlXG4gKlxuICogQGV4YW1wbGVcbiAqIHBvc3Rjc3MuYXRSdWxlKHsgbmFtZTogJ2NoYXJzZXQnIH0pLnRvU3RyaW5nKCkgLy89PiBcIkBjaGFyc2V0XCJcbiAqL1xucG9zdGNzcy5hdFJ1bGUgPSBkZWZhdWx0cyA9PiBuZXcgQXRSdWxlKGRlZmF1bHRzKTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IHtAbGluayBEZWNsYXJhdGlvbn0gbm9kZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gW2RlZmF1bHRzXSAtIHByb3BlcnRpZXMgZm9yIHRoZSBuZXcgbm9kZS5cbiAqXG4gKiBAcmV0dXJuIHtEZWNsYXJhdGlvbn0gbmV3IERlY2xhcmF0aW9uIG5vZGVcbiAqXG4gKiBAZXhhbXBsZVxuICogcG9zdGNzcy5kZWNsKHsgcHJvcDogJ2NvbG9yJywgdmFsdWU6ICdyZWQnIH0pLnRvU3RyaW5nKCkgLy89PiBcImNvbG9yOiByZWRcIlxuICovXG5wb3N0Y3NzLmRlY2wgPSBkZWZhdWx0cyA9PiBuZXcgRGVjbGFyYXRpb24oZGVmYXVsdHMpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcge0BsaW5rIFJ1bGV9IG5vZGUuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IFtkZWZhdWx0c10gLSBwcm9wZXJ0aWVzIGZvciB0aGUgbmV3IG5vZGUuXG4gKlxuICogQHJldHVybiB7UnVsZX0gbmV3IFJ1bGUgbm9kZVxuICpcbiAqIEBleGFtcGxlXG4gKiBwb3N0Y3NzLnJ1bGUoeyBzZWxlY3RvcjogJ2EnIH0pLnRvU3RyaW5nKCkgLy89PiBcImEge1xcbn1cIlxuICovXG5wb3N0Y3NzLnJ1bGUgPSBkZWZhdWx0cyA9PiBuZXcgUnVsZShkZWZhdWx0cyk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyB7QGxpbmsgUm9vdH0gbm9kZS5cbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gW2RlZmF1bHRzXSAtIHByb3BlcnRpZXMgZm9yIHRoZSBuZXcgbm9kZS5cbiAqXG4gKiBAcmV0dXJuIHtSb290fSBuZXcgUm9vdCBub2RlXG4gKlxuICogQGV4YW1wbGVcbiAqIHBvc3Rjc3Mucm9vdCh7IGFmdGVyOiAnXFxuJyB9KS50b1N0cmluZygpIC8vPT4gXCJcXG5cIlxuICovXG5wb3N0Y3NzLnJvb3QgPSBkZWZhdWx0cyA9PiBuZXcgUm9vdChkZWZhdWx0cyk7XG5cbmV4cG9ydCBkZWZhdWx0IHBvc3Rjc3M7XG4iXX0=
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/previous-map.js b/node_modules/postcss-reporter/node_modules/postcss/lib/previous-map.js
new file mode 100644
index 00000000..e222df9a
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/previous-map.js
@@ -0,0 +1,170 @@
+'use strict';
+
+exports.__esModule = true;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _sourceMap = require('source-map');
+
+var _sourceMap2 = _interopRequireDefault(_sourceMap);
+
+var _path = require('path');
+
+var _path2 = _interopRequireDefault(_path);
+
+var _fs = require('fs');
+
+var _fs2 = _interopRequireDefault(_fs);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function fromBase64(str) {
+ if (Buffer) {
+ if (Buffer.from && Buffer.from !== Uint8Array.from) {
+ return Buffer.from(str, 'base64').toString();
+ } else {
+ return new Buffer(str, 'base64').toString();
+ }
+ } else {
+ return window.atob(str);
+ }
+}
+
+/**
+ * Source map information from input CSS.
+ * For example, source map after Sass compiler.
+ *
+ * This class will automatically find source map in input CSS or in file system
+ * near input file (according `from` option).
+ *
+ * @example
+ * const root = postcss.parse(css, { from: 'a.sass.css' });
+ * root.input.map //=> PreviousMap
+ */
+
+var PreviousMap = function () {
+
+ /**
+ * @param {string} css - input CSS source
+ * @param {processOptions} [opts] - {@link Processor#process} options
+ */
+ function PreviousMap(css, opts) {
+ _classCallCheck(this, PreviousMap);
+
+ this.loadAnnotation(css);
+ /**
+ * @member {boolean} - Was source map inlined by data-uri to input CSS.
+ */
+ this.inline = this.startWith(this.annotation, 'data:');
+
+ var prev = opts.map ? opts.map.prev : undefined;
+ var text = this.loadMap(opts.from, prev);
+ if (text) this.text = text;
+ }
+
+ /**
+ * Create a instance of `SourceMapGenerator` class
+ * from the `source-map` library to work with source map information.
+ *
+ * It is lazy method, so it will create object only on first call
+ * and then it will use cache.
+ *
+ * @return {SourceMapGenerator} object with source map information
+ */
+
+
+ PreviousMap.prototype.consumer = function consumer() {
+ if (!this.consumerCache) {
+ this.consumerCache = new _sourceMap2.default.SourceMapConsumer(this.text);
+ }
+ return this.consumerCache;
+ };
+
+ /**
+ * Does source map contains `sourcesContent` with input source text.
+ *
+ * @return {boolean} Is `sourcesContent` present
+ */
+
+
+ PreviousMap.prototype.withContent = function withContent() {
+ return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);
+ };
+
+ PreviousMap.prototype.startWith = function startWith(string, start) {
+ if (!string) return false;
+ return string.substr(0, start.length) === start;
+ };
+
+ PreviousMap.prototype.loadAnnotation = function loadAnnotation(css) {
+ var match = css.match(/\/\*\s*# sourceMappingURL=(.*)\s*\*\//);
+ if (match) this.annotation = match[1].trim();
+ };
+
+ PreviousMap.prototype.decodeInline = function decodeInline(text) {
+ // data:application/json;charset=utf-8;base64,
+ // data:application/json;charset=utf8;base64,
+ // data:application/json;base64,
+ var baseUri = /^data:application\/json;(?:charset=utf-?8;)?base64,/;
+ var uri = 'data:application/json,';
+
+ if (this.startWith(text, uri)) {
+ return decodeURIComponent(text.substr(uri.length));
+ } else if (baseUri.test(text)) {
+ return fromBase64(text.substr(RegExp.lastMatch.length));
+ } else {
+ var encoding = text.match(/data:application\/json;([^,]+),/)[1];
+ throw new Error('Unsupported source map encoding ' + encoding);
+ }
+ };
+
+ PreviousMap.prototype.loadMap = function loadMap(file, prev) {
+ if (prev === false) return false;
+
+ if (prev) {
+ if (typeof prev === 'string') {
+ return prev;
+ } else if (typeof prev === 'function') {
+ var prevPath = prev(file);
+ if (prevPath && _fs2.default.existsSync && _fs2.default.existsSync(prevPath)) {
+ return _fs2.default.readFileSync(prevPath, 'utf-8').toString().trim();
+ } else {
+ throw new Error('Unable to load previous source map: ' + prevPath.toString());
+ }
+ } else if (prev instanceof _sourceMap2.default.SourceMapConsumer) {
+ return _sourceMap2.default.SourceMapGenerator.fromSourceMap(prev).toString();
+ } else if (prev instanceof _sourceMap2.default.SourceMapGenerator) {
+ return prev.toString();
+ } else if (this.isMap(prev)) {
+ return JSON.stringify(prev);
+ } else {
+ throw new Error('Unsupported previous source map format: ' + prev.toString());
+ }
+ } else if (this.inline) {
+ return this.decodeInline(this.annotation);
+ } else if (this.annotation) {
+ var map = this.annotation;
+ if (file) map = _path2.default.join(_path2.default.dirname(file), map);
+
+ this.root = _path2.default.dirname(map);
+ if (_fs2.default.existsSync && _fs2.default.existsSync(map)) {
+ return _fs2.default.readFileSync(map, 'utf-8').toString().trim();
+ } else {
+ return false;
+ }
+ }
+ };
+
+ PreviousMap.prototype.isMap = function isMap(map) {
+ if ((typeof map === 'undefined' ? 'undefined' : _typeof(map)) !== 'object') return false;
+ return typeof map.mappings === 'string' || typeof map._mappings === 'string';
+ };
+
+ return PreviousMap;
+}();
+
+exports.default = PreviousMap;
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInByZXZpb3VzLW1hcC5lczYiXSwibmFtZXMiOlsiZnJvbUJhc2U2NCIsInN0ciIsIkJ1ZmZlciIsImZyb20iLCJVaW50OEFycmF5IiwidG9TdHJpbmciLCJ3aW5kb3ciLCJhdG9iIiwiUHJldmlvdXNNYXAiLCJjc3MiLCJvcHRzIiwibG9hZEFubm90YXRpb24iLCJpbmxpbmUiLCJzdGFydFdpdGgiLCJhbm5vdGF0aW9uIiwicHJldiIsIm1hcCIsInVuZGVmaW5lZCIsInRleHQiLCJsb2FkTWFwIiwiY29uc3VtZXIiLCJjb25zdW1lckNhY2hlIiwibW96aWxsYSIsIlNvdXJjZU1hcENvbnN1bWVyIiwid2l0aENvbnRlbnQiLCJzb3VyY2VzQ29udGVudCIsImxlbmd0aCIsInN0cmluZyIsInN0YXJ0Iiwic3Vic3RyIiwibWF0Y2giLCJ0cmltIiwiZGVjb2RlSW5saW5lIiwiYmFzZVVyaSIsInVyaSIsImRlY29kZVVSSUNvbXBvbmVudCIsInRlc3QiLCJSZWdFeHAiLCJsYXN0TWF0Y2giLCJlbmNvZGluZyIsIkVycm9yIiwiZmlsZSIsInByZXZQYXRoIiwiZnMiLCJleGlzdHNTeW5jIiwicmVhZEZpbGVTeW5jIiwiU291cmNlTWFwR2VuZXJhdG9yIiwiZnJvbVNvdXJjZU1hcCIsImlzTWFwIiwiSlNPTiIsInN0cmluZ2lmeSIsInBhdGgiLCJqb2luIiwiZGlybmFtZSIsInJvb3QiLCJtYXBwaW5ncyIsIl9tYXBwaW5ncyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7QUFDQTs7OztBQUNBOzs7Ozs7OztBQUVBLFNBQVNBLFVBQVQsQ0FBb0JDLEdBQXBCLEVBQXlCO0FBQ3JCLFFBQUtDLE1BQUwsRUFBYztBQUNWLFlBQUtBLE9BQU9DLElBQVAsSUFBZUQsT0FBT0MsSUFBUCxLQUFnQkMsV0FBV0QsSUFBL0MsRUFBc0Q7QUFDbEQsbUJBQU9ELE9BQU9DLElBQVAsQ0FBWUYsR0FBWixFQUFpQixRQUFqQixFQUEyQkksUUFBM0IsRUFBUDtBQUNILFNBRkQsTUFF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LGFBQUdDLFVBQUgsSUFBaUJELGFBQUdDLFVBQUgsQ0FBYzVCLEdBQWQsQ0FBdEIsRUFBMkM7QUFDdkMsdUJBQU8yQixhQUFHRSxZQUFILENBQWdCN0IsR0FBaEIsRUFBcUIsT0FBckIsRUFBOEJYLFFBQTlCLEdBQXlDMEIsSUFBekMsRUFBUDtBQUNILGFBRkQsTUFFTztBQUNILHVCQUFPLEtBQVA7QUFDSDtBQUNKO0FBQ0osSzs7MEJBRURpQixLLGtCQUFNaEMsRyxFQUFLO0FBQ1AsWUFBSyxRQUFPQSxHQUFQLHlDQUFPQSxHQUFQLE9BQWUsUUFBcEIsRUFBK0IsT0FBTyxLQUFQO0FBQy9CLGVBQU8sT0FBT0EsSUFBSXVDLFFBQVgsS0FBd0IsUUFBeEIsSUFDQSxPQUFPdkMsSUFBSXdDLFNBQVgsS0FBeUIsUUFEaEM7QUFFSCxLOzs7OztrQkFHVWhELFciLCJmaWxlIjoicHJldmlvdXMtbWFwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG1vemlsbGEgIGZyb20gJ3NvdXJjZS1tYXAnO1xuaW1wb3J0IHBhdGggICAgIGZyb20gJ3BhdGgnO1xuaW1wb3J0IGZzICAgICAgIGZyb20gJ2ZzJztcblxuZnVuY3Rpb24gZnJvbUJhc2U2NChzdHIpIHtcbiAgICBpZiAoIEJ1ZmZlciApIHtcbiAgICAgICAgaWYgKCBCdWZmZXIuZnJvbSAmJiBCdWZmZXIuZnJvbSAhPT0gVWludDhBcnJheS5mcm9tICkge1xuICAgICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHN0ciwgJ2Jhc2U2NCcpLnRvU3RyaW5nKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IEJ1ZmZlcihzdHIsICdiYXNlNjQnKS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHdpbmRvdy5hdG9iKHN0cik7XG4gICAgfVxufVxuXG4vKipcbiAqIFNvdXJjZSBtYXAgaW5mb3JtYXRpb24gZnJvbSBpbnB1dCBDU1MuXG4gKiBGb3IgZXhhbXBsZSwgc291cmNlIG1hcCBhZnRlciBTYXNzIGNvbXBpbGVyLlxuICpcbiAqIFRoaXMgY2xhc3Mgd2lsbCBhdXRvbWF0aWNhbGx5IGZpbmQgc291cmNlIG1hcCBpbiBpbnB1dCBDU1Mgb3IgaW4gZmlsZSBzeXN0ZW1cbiAqIG5lYXIgaW5wdXQgZmlsZSAoYWNjb3JkaW5nIGBmcm9tYCBvcHRpb24pLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZShjc3MsIHsgZnJvbTogJ2Euc2Fzcy5jc3MnIH0pO1xuICogcm9vdC5pbnB1dC5tYXAgLy89PiBQcmV2aW91c01hcFxuICovXG5jbGFzcyBQcmV2aW91c01hcCB7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gICAgICAgICBjc3MgICAgLSBpbnB1dCBDU1Mgc291cmNlXG4gICAgICogQHBhcmFtIHtwcm9jZXNzT3B0aW9uc30gW29wdHNdIC0ge0BsaW5rIFByb2Nlc3NvciNwcm9jZXNzfSBvcHRpb25zXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoY3NzLCBvcHRzKSB7XG4gICAgICAgIHRoaXMubG9hZEFubm90YXRpb24oY3NzKTtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZW1iZXIge2Jvb2xlYW59IC0gV2FzIHNvdXJjZSBtYXAgaW5saW5lZCBieSBkYXRhLXVyaSB0byBpbnB1dCBDU1MuXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLmlubGluZSA9IHRoaXMuc3RhcnRXaXRoKHRoaXMuYW5ub3RhdGlvbiwgJ2RhdGE6Jyk7XG5cbiAgICAgICAgbGV0IHByZXYgPSBvcHRzLm1hcCA/IG9wdHMubWFwLnByZXYgOiB1bmRlZmluZWQ7XG4gICAgICAgIGxldCB0ZXh0ID0gdGhpcy5sb2FkTWFwKG9wdHMuZnJvbSwgcHJldik7XG4gICAgICAgIGlmICggdGV4dCApIHRoaXMudGV4dCA9IHRleHQ7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ3JlYXRlIGEgaW5zdGFuY2Ugb2YgYFNvdXJjZU1hcEdlbmVyYXRvcmAgY2xhc3NcbiAgICAgKiBmcm9tIHRoZSBgc291cmNlLW1hcGAgbGlicmFyeSB0byB3b3JrIHdpdGggc291cmNlIG1hcCBpbmZvcm1hdGlvbi5cbiAgICAgKlxuICAgICAqIEl0IGlzIGxhenkgbWV0aG9kLCBzbyBpdCB3aWxsIGNyZWF0ZSBvYmplY3Qgb25seSBvbiBmaXJzdCBjYWxsXG4gICAgICogYW5kIHRoZW4gaXQgd2lsbCB1c2UgY2FjaGUuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtTb3VyY2VNYXBHZW5lcmF0b3J9IG9iamVjdCB3aXRoIHNvdXJjZSBtYXAgaW5mb3JtYXRpb25cbiAgICAgKi9cbiAgICBjb25zdW1lcigpIHtcbiAgICAgICAgaWYgKCAhdGhpcy5jb25zdW1lckNhY2hlICkge1xuICAgICAgICAgICAgdGhpcy5jb25zdW1lckNhY2hlID0gbmV3IG1vemlsbGEuU291cmNlTWFwQ29uc3VtZXIodGhpcy50ZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5jb25zdW1lckNhY2hlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIERvZXMgc291cmNlIG1hcCBjb250YWlucyBgc291cmNlc0NvbnRlbnRgIHdpdGggaW5wdXQgc291cmNlIHRleHQuXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtib29sZWFufSBJcyBgc291cmNlc0NvbnRlbnRgIHByZXNlbnRcbiAgICAgKi9cbiAgICB3aXRoQ29udGVudCgpIHtcbiAgICAgICAgcmV0dXJuICEhKHRoaXMuY29uc3VtZXIoKS5zb3VyY2VzQ29udGVudCAmJlxuICAgICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lcigpLnNvdXJjZXNDb250ZW50Lmxlbmd0aCA+IDApO1xuICAgIH1cblxuICAgIHN0YXJ0V2l0aChzdHJpbmcsIHN0YXJ0KSB7XG4gICAgICAgIGlmICggIXN0cmluZyApIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHN0cmluZy5zdWJzdHIoMCwgc3RhcnQubGVuZ3RoKSA9PT0gc3RhcnQ7XG4gICAgfVxuXG4gICAgbG9hZEFubm90YXRpb24oY3NzKSB7XG4gICAgICAgIGxldCBtYXRjaCA9IGNzcy5tYXRjaCgvXFwvXFwqXFxzKiMgc291cmNlTWFwcGluZ1VSTD0oLiopXFxzKlxcKlxcLy8pO1xuICAgICAgICBpZiAoIG1hdGNoICkgdGhpcy5hbm5vdGF0aW9uID0gbWF0Y2hbMV0udHJpbSgpO1xuICAgIH1cblxuICAgIGRlY29kZUlubGluZSh0ZXh0KSB7XG4gICAgICAgIC8vIGRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcbiAgICAgICAgLy8gZGF0YTphcHBsaWNhdGlvbi9qc29uO2NoYXJzZXQ9dXRmODtiYXNlNjQsXG4gICAgICAgIC8vIGRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsXG4gICAgICAgIGxldCBiYXNlVXJpID0gL15kYXRhOmFwcGxpY2F0aW9uXFwvanNvbjsoPzpjaGFyc2V0PXV0Zi0/ODspP2Jhc2U2NCwvO1xuICAgICAgICBsZXQgdXJpICAgICA9ICdkYXRhOmFwcGxpY2F0aW9uL2pzb24sJztcblxuICAgICAgICBpZiAoIHRoaXMuc3RhcnRXaXRoKHRleHQsIHVyaSkgKSB7XG4gICAgICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KCB0ZXh0LnN1YnN0cih1cmkubGVuZ3RoKSApO1xuXG4gICAgICAgIH0gZWxzZSBpZiAoIGJhc2VVcmkudGVzdCh0ZXh0KSApIHtcbiAgICAgICAgICAgIHJldHVybiBmcm9tQmFzZTY0KHRleHQuc3Vic3RyKFJlZ0V4cC5sYXN0TWF0Y2gubGVuZ3RoKSk7XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGxldCBlbmNvZGluZyA9IHRleHQubWF0Y2goL2RhdGE6YXBwbGljYXRpb25cXC9qc29uOyhbXixdKyksLylbMV07XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIHNvdXJjZSBtYXAgZW5jb2RpbmcgJyArIGVuY29kaW5nKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvYWRNYXAoZmlsZSwgcHJldikge1xuICAgICAgICBpZiAoIHByZXYgPT09IGZhbHNlICkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgIGlmICggcHJldiApIHtcbiAgICAgICAgICAgIGlmICggdHlwZW9mIHByZXYgPT09ICdzdHJpbmcnICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgICAgfSBlbHNlIGlmICggdHlwZW9mIHByZXYgPT09ICdmdW5jdGlvbicgKSB7XG4gICAgICAgICAgICAgICAgbGV0IHByZXZQYXRoID0gcHJldihmaWxlKTtcbiAgICAgICAgICAgICAgICBpZiAoIHByZXZQYXRoICYmIGZzLmV4aXN0c1N5bmMgJiYgZnMuZXhpc3RzU3luYyhwcmV2UGF0aCkgKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMocHJldlBhdGgsICd1dGYtOCcpLnRvU3RyaW5nKCkudHJpbSgpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGxvYWQgcHJldmlvdXMgc291cmNlIG1hcDogJyArXG4gICAgICAgICAgICAgICAgICAgIHByZXZQYXRoLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHByZXYgaW5zdGFuY2VvZiBtb3ppbGxhLlNvdXJjZU1hcENvbnN1bWVyICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb3ppbGxhLlNvdXJjZU1hcEdlbmVyYXRvclxuICAgICAgICAgICAgICAgICAgICAuZnJvbVNvdXJjZU1hcChwcmV2KS50b1N0cmluZygpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICggcHJldiBpbnN0YW5jZW9mIG1vemlsbGEuU291cmNlTWFwR2VuZXJhdG9yICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBwcmV2LnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB0aGlzLmlzTWFwKHByZXYpICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShwcmV2KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBwcmV2aW91cyBzb3VyY2UgbWFwIGZvcm1hdDogJyArXG4gICAgICAgICAgICAgICAgICAgIHByZXYudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIGlmICggdGhpcy5pbmxpbmUgKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNvZGVJbmxpbmUodGhpcy5hbm5vdGF0aW9uKTtcblxuICAgICAgICB9IGVsc2UgaWYgKCB0aGlzLmFubm90YXRpb24gKSB7XG4gICAgICAgICAgICBsZXQgbWFwID0gdGhpcy5hbm5vdGF0aW9uO1xuICAgICAgICAgICAgaWYgKCBmaWxlICkgbWFwID0gcGF0aC5qb2luKHBhdGguZGlybmFtZShmaWxlKSwgbWFwKTtcblxuICAgICAgICAgICAgdGhpcy5yb290ID0gcGF0aC5kaXJuYW1lKG1hcCk7XG4gICAgICAgICAgICBpZiAoIGZzLmV4aXN0c1N5bmMgJiYgZnMuZXhpc3RzU3luYyhtYXApICkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmcy5yZWFkRmlsZVN5bmMobWFwLCAndXRmLTgnKS50b1N0cmluZygpLnRyaW0oKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaXNNYXAobWFwKSB7XG4gICAgICAgIGlmICggdHlwZW9mIG1hcCAhPT0gJ29iamVjdCcgKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiB0eXBlb2YgbWFwLm1hcHBpbmdzID09PSAnc3RyaW5nJyB8fFxuICAgICAgICAgICAgICAgdHlwZW9mIG1hcC5fbWFwcGluZ3MgPT09ICdzdHJpbmcnO1xuICAgIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgUHJldmlvdXNNYXA7XG4iXX0=
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/processor.js b/node_modules/postcss-reporter/node_modules/postcss/lib/processor.js
new file mode 100644
index 00000000..25d91bfb
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/processor.js
@@ -0,0 +1,240 @@
+'use strict';
+
+exports.__esModule = true;
+
+var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
+
+var _lazyResult = require('./lazy-result');
+
+var _lazyResult2 = _interopRequireDefault(_lazyResult);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+/**
+ * Contains plugins to process CSS. Create one `Processor` instance,
+ * initialize its plugins, and then use that instance on numerous CSS files.
+ *
+ * @example
+ * const processor = postcss([autoprefixer, precss]);
+ * processor.process(css1).then(result => console.log(result.css));
+ * processor.process(css2).then(result => console.log(result.css));
+ */
+var Processor = function () {
+
+ /**
+ * @param {Array.<Plugin|pluginFunction>|Processor} plugins - PostCSS
+ * plugins. See {@link Processor#use} for plugin format.
+ */
+ function Processor() {
+ var plugins = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
+
+ _classCallCheck(this, Processor);
+
+ /**
+ * @member {string} - Current PostCSS version.
+ *
+ * @example
+ * if ( result.processor.version.split('.')[0] !== '6' ) {
+ * throw new Error('This plugin works only with PostCSS 6');
+ * }
+ */
+ this.version = '6.0.23';
+ /**
+ * @member {pluginFunction[]} - Plugins added to this processor.
+ *
+ * @example
+ * const processor = postcss([autoprefixer, precss]);
+ * processor.plugins.length //=> 2
+ */
+ this.plugins = this.normalize(plugins);
+ }
+
+ /**
+ * Adds a plugin to be used as a CSS processor.
+ *
+ * PostCSS plugin can be in 4 formats:
+ * * A plugin created by {@link postcss.plugin} method.
+ * * A function. PostCSS will pass the function a @{link Root}
+ * as the first argument and current {@link Result} instance
+ * as the second.
+ * * An object with a `postcss` method. PostCSS will use that method
+ * as described in #2.
+ * * Another {@link Processor} instance. PostCSS will copy plugins
+ * from that instance into this one.
+ *
+ * Plugins can also be added by passing them as arguments when creating
+ * a `postcss` instance (see [`postcss(plugins)`]).
+ *
+ * Asynchronous plugins should return a `Promise` instance.
+ *
+ * @param {Plugin|pluginFunction|Processor} plugin - PostCSS plugin
+ * or {@link Processor}
+ * with plugins
+ *
+ * @example
+ * const processor = postcss()
+ * .use(autoprefixer)
+ * .use(precss);
+ *
+ * @return {Processes} current processor to make methods chain
+ */
+
+
+ Processor.prototype.use = function use(plugin) {
+ this.plugins = this.plugins.concat(this.normalize([plugin]));
+ return this;
+ };
+
+ /**
+ * Parses source CSS and returns a {@link LazyResult} Promise proxy.
+ * Because some plugins can be asynchronous it doesn’t make
+ * any transformations. Transformations will be applied
+ * in the {@link LazyResult} methods.
+ *
+ * @param {string|toString|Result} css - String with input CSS or
+ * any object with a `toString()`
+ * method, like a Buffer.
+ * Optionally, send a {@link Result}
+ * instance and the processor will
+ * take the {@link Root} from it.
+ * @param {processOptions} [opts] - options
+ *
+ * @return {LazyResult} Promise proxy
+ *
+ * @example
+ * processor.process(css, { from: 'a.css', to: 'a.out.css' })
+ * .then(result => {
+ * console.log(result.css);
+ * });
+ */
+
+
+ Processor.prototype.process = function process(css) {
+ var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ return new _lazyResult2.default(this, css, opts);
+ };
+
+ Processor.prototype.normalize = function normalize(plugins) {
+ var normalized = [];
+ for (var _iterator = plugins, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var i = _ref;
+
+ if (i.postcss) i = i.postcss;
+
+ if ((typeof i === 'undefined' ? 'undefined' : _typeof(i)) === 'object' && Array.isArray(i.plugins)) {
+ normalized = normalized.concat(i.plugins);
+ } else if (typeof i === 'function') {
+ normalized.push(i);
+ } else if ((typeof i === 'undefined' ? 'undefined' : _typeof(i)) === 'object' && (i.parse || i.stringify)) {
+ throw new Error('PostCSS syntaxes cannot be used as plugins. ' + 'Instead, please use one of the ' + 'syntax/parser/stringifier options as ' + 'outlined in your PostCSS ' + 'runner documentation.');
+ } else {
+ throw new Error(i + ' is not a PostCSS plugin');
+ }
+ }
+ return normalized;
+ };
+
+ return Processor;
+}();
+
+exports.default = Processor;
+
+/**
+ * @callback builder
+ * @param {string} part - part of generated CSS connected to this node
+ * @param {Node} node - AST node
+ * @param {"start"|"end"} [type] - node’s part type
+ */
+
+/**
+ * @callback parser
+ *
+ * @param {string|toString} css - string with input CSS or any object
+ * with toString() method, like a Buffer
+ * @param {processOptions} [opts] - options with only `from` and `map` keys
+ *
+ * @return {Root} PostCSS AST
+ */
+
+/**
+ * @callback stringifier
+ *
+ * @param {Node} node - start node for stringifing. Usually {@link Root}.
+ * @param {builder} builder - function to concatenate CSS from node’s parts
+ * or generate string and source map
+ *
+ * @return {void}
+ */
+
+/**
+ * @typedef {object} syntax
+ * @property {parser} parse - function to generate AST by string
+ * @property {stringifier} stringify - function to generate string by AST
+ */
+
+/**
+ * @typedef {object} toString
+ * @property {function} toString
+ */
+
+/**
+ * @callback pluginFunction
+ * @param {Root} root - parsed input CSS
+ * @param {Result} result - result to set warnings or check other plugins
+ */
+
+/**
+ * @typedef {object} Plugin
+ * @property {function} postcss - PostCSS plugin function
+ */
+
+/**
+ * @typedef {object} processOptions
+ * @property {string} from - the path of the CSS source file.
+ * You should always set `from`,
+ * because it is used in source map
+ * generation and syntax error messages.
+ * @property {string} to - the path where you’ll put the output
+ * CSS file. You should always set `to`
+ * to generate correct source maps.
+ * @property {parser} parser - function to generate AST by string
+ * @property {stringifier} stringifier - class to generate string by AST
+ * @property {syntax} syntax - object with `parse` and `stringify`
+ * @property {object} map - source map options
+ * @property {boolean} map.inline - does source map should
+ * be embedded in the output
+ * CSS as a base64-encoded
+ * comment
+ * @property {string|object|false|function} map.prev - source map content
+ * from a previous
+ * processing step
+ * (for example, Sass).
+ * PostCSS will try to find
+ * previous map
+ * automatically, so you
+ * could disable it by
+ * `false` value.
+ * @property {boolean} map.sourcesContent - does PostCSS should set
+ * the origin content to map
+ * @property {string|false} map.annotation - does PostCSS should set
+ * annotation comment to map
+ * @property {string} map.from - override `from` in map’s
+ * `sources`
+ */
+
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInByb2Nlc3Nvci5lczYiXSwibmFtZXMiOlsiUHJvY2Vzc29yIiwicGx1Z2lucyIsInZlcnNpb24iLCJub3JtYWxpemUiLCJ1c2UiLCJwbHVnaW4iLCJjb25jYXQiLCJwcm9jZXNzIiwiY3NzIiwib3B0cyIsIkxhenlSZXN1bHQiLCJub3JtYWxpemVkIiwiaSIsInBvc3Rjc3MiLCJBcnJheSIsImlzQXJyYXkiLCJwdXNoIiwicGFyc2UiLCJzdHJpbmdpZnkiLCJFcnJvciJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7Ozs7O0FBRUE7Ozs7Ozs7OztJQVNNQSxTOztBQUVGOzs7O0FBSUEsdUJBQTBCO0FBQUEsUUFBZEMsT0FBYyx1RUFBSixFQUFJOztBQUFBOztBQUN0Qjs7Ozs7Ozs7QUFRQSxTQUFLQyxPQUFMLEdBQWUsUUFBZjtBQUNBOzs7Ozs7O0FBT0EsU0FBS0QsT0FBTCxHQUFlLEtBQUtFLFNBQUwsQ0FBZUYsT0FBZixDQUFmO0FBQ0g7O0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7c0JBNkJBRyxHLGdCQUFJQyxNLEVBQVE7QUFDUixTQUFLSixPQUFMLEdBQWUsS0FBS0EsT0FBTCxDQUFhSyxNQUFiLENBQW9CLEtBQUtILFNBQUwsQ0FBZSxDQUFDRSxNQUFELENBQWYsQ0FBcEIsQ0FBZjtBQUNBLFdBQU8sSUFBUDtBQUNILEc7O0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztzQkFzQkFFLE8sb0JBQVFDLEcsRUFBaUI7QUFBQSxRQUFaQyxJQUFZLHVFQUFMLEVBQUs7O0FBQ3JCLFdBQU8sSUFBSUMsb0JBQUosQ0FBZSxJQUFmLEVBQXFCRixHQUFyQixFQUEwQkMsSUFBMUIsQ0FBUDtBQUNILEc7O3NCQUVETixTLHNCQUFVRixPLEVBQVM7QUFDZixRQUFJVSxhQUFhLEVBQWpCO0FBQ0EseUJBQWVWLE9BQWYsa0hBQXlCO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQSxVQUFmVyxDQUFlOztBQUNyQixVQUFLQSxFQUFFQyxPQUFQLEVBQWlCRCxJQUFJQSxFQUFFQyxPQUFOOztBQUVqQixVQUFLLFFBQU9ELENBQVAseUNBQU9BLENBQVAsT0FBYSxRQUFiLElBQXlCRSxNQUFNQyxPQUFOLENBQWNILEVBQUVYLE9BQWhCLENBQTlCLEVBQXlEO0FBQ3JEVSxxQkFBYUEsV0FBV0wsTUFBWCxDQUFrQk0sRUFBRVgsT0FBcEIsQ0FBYjtBQUNILE9BRkQsTUFFTyxJQUFLLE9BQU9XLENBQVAsS0FBYSxVQUFsQixFQUErQjtBQUNsQ0QsbUJBQVdLLElBQVgsQ0FBZ0JKLENBQWhCO0FBQ0gsT0FGTSxNQUVBLElBQUssUUFBT0EsQ0FBUCx5Q0FBT0EsQ0FBUCxPQUFhLFFBQWIsS0FBMEJBLEVBQUVLLEtBQUYsSUFBV0wsRUFBRU0sU0FBdkMsQ0FBTCxFQUF5RDtBQUM1RCxjQUFNLElBQUlDLEtBQUosQ0FBVSxpREFDQSxpQ0FEQSxHQUVBLHVDQUZBLEdBR0EsMkJBSEEsR0FJQSx1QkFKVixDQUFOO0FBS0gsT0FOTSxNQU1BO0FBQ0gsY0FBTSxJQUFJQSxLQUFKLENBQVVQLElBQUksMEJBQWQsQ0FBTjtBQUNIO0FBQ0o7QUFDRCxXQUFPRCxVQUFQO0FBQ0gsRzs7Ozs7a0JBSVVYLFM7O0FBRWY7Ozs7Ozs7QUFPQTs7Ozs7Ozs7OztBQVVBOzs7Ozs7Ozs7O0FBVUE7Ozs7OztBQU1BOzs7OztBQUtBOzs7Ozs7QUFNQTs7Ozs7QUFLQSIsImZpbGUiOiJwcm9jZXNzb3IuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgTGF6eVJlc3VsdCBmcm9tICcuL2xhenktcmVzdWx0JztcblxuLyoqXG4gKiBDb250YWlucyBwbHVnaW5zIHRvIHByb2Nlc3MgQ1NTLiBDcmVhdGUgb25lIGBQcm9jZXNzb3JgIGluc3RhbmNlLFxuICogaW5pdGlhbGl6ZSBpdHMgcGx1Z2lucywgYW5kIHRoZW4gdXNlIHRoYXQgaW5zdGFuY2Ugb24gbnVtZXJvdXMgQ1NTIGZpbGVzLlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBwcm9jZXNzb3IgPSBwb3N0Y3NzKFthdXRvcHJlZml4ZXIsIHByZWNzc10pO1xuICogcHJvY2Vzc29yLnByb2Nlc3MoY3NzMSkudGhlbihyZXN1bHQgPT4gY29uc29sZS5sb2cocmVzdWx0LmNzcykpO1xuICogcHJvY2Vzc29yLnByb2Nlc3MoY3NzMikudGhlbihyZXN1bHQgPT4gY29uc29sZS5sb2cocmVzdWx0LmNzcykpO1xuICovXG5jbGFzcyBQcm9jZXNzb3Ige1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtBcnJheS48UGx1Z2lufHBsdWdpbkZ1bmN0aW9uPnxQcm9jZXNzb3J9IHBsdWdpbnMgLSBQb3N0Q1NTXG4gICAgICogICAgICAgIHBsdWdpbnMuIFNlZSB7QGxpbmsgUHJvY2Vzc29yI3VzZX0gZm9yIHBsdWdpbiBmb3JtYXQuXG4gICAgICovXG4gICAgY29uc3RydWN0b3IocGx1Z2lucyA9IFtdKSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd9IC0gQ3VycmVudCBQb3N0Q1NTIHZlcnNpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGlmICggcmVzdWx0LnByb2Nlc3Nvci52ZXJzaW9uLnNwbGl0KCcuJylbMF0gIT09ICc2JyApIHtcbiAgICAgICAgICogICB0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgcGx1Z2luIHdvcmtzIG9ubHkgd2l0aCBQb3N0Q1NTIDYnKTtcbiAgICAgICAgICogfVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy52ZXJzaW9uID0gJzYuMC4yMyc7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWVtYmVyIHtwbHVnaW5GdW5jdGlvbltdfSAtIFBsdWdpbnMgYWRkZWQgdG8gdGhpcyBwcm9jZXNzb3IuXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGNvbnN0IHByb2Nlc3NvciA9IHBvc3Rjc3MoW2F1dG9wcmVmaXhlciwgcHJlY3NzXSk7XG4gICAgICAgICAqIHByb2Nlc3Nvci5wbHVnaW5zLmxlbmd0aCAvLz0+IDJcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMucGx1Z2lucyA9IHRoaXMubm9ybWFsaXplKHBsdWdpbnMpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFkZHMgYSBwbHVnaW4gdG8gYmUgdXNlZCBhcyBhIENTUyBwcm9jZXNzb3IuXG4gICAgICpcbiAgICAgKiBQb3N0Q1NTIHBsdWdpbiBjYW4gYmUgaW4gNCBmb3JtYXRzOlxuICAgICAqICogQSBwbHVnaW4gY3JlYXRlZCBieSB7QGxpbmsgcG9zdGNzcy5wbHVnaW59IG1ldGhvZC5cbiAgICAgKiAqIEEgZnVuY3Rpb24uIFBvc3RDU1Mgd2lsbCBwYXNzIHRoZSBmdW5jdGlvbiBhIEB7bGluayBSb290fVxuICAgICAqICAgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IGFuZCBjdXJyZW50IHtAbGluayBSZXN1bHR9IGluc3RhbmNlXG4gICAgICogICBhcyB0aGUgc2Vjb25kLlxuICAgICAqICogQW4gb2JqZWN0IHdpdGggYSBgcG9zdGNzc2AgbWV0aG9kLiBQb3N0Q1NTIHdpbGwgdXNlIHRoYXQgbWV0aG9kXG4gICAgICogICBhcyBkZXNjcmliZWQgaW4gIzIuXG4gICAgICogKiBBbm90aGVyIHtAbGluayBQcm9jZXNzb3J9IGluc3RhbmNlLiBQb3N0Q1NTIHdpbGwgY29weSBwbHVnaW5zXG4gICAgICogICBmcm9tIHRoYXQgaW5zdGFuY2UgaW50byB0aGlzIG9uZS5cbiAgICAgKlxuICAgICAqIFBsdWdpbnMgY2FuIGFsc28gYmUgYWRkZWQgYnkgcGFzc2luZyB0aGVtIGFzIGFyZ3VtZW50cyB3aGVuIGNyZWF0aW5nXG4gICAgICogYSBgcG9zdGNzc2AgaW5zdGFuY2UgKHNlZSBbYHBvc3Rjc3MocGx1Z2lucylgXSkuXG4gICAgICpcbiAgICAgKiBBc3luY2hyb25vdXMgcGx1Z2lucyBzaG91bGQgcmV0dXJuIGEgYFByb21pc2VgIGluc3RhbmNlLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtQbHVnaW58cGx1Z2luRnVuY3Rpb258UHJvY2Vzc29yfSBwbHVnaW4gLSBQb3N0Q1NTIHBsdWdpblxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3Ige0BsaW5rIFByb2Nlc3Nvcn1cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggcGx1Z2luc1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCBwcm9jZXNzb3IgPSBwb3N0Y3NzKClcbiAgICAgKiAgIC51c2UoYXV0b3ByZWZpeGVyKVxuICAgICAqICAgLnVzZShwcmVjc3MpO1xuICAgICAqXG4gICAgICogQHJldHVybiB7UHJvY2Vzc2VzfSBjdXJyZW50IHByb2Nlc3NvciB0byBtYWtlIG1ldGhvZHMgY2hhaW5cbiAgICAgKi9cbiAgICB1c2UocGx1Z2luKSB7XG4gICAgICAgIHRoaXMucGx1Z2lucyA9IHRoaXMucGx1Z2lucy5jb25jYXQodGhpcy5ub3JtYWxpemUoW3BsdWdpbl0pKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUGFyc2VzIHNvdXJjZSBDU1MgYW5kIHJldHVybnMgYSB7QGxpbmsgTGF6eVJlc3VsdH0gUHJvbWlzZSBwcm94eS5cbiAgICAgKiBCZWNhdXNlIHNvbWUgcGx1Z2lucyBjYW4gYmUgYXN5bmNocm9ub3VzIGl0IGRvZXNu4oCZdCBtYWtlXG4gICAgICogYW55IHRyYW5zZm9ybWF0aW9ucy4gVHJhbnNmb3JtYXRpb25zIHdpbGwgYmUgYXBwbGllZFxuICAgICAqIGluIHRoZSB7QGxpbmsgTGF6eVJlc3VsdH0gbWV0aG9kcy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfHRvU3RyaW5nfFJlc3VsdH0gY3NzIC0gU3RyaW5nIHdpdGggaW5wdXQgQ1NTIG9yXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbnkgb2JqZWN0IHdpdGggYSBgdG9TdHJpbmcoKWBcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZCwgbGlrZSBhIEJ1ZmZlci5cbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsbHksIHNlbmQgYSB7QGxpbmsgUmVzdWx0fVxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UgYW5kIHRoZSBwcm9jZXNzb3Igd2lsbFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFrZSB0aGUge0BsaW5rIFJvb3R9IGZyb20gaXQuXG4gICAgICogQHBhcmFtIHtwcm9jZXNzT3B0aW9uc30gW29wdHNdICAgICAgLSBvcHRpb25zXG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtMYXp5UmVzdWx0fSBQcm9taXNlIHByb3h5XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHByb2Nlc3Nvci5wcm9jZXNzKGNzcywgeyBmcm9tOiAnYS5jc3MnLCB0bzogJ2Eub3V0LmNzcycgfSlcbiAgICAgKiAgIC50aGVuKHJlc3VsdCA9PiB7XG4gICAgICogICAgICBjb25zb2xlLmxvZyhyZXN1bHQuY3NzKTtcbiAgICAgKiAgIH0pO1xuICAgICAqL1xuICAgIHByb2Nlc3MoY3NzLCBvcHRzID0geyB9KSB7XG4gICAgICAgIHJldHVybiBuZXcgTGF6eVJlc3VsdCh0aGlzLCBjc3MsIG9wdHMpO1xuICAgIH1cblxuICAgIG5vcm1hbGl6ZShwbHVnaW5zKSB7XG4gICAgICAgIGxldCBub3JtYWxpemVkID0gW107XG4gICAgICAgIGZvciAoIGxldCBpIG9mIHBsdWdpbnMgKSB7XG4gICAgICAgICAgICBpZiAoIGkucG9zdGNzcyApIGkgPSBpLnBvc3Rjc3M7XG5cbiAgICAgICAgICAgIGlmICggdHlwZW9mIGkgPT09ICdvYmplY3QnICYmIEFycmF5LmlzQXJyYXkoaS5wbHVnaW5zKSApIHtcbiAgICAgICAgICAgICAgICBub3JtYWxpemVkID0gbm9ybWFsaXplZC5jb25jYXQoaS5wbHVnaW5zKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBpID09PSAnZnVuY3Rpb24nICkge1xuICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWQucHVzaChpKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoIHR5cGVvZiBpID09PSAnb2JqZWN0JyAmJiAoaS5wYXJzZSB8fCBpLnN0cmluZ2lmeSkgKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdQb3N0Q1NTIHN5bnRheGVzIGNhbm5vdCBiZSB1c2VkIGFzIHBsdWdpbnMuICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnSW5zdGVhZCwgcGxlYXNlIHVzZSBvbmUgb2YgdGhlICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnc3ludGF4L3BhcnNlci9zdHJpbmdpZmllciBvcHRpb25zIGFzICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb3V0bGluZWQgaW4geW91ciBQb3N0Q1NTICcgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncnVubmVyIGRvY3VtZW50YXRpb24uJyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihpICsgJyBpcyBub3QgYSBQb3N0Q1NTIHBsdWdpbicpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBub3JtYWxpemVkO1xuICAgIH1cblxufVxuXG5leHBvcnQgZGVmYXVsdCBQcm9jZXNzb3I7XG5cbi8qKlxuICogQGNhbGxiYWNrIGJ1aWxkZXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBwYXJ0ICAgICAgICAgIC0gcGFydCBvZiBnZW5lcmF0ZWQgQ1NTIGNvbm5lY3RlZCB0byB0aGlzIG5vZGVcbiAqIEBwYXJhbSB7Tm9kZX0gICBub2RlICAgICAgICAgIC0gQVNUIG5vZGVcbiAqIEBwYXJhbSB7XCJzdGFydFwifFwiZW5kXCJ9IFt0eXBlXSAtIG5vZGXigJlzIHBhcnQgdHlwZVxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIHBhcnNlclxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfHRvU3RyaW5nfSBjc3MgICAtIHN0cmluZyB3aXRoIGlucHV0IENTUyBvciBhbnkgb2JqZWN0XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRvU3RyaW5nKCkgbWV0aG9kLCBsaWtlIGEgQnVmZmVyXG4gKiBAcGFyYW0ge3Byb2Nlc3NPcHRpb25zfSBbb3B0c10gLSBvcHRpb25zIHdpdGggb25seSBgZnJvbWAgYW5kIGBtYXBgIGtleXNcbiAqXG4gKiBAcmV0dXJuIHtSb290fSBQb3N0Q1NTIEFTVFxuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIHN0cmluZ2lmaWVyXG4gKlxuICogQHBhcmFtIHtOb2RlfSBub2RlICAgICAgIC0gc3RhcnQgbm9kZSBmb3Igc3RyaW5naWZpbmcuIFVzdWFsbHkge0BsaW5rIFJvb3R9LlxuICogQHBhcmFtIHtidWlsZGVyfSBidWlsZGVyIC0gZnVuY3Rpb24gdG8gY29uY2F0ZW5hdGUgQ1NTIGZyb20gbm9kZeKAmXMgcGFydHNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGdlbmVyYXRlIHN0cmluZyBhbmQgc291cmNlIG1hcFxuICpcbiAqIEByZXR1cm4ge3ZvaWR9XG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBzeW50YXhcbiAqIEBwcm9wZXJ0eSB7cGFyc2VyfSBwYXJzZSAgICAgICAgICAtIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIEFTVCBieSBzdHJpbmdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5naWZpZXJ9IHN0cmluZ2lmeSAtIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIHN0cmluZyBieSBBU1RcbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IHRvU3RyaW5nXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSB0b1N0cmluZ1xuICovXG5cbi8qKlxuICogQGNhbGxiYWNrIHBsdWdpbkZ1bmN0aW9uXG4gKiBAcGFyYW0ge1Jvb3R9IHJvb3QgICAgIC0gcGFyc2VkIGlucHV0IENTU1xuICogQHBhcmFtIHtSZXN1bHR9IHJlc3VsdCAtIHJlc3VsdCB0byBzZXQgd2FybmluZ3Mgb3IgY2hlY2sgb3RoZXIgcGx1Z2luc1xuICovXG5cbi8qKlxuICogQHR5cGVkZWYge29iamVjdH0gUGx1Z2luXG4gKiBAcHJvcGVydHkge2Z1bmN0aW9ufSBwb3N0Y3NzIC0gUG9zdENTUyBwbHVnaW4gZnVuY3Rpb25cbiAqL1xuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IHByb2Nlc3NPcHRpb25zXG4gKiBAcHJvcGVydHkge3N0cmluZ30gZnJvbSAgICAgICAgICAgICAtIHRoZSBwYXRoIG9mIHRoZSBDU1Mgc291cmNlIGZpbGUuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFlvdSBzaG91bGQgYWx3YXlzIHNldCBgZnJvbWAsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlY2F1c2UgaXQgaXMgdXNlZCBpbiBzb3VyY2UgbWFwXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRpb24gYW5kIHN5bnRheCBlcnJvciBtZXNzYWdlcy5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB0byAgICAgICAgICAgICAgIC0gdGhlIHBhdGggd2hlcmUgeW914oCZbGwgcHV0IHRoZSBvdXRwdXRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTIGZpbGUuIFlvdSBzaG91bGQgYWx3YXlzIHNldCBgdG9gXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGdlbmVyYXRlIGNvcnJlY3Qgc291cmNlIG1hcHMuXG4gKiBAcHJvcGVydHkge3BhcnNlcn0gcGFyc2VyICAgICAgICAgICAtIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIEFTVCBieSBzdHJpbmdcbiAqIEBwcm9wZXJ0eSB7c3RyaW5naWZpZXJ9IHN0cmluZ2lmaWVyIC0gY2xhc3MgdG8gZ2VuZXJhdGUgc3RyaW5nIGJ5IEFTVFxuICogQHByb3BlcnR5IHtzeW50YXh9IHN5bnRheCAgICAgICAgICAgLSBvYmplY3Qgd2l0aCBgcGFyc2VgIGFuZCBgc3RyaW5naWZ5YFxuICogQHByb3BlcnR5IHtvYmplY3R9IG1hcCAgICAgICAgICAgICAgLSBzb3VyY2UgbWFwIG9wdGlvbnNcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gbWFwLmlubGluZSAgICAgICAgICAgICAgICAgICAgLSBkb2VzIHNvdXJjZSBtYXAgc2hvdWxkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgZW1iZWRkZWQgaW4gdGhlIG91dHB1dFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTUyBhcyBhIGJhc2U2NC1lbmNvZGVkXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWVudFxuICogQHByb3BlcnR5IHtzdHJpbmd8b2JqZWN0fGZhbHNlfGZ1bmN0aW9ufSBtYXAucHJldiAtIHNvdXJjZSBtYXAgY29udGVudFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gYSBwcmV2aW91c1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Npbmcgc3RlcFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3IgZXhhbXBsZSwgU2FzcykuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUG9zdENTUyB3aWxsIHRyeSB0byBmaW5kXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJldmlvdXMgbWFwXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXV0b21hdGljYWxseSwgc28geW91XG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bGQgZGlzYWJsZSBpdCBieVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmYWxzZWAgdmFsdWUuXG4gKiBAcHJvcGVydHkge2Jvb2xlYW59IG1hcC5zb3VyY2VzQ29udGVudCAgICAgICAgICAgIC0gZG9lcyBQb3N0Q1NTIHNob3VsZCBzZXRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgb3JpZ2luIGNvbnRlbnQgdG8gbWFwXG4gKiBAcHJvcGVydHkge3N0cmluZ3xmYWxzZX0gbWFwLmFubm90YXRpb24gICAgICAgICAgIC0gZG9lcyBQb3N0Q1NTIHNob3VsZCBzZXRcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbm5vdGF0aW9uIGNvbW1lbnQgdG8gbWFwXG4gKiBAcHJvcGVydHkge3N0cmluZ30gbWFwLmZyb20gICAgICAgICAgICAgICAgICAgICAgIC0gb3ZlcnJpZGUgYGZyb21gIGluIG1hcOKAmXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgc291cmNlc2BcbiAqL1xuIl19
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/result.js b/node_modules/postcss-reporter/node_modules/postcss/lib/result.js
new file mode 100644
index 00000000..537e171a
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/result.js
@@ -0,0 +1,206 @@
+'use strict';
+
+exports.__esModule = true;
+
+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; }; }();
+
+var _warning = require('./warning');
+
+var _warning2 = _interopRequireDefault(_warning);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+/**
+ * Provides the result of the PostCSS transformations.
+ *
+ * A Result instance is returned by {@link LazyResult#then}
+ * or {@link Root#toResult} methods.
+ *
+ * @example
+ * postcss([cssnext]).process(css).then(function (result) {
+ * console.log(result.css);
+ * });
+ *
+ * @example
+ * var result2 = postcss.parse(css).toResult();
+ */
+var Result = function () {
+
+ /**
+ * @param {Processor} processor - processor used for this transformation.
+ * @param {Root} root - Root node after all transformations.
+ * @param {processOptions} opts - options from the {@link Processor#process}
+ * or {@link Root#toResult}
+ */
+ function Result(processor, root, opts) {
+ _classCallCheck(this, Result);
+
+ /**
+ * @member {Processor} - The Processor instance used
+ * for this transformation.
+ *
+ * @example
+ * for ( let plugin of result.processor.plugins) {
+ * if ( plugin.postcssPlugin === 'postcss-bad' ) {
+ * throw 'postcss-good is incompatible with postcss-bad';
+ * }
+ * });
+ */
+ this.processor = processor;
+ /**
+ * @member {Message[]} - Contains messages from plugins
+ * (e.g., warnings or custom messages).
+ * Each message should have type
+ * and plugin properties.
+ *
+ * @example
+ * postcss.plugin('postcss-min-browser', () => {
+ * return (root, result) => {
+ * var browsers = detectMinBrowsersByCanIUse(root);
+ * result.messages.push({
+ * type: 'min-browser',
+ * plugin: 'postcss-min-browser',
+ * browsers: browsers
+ * });
+ * };
+ * });
+ */
+ this.messages = [];
+ /**
+ * @member {Root} - Root node after all transformations.
+ *
+ * @example
+ * root.toResult().root == root;
+ */
+ this.root = root;
+ /**
+ * @member {processOptions} - Options from the {@link Processor#process}
+ * or {@link Root#toResult} call
+ * that produced this Result instance.
+ *
+ * @example
+ * root.toResult(opts).opts == opts;
+ */
+ this.opts = opts;
+ /**
+ * @member {string} - A CSS string representing of {@link Result#root}.
+ *
+ * @example
+ * postcss.parse('a{}').toResult().css //=> "a{}"
+ */
+ this.css = undefined;
+ /**
+ * @member {SourceMapGenerator} - An instance of `SourceMapGenerator`
+ * class from the `source-map` library,
+ * representing changes
+ * to the {@link Result#root} instance.
+ *
+ * @example
+ * result.map.toJSON() //=> { version: 3, file: 'a.css', … }
+ *
+ * @example
+ * if ( result.map ) {
+ * fs.writeFileSync(result.opts.to + '.map', result.map.toString());
+ * }
+ */
+ this.map = undefined;
+ }
+
+ /**
+ * Returns for @{link Result#css} content.
+ *
+ * @example
+ * result + '' === result.css
+ *
+ * @return {string} string representing of {@link Result#root}
+ */
+
+
+ Result.prototype.toString = function toString() {
+ return this.css;
+ };
+
+ /**
+ * Creates an instance of {@link Warning} and adds it
+ * to {@link Result#messages}.
+ *
+ * @param {string} text - warning message
+ * @param {Object} [opts] - warning options
+ * @param {Node} opts.node - CSS node that caused the warning
+ * @param {string} opts.word - word in CSS source that caused the warning
+ * @param {number} opts.index - index in CSS node string that caused
+ * the warning
+ * @param {string} opts.plugin - name of the plugin that created
+ * this warning. {@link Result#warn} fills
+ * this property automatically.
+ *
+ * @return {Warning} created warning
+ */
+
+
+ Result.prototype.warn = function warn(text) {
+ var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ if (!opts.plugin) {
+ if (this.lastPlugin && this.lastPlugin.postcssPlugin) {
+ opts.plugin = this.lastPlugin.postcssPlugin;
+ }
+ }
+
+ var warning = new _warning2.default(text, opts);
+ this.messages.push(warning);
+
+ return warning;
+ };
+
+ /**
+ * Returns warnings from plugins. Filters {@link Warning} instances
+ * from {@link Result#messages}.
+ *
+ * @example
+ * result.warnings().forEach(warn => {
+ * console.warn(warn.toString());
+ * });
+ *
+ * @return {Warning[]} warnings from plugins
+ */
+
+
+ Result.prototype.warnings = function warnings() {
+ return this.messages.filter(function (i) {
+ return i.type === 'warning';
+ });
+ };
+
+ /**
+ * An alias for the {@link Result#css} property.
+ * Use it with syntaxes that generate non-CSS output.
+ * @type {string}
+ *
+ * @example
+ * result.css === result.content;
+ */
+
+
+ _createClass(Result, [{
+ key: 'content',
+ get: function get() {
+ return this.css;
+ }
+ }]);
+
+ return Result;
+}();
+
+exports.default = Result;
+
+/**
+ * @typedef {object} Message
+ * @property {string} type - message type
+ * @property {string} plugin - source PostCSS plugin name
+ */
+
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJlc3VsdC5lczYiXSwibmFtZXMiOlsiUmVzdWx0IiwicHJvY2Vzc29yIiwicm9vdCIsIm9wdHMiLCJtZXNzYWdlcyIsImNzcyIsInVuZGVmaW5lZCIsIm1hcCIsInRvU3RyaW5nIiwid2FybiIsInRleHQiLCJwbHVnaW4iLCJsYXN0UGx1Z2luIiwicG9zdGNzc1BsdWdpbiIsIndhcm5pbmciLCJXYXJuaW5nIiwicHVzaCIsIndhcm5pbmdzIiwiZmlsdGVyIiwiaSIsInR5cGUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBOzs7Ozs7OztBQUVBOzs7Ozs7Ozs7Ozs7OztJQWNNQSxNOztBQUVGOzs7Ozs7QUFNQSxrQkFBWUMsU0FBWixFQUF1QkMsSUFBdkIsRUFBNkJDLElBQTdCLEVBQW1DO0FBQUE7O0FBQy9COzs7Ozs7Ozs7OztBQVdBLFNBQUtGLFNBQUwsR0FBaUJBLFNBQWpCO0FBQ0E7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtCQSxTQUFLRyxRQUFMLEdBQWdCLEVBQWhCO0FBQ0E7Ozs7OztBQU1BLFNBQUtGLElBQUwsR0FBWUEsSUFBWjtBQUNBOzs7Ozs7OztBQVFBLFNBQUtDLElBQUwsR0FBWUEsSUFBWjtBQUNBOzs7Ozs7QUFNQSxTQUFLRSxHQUFMLEdBQVdDLFNBQVg7QUFDQTs7Ozs7Ozs7Ozs7Ozs7QUFjQSxTQUFLQyxHQUFMLEdBQVdELFNBQVg7QUFDSDs7QUFFRDs7Ozs7Ozs7OzttQkFRQUUsUSx1QkFBVztBQUNQLFdBQU8sS0FBS0gsR0FBWjtBQUNILEc7O0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OzttQkFnQkFJLEksaUJBQUtDLEksRUFBa0I7QUFBQSxRQUFaUCxJQUFZLHVFQUFMLEVBQUs7O0FBQ25CLFFBQUssQ0FBQ0EsS0FBS1EsTUFBWCxFQUFvQjtBQUNoQixVQUFLLEtBQUtDLFVBQUwsSUFBbUIsS0FBS0EsVUFBTCxDQUFnQkMsYUFBeEMsRUFBd0Q7QUFDcERWLGFBQUtRLE1BQUwsR0FBYyxLQUFLQyxVQUFMLENBQWdCQyxhQUE5QjtBQUNIO0FBQ0o7O0FBRUQsUUFBSUMsVUFBVSxJQUFJQyxpQkFBSixDQUFZTCxJQUFaLEVBQWtCUCxJQUFsQixDQUFkO0FBQ0EsU0FBS0MsUUFBTCxDQUFjWSxJQUFkLENBQW1CRixPQUFuQjs7QUFFQSxXQUFPQSxPQUFQO0FBQ0gsRzs7QUFFRDs7Ozs7Ozs7Ozs7OzttQkFXQUcsUSx1QkFBVztBQUNQLFdBQU8sS0FBS2IsUUFBTCxDQUFjYyxNQUFkLENBQXNCO0FBQUEsYUFBS0MsRUFBRUMsSUFBRixLQUFXLFNBQWhCO0FBQUEsS0FBdEIsQ0FBUDtBQUNILEc7O0FBRUQ7Ozs7Ozs7Ozs7Ozt3QkFRYztBQUNWLGFBQU8sS0FBS2YsR0FBWjtBQUNIOzs7Ozs7a0JBSVVMLE07O0FBRWYiLCJmaWxlIjoicmVzdWx0LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFdhcm5pbmcgZnJvbSAnLi93YXJuaW5nJztcblxuLyoqXG4gKiBQcm92aWRlcyB0aGUgcmVzdWx0IG9mIHRoZSBQb3N0Q1NTIHRyYW5zZm9ybWF0aW9ucy5cbiAqXG4gKiBBIFJlc3VsdCBpbnN0YW5jZSBpcyByZXR1cm5lZCBieSB7QGxpbmsgTGF6eVJlc3VsdCN0aGVufVxuICogb3Ige0BsaW5rIFJvb3QjdG9SZXN1bHR9IG1ldGhvZHMuXG4gKlxuICogQGV4YW1wbGVcbiAqIHBvc3Rjc3MoW2Nzc25leHRdKS5wcm9jZXNzKGNzcykudGhlbihmdW5jdGlvbiAocmVzdWx0KSB7XG4gKiAgICBjb25zb2xlLmxvZyhyZXN1bHQuY3NzKTtcbiAqIH0pO1xuICpcbiAqIEBleGFtcGxlXG4gKiB2YXIgcmVzdWx0MiA9IHBvc3Rjc3MucGFyc2UoY3NzKS50b1Jlc3VsdCgpO1xuICovXG5jbGFzcyBSZXN1bHQge1xuXG4gICAgLyoqXG4gICAgICogQHBhcmFtIHtQcm9jZXNzb3J9IHByb2Nlc3NvciAtIHByb2Nlc3NvciB1c2VkIGZvciB0aGlzIHRyYW5zZm9ybWF0aW9uLlxuICAgICAqIEBwYXJhbSB7Um9vdH0gICAgICByb290ICAgICAgLSBSb290IG5vZGUgYWZ0ZXIgYWxsIHRyYW5zZm9ybWF0aW9ucy5cbiAgICAgKiBAcGFyYW0ge3Byb2Nlc3NPcHRpb25zfSBvcHRzIC0gb3B0aW9ucyBmcm9tIHRoZSB7QGxpbmsgUHJvY2Vzc29yI3Byb2Nlc3N9XG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIHtAbGluayBSb290I3RvUmVzdWx0fVxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKHByb2Nlc3Nvciwgcm9vdCwgb3B0cykge1xuICAgICAgICAvKipcbiAgICAgICAgICogQG1lbWJlciB7UHJvY2Vzc29yfSAtIFRoZSBQcm9jZXNzb3IgaW5zdGFuY2UgdXNlZFxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoaXMgdHJhbnNmb3JtYXRpb24uXG4gICAgICAgICAqXG4gICAgICAgICAqIEBleGFtcGxlXG4gICAgICAgICAqIGZvciAoIGxldCBwbHVnaW4gb2YgcmVzdWx0LnByb2Nlc3Nvci5wbHVnaW5zKSB7XG4gICAgICAgICAqICAgaWYgKCBwbHVnaW4ucG9zdGNzc1BsdWdpbiA9PT0gJ3Bvc3Rjc3MtYmFkJyApIHtcbiAgICAgICAgICogICAgIHRocm93ICdwb3N0Y3NzLWdvb2QgaXMgaW5jb21wYXRpYmxlIHdpdGggcG9zdGNzcy1iYWQnO1xuICAgICAgICAgKiAgIH1cbiAgICAgICAgICogfSk7XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnByb2Nlc3NvciA9IHByb2Nlc3NvcjtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZW1iZXIge01lc3NhZ2VbXX0gLSBDb250YWlucyBtZXNzYWdlcyBmcm9tIHBsdWdpbnNcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgIChlLmcuLCB3YXJuaW5ncyBvciBjdXN0b20gbWVzc2FnZXMpLlxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgRWFjaCBtZXNzYWdlIHNob3VsZCBoYXZlIHR5cGVcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgIGFuZCBwbHVnaW4gcHJvcGVydGllcy5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogcG9zdGNzcy5wbHVnaW4oJ3Bvc3Rjc3MtbWluLWJyb3dzZXInLCAoKSA9PiB7XG4gICAgICAgICAqICAgcmV0dXJuIChyb290LCByZXN1bHQpID0+IHtcbiAgICAgICAgICogICAgIHZhciBicm93c2VycyA9IGRldGVjdE1pbkJyb3dzZXJzQnlDYW5JVXNlKHJvb3QpO1xuICAgICAgICAgKiAgICAgcmVzdWx0Lm1lc3NhZ2VzLnB1c2goe1xuICAgICAgICAgKiAgICAgICB0eXBlOiAgICAnbWluLWJyb3dzZXInLFxuICAgICAgICAgKiAgICAgICBwbHVnaW46ICAncG9zdGNzcy1taW4tYnJvd3NlcicsXG4gICAgICAgICAqICAgICAgIGJyb3dzZXJzOiBicm93c2Vyc1xuICAgICAgICAgKiAgICAgfSk7XG4gICAgICAgICAqICAgfTtcbiAgICAgICAgICogfSk7XG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLm1lc3NhZ2VzID0gW107XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWVtYmVyIHtSb290fSAtIFJvb3Qgbm9kZSBhZnRlciBhbGwgdHJhbnNmb3JtYXRpb25zLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiByb290LnRvUmVzdWx0KCkucm9vdCA9PSByb290O1xuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5yb290ID0gcm9vdDtcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZW1iZXIge3Byb2Nlc3NPcHRpb25zfSAtIE9wdGlvbnMgZnJvbSB0aGUge0BsaW5rIFByb2Nlc3NvciNwcm9jZXNzfVxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvciB7QGxpbmsgUm9vdCN0b1Jlc3VsdH0gY2FsbFxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHByb2R1Y2VkIHRoaXMgUmVzdWx0IGluc3RhbmNlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiByb290LnRvUmVzdWx0KG9wdHMpLm9wdHMgPT0gb3B0cztcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMub3B0cyA9IG9wdHM7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd9IC0gQSBDU1Mgc3RyaW5nIHJlcHJlc2VudGluZyBvZiB7QGxpbmsgUmVzdWx0I3Jvb3R9LlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiBwb3N0Y3NzLnBhcnNlKCdhe30nKS50b1Jlc3VsdCgpLmNzcyAvLz0+IFwiYXt9XCJcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMuY3NzID0gdW5kZWZpbmVkO1xuICAgICAgICAvKipcbiAgICAgICAgICogQG1lbWJlciB7U291cmNlTWFwR2VuZXJhdG9yfSAtIEFuIGluc3RhbmNlIG9mIGBTb3VyY2VNYXBHZW5lcmF0b3JgXG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcyBmcm9tIHRoZSBgc291cmNlLW1hcGAgbGlicmFyeSxcbiAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcHJlc2VudGluZyBjaGFuZ2VzXG4gICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUge0BsaW5rIFJlc3VsdCNyb290fSBpbnN0YW5jZS5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogcmVzdWx0Lm1hcC50b0pTT04oKSAvLz0+IHsgdmVyc2lvbjogMywgZmlsZTogJ2EuY3NzJywg4oCmIH1cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogaWYgKCByZXN1bHQubWFwICkge1xuICAgICAgICAgKiAgIGZzLndyaXRlRmlsZVN5bmMocmVzdWx0Lm9wdHMudG8gKyAnLm1hcCcsIHJlc3VsdC5tYXAudG9TdHJpbmcoKSk7XG4gICAgICAgICAqIH1cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubWFwID0gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgZm9yIEB7bGluayBSZXN1bHQjY3NzfSBjb250ZW50LlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiByZXN1bHQgKyAnJyA9PT0gcmVzdWx0LmNzc1xuICAgICAqXG4gICAgICogQHJldHVybiB7c3RyaW5nfSBzdHJpbmcgcmVwcmVzZW50aW5nIG9mIHtAbGluayBSZXN1bHQjcm9vdH1cbiAgICAgKi9cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3NzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENyZWF0ZXMgYW4gaW5zdGFuY2Ugb2Yge0BsaW5rIFdhcm5pbmd9IGFuZCBhZGRzIGl0XG4gICAgICogdG8ge0BsaW5rIFJlc3VsdCNtZXNzYWdlc30uXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAgICAgICAgLSB3YXJuaW5nIG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdICAgICAgLSB3YXJuaW5nIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge05vZGV9ICAgb3B0cy5ub2RlICAgLSBDU1Mgbm9kZSB0aGF0IGNhdXNlZCB0aGUgd2FybmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLndvcmQgICAtIHdvcmQgaW4gQ1NTIHNvdXJjZSB0aGF0IGNhdXNlZCB0aGUgd2FybmluZ1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLmluZGV4ICAtIGluZGV4IGluIENTUyBub2RlIHN0cmluZyB0aGF0IGNhdXNlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB3YXJuaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMucGx1Z2luIC0gbmFtZSBvZiB0aGUgcGx1Z2luIHRoYXQgY3JlYXRlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgd2FybmluZy4ge0BsaW5rIFJlc3VsdCN3YXJufSBmaWxsc1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcHJvcGVydHkgYXV0b21hdGljYWxseS5cbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dhcm5pbmd9IGNyZWF0ZWQgd2FybmluZ1xuICAgICAqL1xuICAgIHdhcm4odGV4dCwgb3B0cyA9IHsgfSkge1xuICAgICAgICBpZiAoICFvcHRzLnBsdWdpbiApIHtcbiAgICAgICAgICAgIGlmICggdGhpcy5sYXN0UGx1Z2luICYmIHRoaXMubGFzdFBsdWdpbi5wb3N0Y3NzUGx1Z2luICkge1xuICAgICAgICAgICAgICAgIG9wdHMucGx1Z2luID0gdGhpcy5sYXN0UGx1Z2luLnBvc3Rjc3NQbHVnaW47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgd2FybmluZyA9IG5ldyBXYXJuaW5nKHRleHQsIG9wdHMpO1xuICAgICAgICB0aGlzLm1lc3NhZ2VzLnB1c2god2FybmluZyk7XG5cbiAgICAgICAgcmV0dXJuIHdhcm5pbmc7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogUmV0dXJucyB3YXJuaW5ncyBmcm9tIHBsdWdpbnMuIEZpbHRlcnMge0BsaW5rIFdhcm5pbmd9IGluc3RhbmNlc1xuICAgICAqIGZyb20ge0BsaW5rIFJlc3VsdCNtZXNzYWdlc30uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHJlc3VsdC53YXJuaW5ncygpLmZvckVhY2god2FybiA9PiB7XG4gICAgICogICBjb25zb2xlLndhcm4od2Fybi50b1N0cmluZygpKTtcbiAgICAgKiB9KTtcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1dhcm5pbmdbXX0gd2FybmluZ3MgZnJvbSBwbHVnaW5zXG4gICAgICovXG4gICAgd2FybmluZ3MoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1lc3NhZ2VzLmZpbHRlciggaSA9PiBpLnR5cGUgPT09ICd3YXJuaW5nJyApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEFuIGFsaWFzIGZvciB0aGUge0BsaW5rIFJlc3VsdCNjc3N9IHByb3BlcnR5LlxuICAgICAqIFVzZSBpdCB3aXRoIHN5bnRheGVzIHRoYXQgZ2VuZXJhdGUgbm9uLUNTUyBvdXRwdXQuXG4gICAgICogQHR5cGUge3N0cmluZ31cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogcmVzdWx0LmNzcyA9PT0gcmVzdWx0LmNvbnRlbnQ7XG4gICAgICovXG4gICAgZ2V0IGNvbnRlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNzcztcbiAgICB9XG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgUmVzdWx0O1xuXG4vKipcbiAqIEB0eXBlZGVmICB7b2JqZWN0fSBNZXNzYWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gdHlwZSAgIC0gbWVzc2FnZSB0eXBlXG4gKiBAcHJvcGVydHkge3N0cmluZ30gcGx1Z2luIC0gc291cmNlIFBvc3RDU1MgcGx1Z2luIG5hbWVcbiAqL1xuIl19
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/root.js b/node_modules/postcss-reporter/node_modules/postcss/lib/root.js
new file mode 100644
index 00000000..8e90b1b2
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/root.js
@@ -0,0 +1,129 @@
+'use strict';
+
+exports.__esModule = true;
+
+var _container = require('./container');
+
+var _container2 = _interopRequireDefault(_container);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+/**
+ * Represents a CSS file and contains all its parsed nodes.
+ *
+ * @extends Container
+ *
+ * @example
+ * const root = postcss.parse('a{color:black} b{z-index:2}');
+ * root.type //=> 'root'
+ * root.nodes.length //=> 2
+ */
+var Root = function (_Container) {
+ _inherits(Root, _Container);
+
+ function Root(defaults) {
+ _classCallCheck(this, Root);
+
+ var _this = _possibleConstructorReturn(this, _Container.call(this, defaults));
+
+ _this.type = 'root';
+ if (!_this.nodes) _this.nodes = [];
+ return _this;
+ }
+
+ Root.prototype.removeChild = function removeChild(child, ignore) {
+ var index = this.index(child);
+
+ if (!ignore && index === 0 && this.nodes.length > 1) {
+ this.nodes[1].raws.before = this.nodes[index].raws.before;
+ }
+
+ return _Container.prototype.removeChild.call(this, child);
+ };
+
+ Root.prototype.normalize = function normalize(child, sample, type) {
+ var nodes = _Container.prototype.normalize.call(this, child);
+
+ if (sample) {
+ if (type === 'prepend') {
+ if (this.nodes.length > 1) {
+ sample.raws.before = this.nodes[1].raws.before;
+ } else {
+ delete sample.raws.before;
+ }
+ } else if (this.first !== sample) {
+ for (var _iterator = nodes, _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
+ var _ref;
+
+ if (_isArray) {
+ if (_i >= _iterator.length) break;
+ _ref = _iterator[_i++];
+ } else {
+ _i = _iterator.next();
+ if (_i.done) break;
+ _ref = _i.value;
+ }
+
+ var node = _ref;
+
+ node.raws.before = sample.raws.before;
+ }
+ }
+ }
+
+ return nodes;
+ };
+
+ /**
+ * Returns a {@link Result} instance representing the root’s CSS.
+ *
+ * @param {processOptions} [opts] - options with only `to` and `map` keys
+ *
+ * @return {Result} result with current root’s CSS
+ *
+ * @example
+ * const root1 = postcss.parse(css1, { from: 'a.css' });
+ * const root2 = postcss.parse(css2, { from: 'b.css' });
+ * root1.append(root2);
+ * const result = root1.toResult({ to: 'all.css', map: true });
+ */
+
+
+ Root.prototype.toResult = function toResult() {
+ var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
+
+ var LazyResult = require('./lazy-result');
+ var Processor = require('./processor');
+
+ var lazy = new LazyResult(new Processor(), this, opts);
+ return lazy.stringify();
+ };
+
+ /**
+ * @memberof Root#
+ * @member {object} raws - Information to generate byte-to-byte equal
+ * node string as it was in the origin input.
+ *
+ * Every parser saves its own properties,
+ * but the default CSS parser uses:
+ *
+ * * `after`: the space symbols after the last child to the end of file.
+ * * `semicolon`: is the last child has an (optional) semicolon.
+ *
+ * @example
+ * postcss.parse('a {}\n').raws //=> { after: '\n' }
+ * postcss.parse('a {}').raws //=> { after: '' }
+ */
+
+ return Root;
+}(_container2.default);
+
+exports.default = Root;
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJvb3QuZXM2Il0sIm5hbWVzIjpbIlJvb3QiLCJkZWZhdWx0cyIsInR5cGUiLCJub2RlcyIsInJlbW92ZUNoaWxkIiwiY2hpbGQiLCJpZ25vcmUiLCJpbmRleCIsImxlbmd0aCIsInJhd3MiLCJiZWZvcmUiLCJub3JtYWxpemUiLCJzYW1wbGUiLCJmaXJzdCIsIm5vZGUiLCJ0b1Jlc3VsdCIsIm9wdHMiLCJMYXp5UmVzdWx0IiwicmVxdWlyZSIsIlByb2Nlc3NvciIsImxhenkiLCJzdHJpbmdpZnkiLCJDb250YWluZXIiXSwibWFwcGluZ3MiOiI7Ozs7QUFBQTs7Ozs7Ozs7Ozs7O0FBRUE7Ozs7Ozs7Ozs7SUFVTUEsSTs7O0FBRUYsa0JBQVlDLFFBQVosRUFBc0I7QUFBQTs7QUFBQSxxREFDbEIsc0JBQU1BLFFBQU4sQ0FEa0I7O0FBRWxCLGNBQUtDLElBQUwsR0FBWSxNQUFaO0FBQ0EsWUFBSyxDQUFDLE1BQUtDLEtBQVgsRUFBbUIsTUFBS0EsS0FBTCxHQUFhLEVBQWI7QUFIRDtBQUlyQjs7bUJBRURDLFcsd0JBQVlDLEssRUFBT0MsTSxFQUFRO0FBQ3ZCLFlBQU1DLFFBQVEsS0FBS0EsS0FBTCxDQUFXRixLQUFYLENBQWQ7O0FBRUEsWUFBSyxDQUFDQyxNQUFELElBQVdDLFVBQVUsQ0FBckIsSUFBMEIsS0FBS0osS0FBTCxDQUFXSyxNQUFYLEdBQW9CLENBQW5ELEVBQXVEO0FBQ25ELGlCQUFLTCxLQUFMLENBQVcsQ0FBWCxFQUFjTSxJQUFkLENBQW1CQyxNQUFuQixHQUE0QixLQUFLUCxLQUFMLENBQVdJLEtBQVgsRUFBa0JFLElBQWxCLENBQXVCQyxNQUFuRDtBQUNIOztBQUVELGVBQU8scUJBQU1OLFdBQU4sWUFBa0JDLEtBQWxCLENBQVA7QUFDSCxLOzttQkFFRE0sUyxzQkFBVU4sSyxFQUFPTyxNLEVBQVFWLEksRUFBTTtBQUMzQixZQUFJQyxRQUFRLHFCQUFNUSxTQUFOLFlBQWdCTixLQUFoQixDQUFaOztBQUVBLFlBQUtPLE1BQUwsRUFBYztBQUNWLGdCQUFLVixTQUFTLFNBQWQsRUFBMEI7QUFDdEIsb0JBQUssS0FBS0MsS0FBTCxDQUFXSyxNQUFYLEdBQW9CLENBQXpCLEVBQTZCO0FBQ3pCSSwyQkFBT0gsSUFBUCxDQUFZQyxNQUFaLEdBQXFCLEtBQUtQLEtBQUwsQ0FBVyxDQUFYLEVBQWNNLElBQWQsQ0FBbUJDLE1BQXhDO0FBQ0gsaUJBRkQsTUFFTztBQUNILDJCQUFPRSxPQUFPSCxJQUFQLENBQVlDLE1BQW5CO0FBQ0g7QUFDSixhQU5ELE1BTU8sSUFBSyxLQUFLRyxLQUFMLEtBQWVELE1BQXBCLEVBQTZCO0FBQ2hDLHFDQUFrQlQsS0FBbEIsa0hBQTBCO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFBQSx3QkFBaEJXLElBQWdCOztBQUN0QkEseUJBQUtMLElBQUwsQ0FBVUMsTUFBVixHQUFtQkUsT0FBT0gsSUFBUCxDQUFZQyxNQUEvQjtBQUNIO0FBQ0o7QUFDSjs7QUFFRCxlQUFPUCxLQUFQO0FBQ0gsSzs7QUFFRDs7Ozs7Ozs7Ozs7Ozs7O21CQWFBWSxRLHVCQUFxQjtBQUFBLFlBQVpDLElBQVksdUVBQUwsRUFBSzs7QUFDakIsWUFBSUMsYUFBYUMsUUFBUSxlQUFSLENBQWpCO0FBQ0EsWUFBSUMsWUFBYUQsUUFBUSxhQUFSLENBQWpCOztBQUVBLFlBQUlFLE9BQU8sSUFBSUgsVUFBSixDQUFlLElBQUlFLFNBQUosRUFBZixFQUFnQyxJQUFoQyxFQUFzQ0gsSUFBdEMsQ0FBWDtBQUNBLGVBQU9JLEtBQUtDLFNBQUwsRUFBUDtBQUNILEs7O0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBM0RlQyxtQjs7a0JBNkVKdEIsSSIsImZpbGUiOiJyb290LmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IENvbnRhaW5lciBmcm9tICcuL2NvbnRhaW5lcic7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIENTUyBmaWxlIGFuZCBjb250YWlucyBhbGwgaXRzIHBhcnNlZCBub2Rlcy5cbiAqXG4gKiBAZXh0ZW5kcyBDb250YWluZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgcm9vdCA9IHBvc3Rjc3MucGFyc2UoJ2F7Y29sb3I6YmxhY2t9IGJ7ei1pbmRleDoyfScpO1xuICogcm9vdC50eXBlICAgICAgICAgLy89PiAncm9vdCdcbiAqIHJvb3Qubm9kZXMubGVuZ3RoIC8vPT4gMlxuICovXG5jbGFzcyBSb290IGV4dGVuZHMgQ29udGFpbmVyIHtcblxuICAgIGNvbnN0cnVjdG9yKGRlZmF1bHRzKSB7XG4gICAgICAgIHN1cGVyKGRlZmF1bHRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gJ3Jvb3QnO1xuICAgICAgICBpZiAoICF0aGlzLm5vZGVzICkgdGhpcy5ub2RlcyA9IFtdO1xuICAgIH1cblxuICAgIHJlbW92ZUNoaWxkKGNoaWxkLCBpZ25vcmUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLmluZGV4KGNoaWxkKTtcblxuICAgICAgICBpZiAoICFpZ25vcmUgJiYgaW5kZXggPT09IDAgJiYgdGhpcy5ub2Rlcy5sZW5ndGggPiAxICkge1xuICAgICAgICAgICAgdGhpcy5ub2Rlc1sxXS5yYXdzLmJlZm9yZSA9IHRoaXMubm9kZXNbaW5kZXhdLnJhd3MuYmVmb3JlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1cGVyLnJlbW92ZUNoaWxkKGNoaWxkKTtcbiAgICB9XG5cbiAgICBub3JtYWxpemUoY2hpbGQsIHNhbXBsZSwgdHlwZSkge1xuICAgICAgICBsZXQgbm9kZXMgPSBzdXBlci5ub3JtYWxpemUoY2hpbGQpO1xuXG4gICAgICAgIGlmICggc2FtcGxlICkge1xuICAgICAgICAgICAgaWYgKCB0eXBlID09PSAncHJlcGVuZCcgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCB0aGlzLm5vZGVzLmxlbmd0aCA+IDEgKSB7XG4gICAgICAgICAgICAgICAgICAgIHNhbXBsZS5yYXdzLmJlZm9yZSA9IHRoaXMubm9kZXNbMV0ucmF3cy5iZWZvcmU7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHNhbXBsZS5yYXdzLmJlZm9yZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCB0aGlzLmZpcnN0ICE9PSBzYW1wbGUgKSB7XG4gICAgICAgICAgICAgICAgZm9yICggbGV0IG5vZGUgb2Ygbm9kZXMgKSB7XG4gICAgICAgICAgICAgICAgICAgIG5vZGUucmF3cy5iZWZvcmUgPSBzYW1wbGUucmF3cy5iZWZvcmU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG5vZGVzO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgYSB7QGxpbmsgUmVzdWx0fSBpbnN0YW5jZSByZXByZXNlbnRpbmcgdGhlIHJvb3TigJlzIENTUy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7cHJvY2Vzc09wdGlvbnN9IFtvcHRzXSAtIG9wdGlvbnMgd2l0aCBvbmx5IGB0b2AgYW5kIGBtYXBgIGtleXNcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge1Jlc3VsdH0gcmVzdWx0IHdpdGggY3VycmVudCByb2904oCZcyBDU1NcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogY29uc3Qgcm9vdDEgPSBwb3N0Y3NzLnBhcnNlKGNzczEsIHsgZnJvbTogJ2EuY3NzJyB9KTtcbiAgICAgKiBjb25zdCByb290MiA9IHBvc3Rjc3MucGFyc2UoY3NzMiwgeyBmcm9tOiAnYi5jc3MnIH0pO1xuICAgICAqIHJvb3QxLmFwcGVuZChyb290Mik7XG4gICAgICogY29uc3QgcmVzdWx0ID0gcm9vdDEudG9SZXN1bHQoeyB0bzogJ2FsbC5jc3MnLCBtYXA6IHRydWUgfSk7XG4gICAgICovXG4gICAgdG9SZXN1bHQob3B0cyA9IHsgfSkge1xuICAgICAgICBsZXQgTGF6eVJlc3VsdCA9IHJlcXVpcmUoJy4vbGF6eS1yZXN1bHQnKTtcbiAgICAgICAgbGV0IFByb2Nlc3NvciAgPSByZXF1aXJlKCcuL3Byb2Nlc3NvcicpO1xuXG4gICAgICAgIGxldCBsYXp5ID0gbmV3IExhenlSZXN1bHQobmV3IFByb2Nlc3NvcigpLCB0aGlzLCBvcHRzKTtcbiAgICAgICAgcmV0dXJuIGxhenkuc3RyaW5naWZ5KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIFJvb3QjXG4gICAgICogQG1lbWJlciB7b2JqZWN0fSByYXdzIC0gSW5mb3JtYXRpb24gdG8gZ2VuZXJhdGUgYnl0ZS10by1ieXRlIGVxdWFsXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgbm9kZSBzdHJpbmcgYXMgaXQgd2FzIGluIHRoZSBvcmlnaW4gaW5wdXQuXG4gICAgICpcbiAgICAgKiBFdmVyeSBwYXJzZXIgc2F2ZXMgaXRzIG93biBwcm9wZXJ0aWVzLFxuICAgICAqIGJ1dCB0aGUgZGVmYXVsdCBDU1MgcGFyc2VyIHVzZXM6XG4gICAgICpcbiAgICAgKiAqIGBhZnRlcmA6IHRoZSBzcGFjZSBzeW1ib2xzIGFmdGVyIHRoZSBsYXN0IGNoaWxkIHRvIHRoZSBlbmQgb2YgZmlsZS5cbiAgICAgKiAqIGBzZW1pY29sb25gOiBpcyB0aGUgbGFzdCBjaGlsZCBoYXMgYW4gKG9wdGlvbmFsKSBzZW1pY29sb24uXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHBvc3Rjc3MucGFyc2UoJ2Ege31cXG4nKS5yYXdzIC8vPT4geyBhZnRlcjogJ1xcbicgfVxuICAgICAqIHBvc3Rjc3MucGFyc2UoJ2Ege30nKS5yYXdzICAgLy89PiB7IGFmdGVyOiAnJyB9XG4gICAgICovXG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgUm9vdDtcbiJdfQ==
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/rule.js b/node_modules/postcss-reporter/node_modules/postcss/lib/rule.js
new file mode 100644
index 00000000..65089ef5
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/rule.js
@@ -0,0 +1,123 @@
+'use strict';
+
+exports.__esModule = true;
+
+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; }; }();
+
+var _container = require('./container');
+
+var _container2 = _interopRequireDefault(_container);
+
+var _list = require('./list');
+
+var _list2 = _interopRequireDefault(_list);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; }
+
+function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
+
+/**
+ * Represents a CSS rule: a selector followed by a declaration block.
+ *
+ * @extends Container
+ *
+ * @example
+ * const root = postcss.parse('a{}');
+ * const rule = root.first;
+ * rule.type //=> 'rule'
+ * rule.toString() //=> 'a{}'
+ */
+var Rule = function (_Container) {
+ _inherits(Rule, _Container);
+
+ function Rule(defaults) {
+ _classCallCheck(this, Rule);
+
+ var _this = _possibleConstructorReturn(this, _Container.call(this, defaults));
+
+ _this.type = 'rule';
+ if (!_this.nodes) _this.nodes = [];
+ return _this;
+ }
+
+ /**
+ * An array containing the rule’s individual selectors.
+ * Groups of selectors are split at commas.
+ *
+ * @type {string[]}
+ *
+ * @example
+ * const root = postcss.parse('a, b { }');
+ * const rule = root.first;
+ *
+ * rule.selector //=> 'a, b'
+ * rule.selectors //=> ['a', 'b']
+ *
+ * rule.selectors = ['a', 'strong'];
+ * rule.selector //=> 'a, strong'
+ */
+
+
+ _createClass(Rule, [{
+ key: 'selectors',
+ get: function get() {
+ return _list2.default.comma(this.selector);
+ },
+ set: function set(values) {
+ var match = this.selector ? this.selector.match(/,\s*/) : null;
+ var sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen');
+ this.selector = values.join(sep);
+ }
+
+ /**
+ * @memberof Rule#
+ * @member {string} selector - the rule’s full selector represented
+ * as a string
+ *
+ * @example
+ * const root = postcss.parse('a, b { }');
+ * const rule = root.first;
+ * rule.selector //=> 'a, b'
+ */
+
+ /**
+ * @memberof Rule#
+ * @member {object} raws - Information to generate byte-to-byte equal
+ * node string as it was in the origin input.
+ *
+ * Every parser saves its own properties,
+ * but the default CSS parser uses:
+ *
+ * * `before`: the space symbols before the node. It also stores `*`
+ * and `_` symbols before the declaration (IE hack).
+ * * `after`: the space symbols after the last child of the node
+ * to the end of the node.
+ * * `between`: the symbols between the property and value
+ * for declarations, selector and `{` for rules, or last parameter
+ * and `{` for at-rules.
+ * * `semicolon`: contains `true` if the last child has
+ * an (optional) semicolon.
+ * * `ownSemicolon`: contains `true` if there is semicolon after rule.
+ *
+ * PostCSS cleans selectors from comments and extra spaces,
+ * but it stores origin content in raws properties.
+ * As such, if you don’t change a declaration’s value,
+ * PostCSS will use the raw value with comments.
+ *
+ * @example
+ * const root = postcss.parse('a {\n color:black\n}')
+ * root.first.first.raws //=> { before: '', between: ' ', after: '\n' }
+ */
+
+ }]);
+
+ return Rule;
+}(_container2.default);
+
+exports.default = Rule;
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInJ1bGUuZXM2Il0sIm5hbWVzIjpbIlJ1bGUiLCJkZWZhdWx0cyIsInR5cGUiLCJub2RlcyIsImxpc3QiLCJjb21tYSIsInNlbGVjdG9yIiwidmFsdWVzIiwibWF0Y2giLCJzZXAiLCJyYXciLCJqb2luIiwiQ29udGFpbmVyIl0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTs7OztBQUNBOzs7Ozs7Ozs7Ozs7QUFFQTs7Ozs7Ozs7Ozs7SUFXTUEsSTs7O0FBRUYsZ0JBQVlDLFFBQVosRUFBc0I7QUFBQTs7QUFBQSxpREFDbEIsc0JBQU1BLFFBQU4sQ0FEa0I7O0FBRWxCLFVBQUtDLElBQUwsR0FBWSxNQUFaO0FBQ0EsUUFBSyxDQUFDLE1BQUtDLEtBQVgsRUFBbUIsTUFBS0EsS0FBTCxHQUFhLEVBQWI7QUFIRDtBQUlyQjs7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7d0JBZ0JnQjtBQUNaLGFBQU9DLGVBQUtDLEtBQUwsQ0FBVyxLQUFLQyxRQUFoQixDQUFQO0FBQ0gsSztzQkFFYUMsTSxFQUFRO0FBQ2xCLFVBQUlDLFFBQVEsS0FBS0YsUUFBTCxHQUFnQixLQUFLQSxRQUFMLENBQWNFLEtBQWQsQ0FBb0IsTUFBcEIsQ0FBaEIsR0FBOEMsSUFBMUQ7QUFDQSxVQUFJQyxNQUFRRCxRQUFRQSxNQUFNLENBQU4sQ0FBUixHQUFtQixNQUFNLEtBQUtFLEdBQUwsQ0FBUyxTQUFULEVBQW9CLFlBQXBCLENBQXJDO0FBQ0EsV0FBS0osUUFBTCxHQUFnQkMsT0FBT0ksSUFBUCxDQUFZRixHQUFaLENBQWhCO0FBQ0g7O0FBRUQ7Ozs7Ozs7Ozs7O0FBV0E7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBN0NlRyxtQjs7a0JBNEVKWixJIiwiZmlsZSI6InJ1bGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgQ29udGFpbmVyIGZyb20gJy4vY29udGFpbmVyJztcbmltcG9ydCBsaXN0ICAgICAgZnJvbSAnLi9saXN0JztcblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgQ1NTIHJ1bGU6IGEgc2VsZWN0b3IgZm9sbG93ZWQgYnkgYSBkZWNsYXJhdGlvbiBibG9jay5cbiAqXG4gKiBAZXh0ZW5kcyBDb250YWluZXJcbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3Qgcm9vdCA9IHBvc3Rjc3MucGFyc2UoJ2F7fScpO1xuICogY29uc3QgcnVsZSA9IHJvb3QuZmlyc3Q7XG4gKiBydWxlLnR5cGUgICAgICAgLy89PiAncnVsZSdcbiAqIHJ1bGUudG9TdHJpbmcoKSAvLz0+ICdhe30nXG4gKi9cbmNsYXNzIFJ1bGUgZXh0ZW5kcyBDb250YWluZXIge1xuXG4gICAgY29uc3RydWN0b3IoZGVmYXVsdHMpIHtcbiAgICAgICAgc3VwZXIoZGVmYXVsdHMpO1xuICAgICAgICB0aGlzLnR5cGUgPSAncnVsZSc7XG4gICAgICAgIGlmICggIXRoaXMubm9kZXMgKSB0aGlzLm5vZGVzID0gW107XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQW4gYXJyYXkgY29udGFpbmluZyB0aGUgcnVsZeKAmXMgaW5kaXZpZHVhbCBzZWxlY3RvcnMuXG4gICAgICogR3JvdXBzIG9mIHNlbGVjdG9ycyBhcmUgc3BsaXQgYXQgY29tbWFzLlxuICAgICAqXG4gICAgICogQHR5cGUge3N0cmluZ1tdfVxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZSgnYSwgYiB7IH0nKTtcbiAgICAgKiBjb25zdCBydWxlID0gcm9vdC5maXJzdDtcbiAgICAgKlxuICAgICAqIHJ1bGUuc2VsZWN0b3IgIC8vPT4gJ2EsIGInXG4gICAgICogcnVsZS5zZWxlY3RvcnMgLy89PiBbJ2EnLCAnYiddXG4gICAgICpcbiAgICAgKiBydWxlLnNlbGVjdG9ycyA9IFsnYScsICdzdHJvbmcnXTtcbiAgICAgKiBydWxlLnNlbGVjdG9yIC8vPT4gJ2EsIHN0cm9uZydcbiAgICAgKi9cbiAgICBnZXQgc2VsZWN0b3JzKCkge1xuICAgICAgICByZXR1cm4gbGlzdC5jb21tYSh0aGlzLnNlbGVjdG9yKTtcbiAgICB9XG5cbiAgICBzZXQgc2VsZWN0b3JzKHZhbHVlcykge1xuICAgICAgICBsZXQgbWF0Y2ggPSB0aGlzLnNlbGVjdG9yID8gdGhpcy5zZWxlY3Rvci5tYXRjaCgvLFxccyovKSA6IG51bGw7XG4gICAgICAgIGxldCBzZXAgICA9IG1hdGNoID8gbWF0Y2hbMF0gOiAnLCcgKyB0aGlzLnJhdygnYmV0d2VlbicsICdiZWZvcmVPcGVuJyk7XG4gICAgICAgIHRoaXMuc2VsZWN0b3IgPSB2YWx1ZXMuam9pbihzZXApO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBtZW1iZXJvZiBSdWxlI1xuICAgICAqIEBtZW1iZXIge3N0cmluZ30gc2VsZWN0b3IgLSB0aGUgcnVsZeKAmXMgZnVsbCBzZWxlY3RvciByZXByZXNlbnRlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBhIHN0cmluZ1xuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZSgnYSwgYiB7IH0nKTtcbiAgICAgKiBjb25zdCBydWxlID0gcm9vdC5maXJzdDtcbiAgICAgKiBydWxlLnNlbGVjdG9yIC8vPT4gJ2EsIGInXG4gICAgICovXG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgUnVsZSNcbiAgICAgKiBAbWVtYmVyIHtvYmplY3R9IHJhd3MgLSBJbmZvcm1hdGlvbiB0byBnZW5lcmF0ZSBieXRlLXRvLWJ5dGUgZXF1YWxcbiAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlIHN0cmluZyBhcyBpdCB3YXMgaW4gdGhlIG9yaWdpbiBpbnB1dC5cbiAgICAgKlxuICAgICAqIEV2ZXJ5IHBhcnNlciBzYXZlcyBpdHMgb3duIHByb3BlcnRpZXMsXG4gICAgICogYnV0IHRoZSBkZWZhdWx0IENTUyBwYXJzZXIgdXNlczpcbiAgICAgKlxuICAgICAqICogYGJlZm9yZWA6IHRoZSBzcGFjZSBzeW1ib2xzIGJlZm9yZSB0aGUgbm9kZS4gSXQgYWxzbyBzdG9yZXMgYCpgXG4gICAgICogICBhbmQgYF9gIHN5bWJvbHMgYmVmb3JlIHRoZSBkZWNsYXJhdGlvbiAoSUUgaGFjaykuXG4gICAgICogKiBgYWZ0ZXJgOiB0aGUgc3BhY2Ugc3ltYm9scyBhZnRlciB0aGUgbGFzdCBjaGlsZCBvZiB0aGUgbm9kZVxuICAgICAqICAgdG8gdGhlIGVuZCBvZiB0aGUgbm9kZS5cbiAgICAgKiAqIGBiZXR3ZWVuYDogdGhlIHN5bWJvbHMgYmV0d2VlbiB0aGUgcHJvcGVydHkgYW5kIHZhbHVlXG4gICAgICogICBmb3IgZGVjbGFyYXRpb25zLCBzZWxlY3RvciBhbmQgYHtgIGZvciBydWxlcywgb3IgbGFzdCBwYXJhbWV0ZXJcbiAgICAgKiAgIGFuZCBge2AgZm9yIGF0LXJ1bGVzLlxuICAgICAqICogYHNlbWljb2xvbmA6IGNvbnRhaW5zIGB0cnVlYCBpZiB0aGUgbGFzdCBjaGlsZCBoYXNcbiAgICAgKiAgIGFuIChvcHRpb25hbCkgc2VtaWNvbG9uLlxuICAgICAqICogYG93blNlbWljb2xvbmA6IGNvbnRhaW5zIGB0cnVlYCBpZiB0aGVyZSBpcyBzZW1pY29sb24gYWZ0ZXIgcnVsZS5cbiAgICAgKlxuICAgICAqIFBvc3RDU1MgY2xlYW5zIHNlbGVjdG9ycyBmcm9tIGNvbW1lbnRzIGFuZCBleHRyYSBzcGFjZXMsXG4gICAgICogYnV0IGl0IHN0b3JlcyBvcmlnaW4gY29udGVudCBpbiByYXdzIHByb3BlcnRpZXMuXG4gICAgICogQXMgc3VjaCwgaWYgeW91IGRvbuKAmXQgY2hhbmdlIGEgZGVjbGFyYXRpb27igJlzIHZhbHVlLFxuICAgICAqIFBvc3RDU1Mgd2lsbCB1c2UgdGhlIHJhdyB2YWx1ZSB3aXRoIGNvbW1lbnRzLlxuICAgICAqXG4gICAgICogQGV4YW1wbGVcbiAgICAgKiBjb25zdCByb290ID0gcG9zdGNzcy5wYXJzZSgnYSB7XFxuICBjb2xvcjpibGFja1xcbn0nKVxuICAgICAqIHJvb3QuZmlyc3QuZmlyc3QucmF3cyAvLz0+IHsgYmVmb3JlOiAnJywgYmV0d2VlbjogJyAnLCBhZnRlcjogJ1xcbicgfVxuICAgICAqL1xuXG59XG5cbmV4cG9ydCBkZWZhdWx0IFJ1bGU7XG4iXX0=
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/stringifier.js b/node_modules/postcss-reporter/node_modules/postcss/lib/stringifier.js
new file mode 100644
index 00000000..db089d52
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/stringifier.js
@@ -0,0 +1,344 @@
+'use strict';
+
+exports.__esModule = true;
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+var defaultRaw = {
+ colon: ': ',
+ indent: ' ',
+ beforeDecl: '\n',
+ beforeRule: '\n',
+ beforeOpen: ' ',
+ beforeClose: '\n',
+ beforeComment: '\n',
+ after: '\n',
+ emptyBody: '',
+ commentLeft: ' ',
+ commentRight: ' '
+};
+
+function capitalize(str) {
+ return str[0].toUpperCase() + str.slice(1);
+}
+
+var Stringifier = function () {
+ function Stringifier(builder) {
+ _classCallCheck(this, Stringifier);
+
+ this.builder = builder;
+ }
+
+ Stringifier.prototype.stringify = function stringify(node, semicolon) {
+ this[node.type](node, semicolon);
+ };
+
+ Stringifier.prototype.root = function root(node) {
+ this.body(node);
+ if (node.raws.after) this.builder(node.raws.after);
+ };
+
+ Stringifier.prototype.comment = function comment(node) {
+ var left = this.raw(node, 'left', 'commentLeft');
+ var right = this.raw(node, 'right', 'commentRight');
+ this.builder('/*' + left + node.text + right + '*/', node);
+ };
+
+ Stringifier.prototype.decl = function decl(node, semicolon) {
+ var between = this.raw(node, 'between', 'colon');
+ var string = node.prop + between + this.rawValue(node, 'value');
+
+ if (node.important) {
+ string += node.raws.important || ' !important';
+ }
+
+ if (semicolon) string += ';';
+ this.builder(string, node);
+ };
+
+ Stringifier.prototype.rule = function rule(node) {
+ this.block(node, this.rawValue(node, 'selector'));
+ if (node.raws.ownSemicolon) {
+ this.builder(node.raws.ownSemicolon, node, 'end');
+ }
+ };
+
+ Stringifier.prototype.atrule = function atrule(node, semicolon) {
+ var name = '@' + node.name;
+ var params = node.params ? this.rawValue(node, 'params') : '';
+
+ if (typeof node.raws.afterName !== 'undefined') {
+ name += node.raws.afterName;
+ } else if (params) {
+ name += ' ';
+ }
+
+ if (node.nodes) {
+ this.block(node, name + params);
+ } else {
+ var end = (node.raws.between || '') + (semicolon ? ';' : '');
+ this.builder(name + params + end, node);
+ }
+ };
+
+ Stringifier.prototype.body = function body(node) {
+ var last = node.nodes.length - 1;
+ while (last > 0) {
+ if (node.nodes[last].type !== 'comment') break;
+ last -= 1;
+ }
+
+ var semicolon = this.raw(node, 'semicolon');
+ for (var i = 0; i < node.nodes.length; i++) {
+ var child = node.nodes[i];
+ var before = this.raw(child, 'before');
+ if (before) this.builder(before);
+ this.stringify(child, last !== i || semicolon);
+ }
+ };
+
+ Stringifier.prototype.block = function block(node, start) {
+ var between = this.raw(node, 'between', 'beforeOpen');
+ this.builder(start + between + '{', node, 'start');
+
+ var after = void 0;
+ if (node.nodes && node.nodes.length) {
+ this.body(node);
+ after = this.raw(node, 'after');
+ } else {
+ after = this.raw(node, 'after', 'emptyBody');
+ }
+
+ if (after) this.builder(after);
+ this.builder('}', node, 'end');
+ };
+
+ Stringifier.prototype.raw = function raw(node, own, detect) {
+ var value = void 0;
+ if (!detect) detect = own;
+
+ // Already had
+ if (own) {
+ value = node.raws[own];
+ if (typeof value !== 'undefined') return value;
+ }
+
+ var parent = node.parent;
+
+ // Hack for first rule in CSS
+ if (detect === 'before') {
+ if (!parent || parent.type === 'root' && parent.first === node) {
+ return '';
+ }
+ }
+
+ // Floating child without parent
+ if (!parent) return defaultRaw[detect];
+
+ // Detect style by other nodes
+ var root = node.root();
+ if (!root.rawCache) root.rawCache = {};
+ if (typeof root.rawCache[detect] !== 'undefined') {
+ return root.rawCache[detect];
+ }
+
+ if (detect === 'before' || detect === 'after') {
+ return this.beforeAfter(node, detect);
+ } else {
+ var method = 'raw' + capitalize(detect);
+ if (this[method]) {
+ value = this[method](root, node);
+ } else {
+ root.walk(function (i) {
+ value = i.raws[own];
+ if (typeof value !== 'undefined') return false;
+ });
+ }
+ }
+
+ if (typeof value === 'undefined') value = defaultRaw[detect];
+
+ root.rawCache[detect] = value;
+ return value;
+ };
+
+ Stringifier.prototype.rawSemicolon = function rawSemicolon(root) {
+ var value = void 0;
+ root.walk(function (i) {
+ if (i.nodes && i.nodes.length && i.last.type === 'decl') {
+ value = i.raws.semicolon;
+ if (typeof value !== 'undefined') return false;
+ }
+ });
+ return value;
+ };
+
+ Stringifier.prototype.rawEmptyBody = function rawEmptyBody(root) {
+ var value = void 0;
+ root.walk(function (i) {
+ if (i.nodes && i.nodes.length === 0) {
+ value = i.raws.after;
+ if (typeof value !== 'undefined') return false;
+ }
+ });
+ return value;
+ };
+
+ Stringifier.prototype.rawIndent = function rawIndent(root) {
+ if (root.raws.indent) return root.raws.indent;
+ var value = void 0;
+ root.walk(function (i) {
+ var p = i.parent;
+ if (p && p !== root && p.parent && p.parent === root) {
+ if (typeof i.raws.before !== 'undefined') {
+ var parts = i.raws.before.split('\n');
+ value = parts[parts.length - 1];
+ value = value.replace(/[^\s]/g, '');
+ return false;
+ }
+ }
+ });
+ return value;
+ };
+
+ Stringifier.prototype.rawBeforeComment = function rawBeforeComment(root, node) {
+ var value = void 0;
+ root.walkComments(function (i) {
+ if (typeof i.raws.before !== 'undefined') {
+ value = i.raws.before;
+ if (value.indexOf('\n') !== -1) {
+ value = value.replace(/[^\n]+$/, '');
+ }
+ return false;
+ }
+ });
+ if (typeof value === 'undefined') {
+ value = this.raw(node, null, 'beforeDecl');
+ } else if (value) {
+ value = value.replace(/[^\s]/g, '');
+ }
+ return value;
+ };
+
+ Stringifier.prototype.rawBeforeDecl = function rawBeforeDecl(root, node) {
+ var value = void 0;
+ root.walkDecls(function (i) {
+ if (typeof i.raws.before !== 'undefined') {
+ value = i.raws.before;
+ if (value.indexOf('\n') !== -1) {
+ value = value.replace(/[^\n]+$/, '');
+ }
+ return false;
+ }
+ });
+ if (typeof value === 'undefined') {
+ value = this.raw(node, null, 'beforeRule');
+ } else if (value) {
+ value = value.replace(/[^\s]/g, '');
+ }
+ return value;
+ };
+
+ Stringifier.prototype.rawBeforeRule = function rawBeforeRule(root) {
+ var value = void 0;
+ root.walk(function (i) {
+ if (i.nodes && (i.parent !== root || root.first !== i)) {
+ if (typeof i.raws.before !== 'undefined') {
+ value = i.raws.before;
+ if (value.indexOf('\n') !== -1) {
+ value = value.replace(/[^\n]+$/, '');
+ }
+ return false;
+ }
+ }
+ });
+ if (value) value = value.replace(/[^\s]/g, '');
+ return value;
+ };
+
+ Stringifier.prototype.rawBeforeClose = function rawBeforeClose(root) {
+ var value = void 0;
+ root.walk(function (i) {
+ if (i.nodes && i.nodes.length > 0) {
+ if (typeof i.raws.after !== 'undefined') {
+ value = i.raws.after;
+ if (value.indexOf('\n') !== -1) {
+ value = value.replace(/[^\n]+$/, '');
+ }
+ return false;
+ }
+ }
+ });
+ if (value) value = value.replace(/[^\s]/g, '');
+ return value;
+ };
+
+ Stringifier.prototype.rawBeforeOpen = function rawBeforeOpen(root) {
+ var value = void 0;
+ root.walk(function (i) {
+ if (i.type !== 'decl') {
+ value = i.raws.between;
+ if (typeof value !== 'undefined') return false;
+ }
+ });
+ return value;
+ };
+
+ Stringifier.prototype.rawColon = function rawColon(root) {
+ var value = void 0;
+ root.walkDecls(function (i) {
+ if (typeof i.raws.between !== 'undefined') {
+ value = i.raws.between.replace(/[^\s:]/g, '');
+ return false;
+ }
+ });
+ return value;
+ };
+
+ Stringifier.prototype.beforeAfter = function beforeAfter(node, detect) {
+ var value = void 0;
+ if (node.type === 'decl') {
+ value = this.raw(node, null, 'beforeDecl');
+ } else if (node.type === 'comment') {
+ value = this.raw(node, null, 'beforeComment');
+ } else if (detect === 'before') {
+ value = this.raw(node, null, 'beforeRule');
+ } else {
+ value = this.raw(node, null, 'beforeClose');
+ }
+
+ var buf = node.parent;
+ var depth = 0;
+ while (buf && buf.type !== 'root') {
+ depth += 1;
+ buf = buf.parent;
+ }
+
+ if (value.indexOf('\n') !== -1) {
+ var indent = this.raw(node, null, 'indent');
+ if (indent.length) {
+ for (var step = 0; step < depth; step++) {
+ value += indent;
+ }
+ }
+ }
+
+ return value;
+ };
+
+ Stringifier.prototype.rawValue = function rawValue(node, prop) {
+ var value = node[prop];
+ var raw = node.raws[prop];
+ if (raw && raw.value === value) {
+ return raw.raw;
+ } else {
+ return value;
+ }
+ };
+
+ return Stringifier;
+}();
+
+exports.default = Stringifier;
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0cmluZ2lmaWVyLmVzNiJdLCJuYW1lcyI6WyJkZWZhdWx0UmF3IiwiY29sb24iLCJpbmRlbnQiLCJiZWZvcmVEZWNsIiwiYmVmb3JlUnVsZSIsImJlZm9yZU9wZW4iLCJiZWZvcmVDbG9zZSIsImJlZm9yZUNvbW1lbnQiLCJhZnRlciIsImVtcHR5Qm9keSIsImNvbW1lbnRMZWZ0IiwiY29tbWVudFJpZ2h0IiwiY2FwaXRhbGl6ZSIsInN0ciIsInRvVXBwZXJDYXNlIiwic2xpY2UiLCJTdHJpbmdpZmllciIsImJ1aWxkZXIiLCJzdHJpbmdpZnkiLCJub2RlIiwic2VtaWNvbG9uIiwidHlwZSIsInJvb3QiLCJib2R5IiwicmF3cyIsImNvbW1lbnQiLCJsZWZ0IiwicmF3IiwicmlnaHQiLCJ0ZXh0IiwiZGVjbCIsImJldHdlZW4iLCJzdHJpbmciLCJwcm9wIiwicmF3VmFsdWUiLCJpbXBvcnRhbnQiLCJydWxlIiwiYmxvY2siLCJvd25TZW1pY29sb24iLCJhdHJ1bGUiLCJuYW1lIiwicGFyYW1zIiwiYWZ0ZXJOYW1lIiwibm9kZXMiLCJlbmQiLCJsYXN0IiwibGVuZ3RoIiwiaSIsImNoaWxkIiwiYmVmb3JlIiwic3RhcnQiLCJvd24iLCJkZXRlY3QiLCJ2YWx1ZSIsInBhcmVudCIsImZpcnN0IiwicmF3Q2FjaGUiLCJiZWZvcmVBZnRlciIsIm1ldGhvZCIsIndhbGsiLCJyYXdTZW1pY29sb24iLCJyYXdFbXB0eUJvZHkiLCJyYXdJbmRlbnQiLCJwIiwicGFydHMiLCJzcGxpdCIsInJlcGxhY2UiLCJyYXdCZWZvcmVDb21tZW50Iiwid2Fsa0NvbW1lbnRzIiwiaW5kZXhPZiIsInJhd0JlZm9yZURlY2wiLCJ3YWxrRGVjbHMiLCJyYXdCZWZvcmVSdWxlIiwicmF3QmVmb3JlQ2xvc2UiLCJyYXdCZWZvcmVPcGVuIiwicmF3Q29sb24iLCJidWYiLCJkZXB0aCIsInN0ZXAiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLElBQU1BLGFBQWE7QUFDZkMsV0FBZSxJQURB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QWtDO0FBQzlCLG1CQUFPMUIsSUFBSUEsR0FBWDtBQUNILFNBRkQsTUFFTztBQUNILG1CQUFPMEIsS0FBUDtBQUNIO0FBQ0osSzs7Ozs7a0JBSVVyQyxXIiwiZmlsZSI6InN0cmluZ2lmaWVyLmpzIiwic291cmNlc0NvbnRlbnQiOlsiY29uc3QgZGVmYXVsdFJhdyA9IHtcbiAgICBjb2xvbjogICAgICAgICAnOiAnLFxuICAgIGluZGVudDogICAgICAgICcgICAgJyxcbiAgICBiZWZvcmVEZWNsOiAgICAnXFxuJyxcbiAgICBiZWZvcmVSdWxlOiAgICAnXFxuJyxcbiAgICBiZWZvcmVPcGVuOiAgICAnICcsXG4gICAgYmVmb3JlQ2xvc2U6ICAgJ1xcbicsXG4gICAgYmVmb3JlQ29tbWVudDogJ1xcbicsXG4gICAgYWZ0ZXI6ICAgICAgICAgJ1xcbicsXG4gICAgZW1wdHlCb2R5OiAgICAgJycsXG4gICAgY29tbWVudExlZnQ6ICAgJyAnLFxuICAgIGNvbW1lbnRSaWdodDogICcgJ1xufTtcblxuZnVuY3Rpb24gY2FwaXRhbGl6ZShzdHIpIHtcbiAgICByZXR1cm4gc3RyWzBdLnRvVXBwZXJDYXNlKCkgKyBzdHIuc2xpY2UoMSk7XG59XG5cbmNsYXNzIFN0cmluZ2lmaWVyIHtcblxuICAgIGNvbnN0cnVjdG9yKGJ1aWxkZXIpIHtcbiAgICAgICAgdGhpcy5idWlsZGVyID0gYnVpbGRlcjtcbiAgICB9XG5cbiAgICBzdHJpbmdpZnkobm9kZSwgc2VtaWNvbG9uKSB7XG4gICAgICAgIHRoaXNbbm9kZS50eXBlXShub2RlLCBzZW1pY29sb24pO1xuICAgIH1cblxuICAgIHJvb3Qobm9kZSkge1xuICAgICAgICB0aGlzLmJvZHkobm9kZSk7XG4gICAgICAgIGlmICggbm9kZS5yYXdzLmFmdGVyICkgdGhpcy5idWlsZGVyKG5vZGUucmF3cy5hZnRlcik7XG4gICAgfVxuXG4gICAgY29tbWVudChub2RlKSB7XG4gICAgICAgIGxldCBsZWZ0ICA9IHRoaXMucmF3KG5vZGUsICdsZWZ0JywgICdjb21tZW50TGVmdCcpO1xuICAgICAgICBsZXQgcmlnaHQgPSB0aGlzLnJhdyhub2RlLCAncmlnaHQnLCAnY29tbWVudFJpZ2h0Jyk7XG4gICAgICAgIHRoaXMuYnVpbGRlcignLyonICsgbGVmdCArIG5vZGUudGV4dCArIHJpZ2h0ICsgJyovJywgbm9kZSk7XG4gICAgfVxuXG4gICAgZGVjbChub2RlLCBzZW1pY29sb24pIHtcbiAgICAgICAgbGV0IGJldHdlZW4gPSB0aGlzLnJhdyhub2RlLCAnYmV0d2VlbicsICdjb2xvbicpO1xuICAgICAgICBsZXQgc3RyaW5nICA9IG5vZGUucHJvcCArIGJldHdlZW4gKyB0aGlzLnJhd1ZhbHVlKG5vZGUsICd2YWx1ZScpO1xuXG4gICAgICAgIGlmICggbm9kZS5pbXBvcnRhbnQgKSB7XG4gICAgICAgICAgICBzdHJpbmcgKz0gbm9kZS5yYXdzLmltcG9ydGFudCB8fCAnICFpbXBvcnRhbnQnO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCBzZW1pY29sb24gKSBzdHJpbmcgKz0gJzsnO1xuICAgICAgICB0aGlzLmJ1aWxkZXIoc3RyaW5nLCBub2RlKTtcbiAgICB9XG5cbiAgICBydWxlKG5vZGUpIHtcbiAgICAgICAgdGhpcy5ibG9jayhub2RlLCB0aGlzLnJhd1ZhbHVlKG5vZGUsICdzZWxlY3RvcicpKTtcbiAgICAgICAgaWYgKCBub2RlLnJhd3Mub3duU2VtaWNvbG9uICkge1xuICAgICAgICAgICAgdGhpcy5idWlsZGVyKG5vZGUucmF3cy5vd25TZW1pY29sb24sIG5vZGUsICdlbmQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGF0cnVsZShub2RlLCBzZW1pY29sb24pIHtcbiAgICAgICAgbGV0IG5hbWUgICA9ICdAJyArIG5vZGUubmFtZTtcbiAgICAgICAgbGV0IHBhcmFtcyA9IG5vZGUucGFyYW1zID8gdGhpcy5yYXdWYWx1ZShub2RlLCAncGFyYW1zJykgOiAnJztcblxuICAgICAgICBpZiAoIHR5cGVvZiBub2RlLnJhd3MuYWZ0ZXJOYW1lICE9PSAndW5kZWZpbmVkJyApIHtcbiAgICAgICAgICAgIG5hbWUgKz0gbm9kZS5yYXdzLmFmdGVyTmFtZTtcbiAgICAgICAgfSBlbHNlIGlmICggcGFyYW1zICkge1xuICAgICAgICAgICAgbmFtZSArPSAnICc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIG5vZGUubm9kZXMgKSB7XG4gICAgICAgICAgICB0aGlzLmJsb2NrKG5vZGUsIG5hbWUgKyBwYXJhbXMpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbGV0IGVuZCA9IChub2RlLnJhd3MuYmV0d2VlbiB8fCAnJykgKyAoc2VtaWNvbG9uID8gJzsnIDogJycpO1xuICAgICAgICAgICAgdGhpcy5idWlsZGVyKG5hbWUgKyBwYXJhbXMgKyBlbmQsIG5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgYm9keShub2RlKSB7XG4gICAgICAgIGxldCBsYXN0ID0gbm9kZS5ub2Rlcy5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoIGxhc3QgPiAwICkge1xuICAgICAgICAgICAgaWYgKCBub2RlLm5vZGVzW2xhc3RdLnR5cGUgIT09ICdjb21tZW50JyApIGJyZWFrO1xuICAgICAgICAgICAgbGFzdCAtPSAxO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHNlbWljb2xvbiA9IHRoaXMucmF3KG5vZGUsICdzZW1pY29sb24nKTtcbiAgICAgICAgZm9yICggbGV0IGkgPSAwOyBpIDwgbm9kZS5ub2Rlcy5sZW5ndGg7IGkrKyApIHtcbiAgICAgICAgICAgIGxldCBjaGlsZCAgPSBub2RlLm5vZGVzW2ldO1xuICAgICAgICAgICAgbGV0IGJlZm9yZSA9IHRoaXMucmF3KGNoaWxkLCAnYmVmb3JlJyk7XG4gICAgICAgICAgICBpZiAoIGJlZm9yZSApIHRoaXMuYnVpbGRlcihiZWZvcmUpO1xuICAgICAgICAgICAgdGhpcy5zdHJpbmdpZnkoY2hpbGQsIGxhc3QgIT09IGkgfHwgc2VtaWNvbG9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGJsb2NrKG5vZGUsIHN0YXJ0KSB7XG4gICAgICAgIGxldCBiZXR3ZWVuID0gdGhpcy5yYXcobm9kZSwgJ2JldHdlZW4nLCAnYmVmb3JlT3BlbicpO1xuICAgICAgICB0aGlzLmJ1aWxkZXIoc3RhcnQgKyBiZXR3ZWVuICsgJ3snLCBub2RlLCAnc3RhcnQnKTtcblxuICAgICAgICBsZXQgYWZ0ZXI7XG4gICAgICAgIGlmICggbm9kZS5ub2RlcyAmJiBub2RlLm5vZGVzLmxlbmd0aCApIHtcbiAgICAgICAgICAgIHRoaXMuYm9keShub2RlKTtcbiAgICAgICAgICAgIGFmdGVyID0gdGhpcy5yYXcobm9kZSwgJ2FmdGVyJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBhZnRlciA9IHRoaXMucmF3KG5vZGUsICdhZnRlcicsICdlbXB0eUJvZHknKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICggYWZ0ZXIgKSB0aGlzLmJ1aWxkZXIoYWZ0ZXIpO1xuICAgICAgICB0aGlzLmJ1aWxkZXIoJ30nLCBub2RlLCAnZW5kJyk7XG4gICAgfVxuXG4gICAgcmF3KG5vZGUsIG93biwgZGV0ZWN0KSB7XG4gICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgaWYgKCAhZGV0ZWN0ICkgZGV0ZWN0ID0gb3duO1xuXG4gICAgICAgIC8vIEFscmVhZHkgaGFkXG4gICAgICAgIGlmICggb3duICkge1xuICAgICAgICAgICAgdmFsdWUgPSBub2RlLnJhd3Nbb3duXTtcbiAgICAgICAgICAgIGlmICggdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyApIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwYXJlbnQgPSBub2RlLnBhcmVudDtcblxuICAgICAgICAvLyBIYWNrIGZvciBmaXJzdCBydWxlIGluIENTU1xuICAgICAgICBpZiAoIGRldGVjdCA9PT0gJ2JlZm9yZScgKSB7XG4gICAgICAgICAgICBpZiAoICFwYXJlbnQgfHwgcGFyZW50LnR5cGUgPT09ICdyb290JyAmJiBwYXJlbnQuZmlyc3QgPT09IG5vZGUgKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmxvYXRpbmcgY2hpbGQgd2l0aG91dCBwYXJlbnRcbiAgICAgICAgaWYgKCAhcGFyZW50ICkgcmV0dXJuIGRlZmF1bHRSYXdbZGV0ZWN0XTtcblxuICAgICAgICAvLyBEZXRlY3Qgc3R5bGUgYnkgb3RoZXIgbm9kZXNcbiAgICAgICAgbGV0IHJvb3QgPSBub2RlLnJvb3QoKTtcbiAgICAgICAgaWYgKCAhcm9vdC5yYXdDYWNoZSApIHJvb3QucmF3Q2FjaGUgPSB7IH07XG4gICAgICAgIGlmICggdHlwZW9mIHJvb3QucmF3Q2FjaGVbZGV0ZWN0XSAhPT0gJ3VuZGVmaW5lZCcgKSB7XG4gICAgICAgICAgICByZXR1cm4gcm9vdC5yYXdDYWNoZVtkZXRlY3RdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCBkZXRlY3QgPT09ICdiZWZvcmUnIHx8IGRldGVjdCA9PT0gJ2FmdGVyJyApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmJlZm9yZUFmdGVyKG5vZGUsIGRldGVjdCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBsZXQgbWV0aG9kID0gJ3JhdycgKyBjYXBpdGFsaXplKGRldGVjdCk7XG4gICAgICAgICAgICBpZiAoIHRoaXNbbWV0aG9kXSApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXNbbWV0aG9kXShyb290LCBub2RlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcm9vdC53YWxrKCBpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpLnJhd3Nbb3duXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnICkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICkgdmFsdWUgPSBkZWZhdWx0UmF3W2RldGVjdF07XG5cbiAgICAgICAgcm9vdC5yYXdDYWNoZVtkZXRlY3RdID0gdmFsdWU7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByYXdTZW1pY29sb24ocm9vdCkge1xuICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgIHJvb3Qud2FsayggaSA9PiB7XG4gICAgICAgICAgICBpZiAoIGkubm9kZXMgJiYgaS5ub2Rlcy5sZW5ndGggJiYgaS5sYXN0LnR5cGUgPT09ICdkZWNsJyApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGkucmF3cy5zZW1pY29sb247XG4gICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgdmFsdWUgIT09ICd1bmRlZmluZWQnICkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJhd0VtcHR5Qm9keShyb290KSB7XG4gICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgcm9vdC53YWxrKCBpID0+IHtcbiAgICAgICAgICAgIGlmICggaS5ub2RlcyAmJiBpLm5vZGVzLmxlbmd0aCA9PT0gMCApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGkucmF3cy5hZnRlcjtcbiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiB2YWx1ZSAhPT0gJ3VuZGVmaW5lZCcgKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmF3SW5kZW50KHJvb3QpIHtcbiAgICAgICAgaWYgKCByb290LnJhd3MuaW5kZW50ICkgcmV0dXJuIHJvb3QucmF3cy5pbmRlbnQ7XG4gICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgcm9vdC53YWxrKCBpID0+IHtcbiAgICAgICAgICAgIGxldCBwID0gaS5wYXJlbnQ7XG4gICAgICAgICAgICBpZiAoIHAgJiYgcCAhPT0gcm9vdCAmJiBwLnBhcmVudCAmJiBwLnBhcmVudCA9PT0gcm9vdCApIHtcbiAgICAgICAgICAgICAgICBpZiAoIHR5cGVvZiBpLnJhd3MuYmVmb3JlICE9PSAndW5kZWZpbmVkJyApIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHBhcnRzID0gaS5yYXdzLmJlZm9yZS5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gcGFydHNbcGFydHMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvW15cXHNdL2csICcnKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByYXdCZWZvcmVDb21tZW50KHJvb3QsIG5vZGUpIHtcbiAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICByb290LndhbGtDb21tZW50cyggaSA9PiB7XG4gICAgICAgICAgICBpZiAoIHR5cGVvZiBpLnJhd3MuYmVmb3JlICE9PSAndW5kZWZpbmVkJyApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGkucmF3cy5iZWZvcmU7XG4gICAgICAgICAgICAgICAgaWYgKCB2YWx1ZS5pbmRleE9mKCdcXG4nKSAhPT0gLTEgKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvW15cXG5dKyQvLCAnJyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICggdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJyApIHtcbiAgICAgICAgICAgIHZhbHVlID0gdGhpcy5yYXcobm9kZSwgbnVsbCwgJ2JlZm9yZURlY2wnKTtcbiAgICAgICAgfSBlbHNlIGlmICggdmFsdWUgKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1teXFxzXS9nLCAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIHJhd0JlZm9yZURlY2wocm9vdCwgbm9kZSkge1xuICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgIHJvb3Qud2Fsa0RlY2xzKCBpID0+IHtcbiAgICAgICAgICAgIGlmICggdHlwZW9mIGkucmF3cy5iZWZvcmUgIT09ICd1bmRlZmluZWQnICkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gaS5yYXdzLmJlZm9yZTtcbiAgICAgICAgICAgICAgICBpZiAoIHZhbHVlLmluZGV4T2YoJ1xcbicpICE9PSAtMSApIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9bXlxcbl0rJC8sICcnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKCB0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnICkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnJhdyhub2RlLCBudWxsLCAnYmVmb3JlUnVsZScpO1xuICAgICAgICB9IGVsc2UgaWYgKCB2YWx1ZSApIHtcbiAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvW15cXHNdL2csICcnKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmF3QmVmb3JlUnVsZShyb290KSB7XG4gICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgcm9vdC53YWxrKCBpID0+IHtcbiAgICAgICAgICAgIGlmICggaS5ub2RlcyAmJiAoaS5wYXJlbnQgIT09IHJvb3QgfHwgcm9vdC5maXJzdCAhPT0gaSkgKSB7XG4gICAgICAgICAgICAgICAgaWYgKCB0eXBlb2YgaS5yYXdzLmJlZm9yZSAhPT0gJ3VuZGVmaW5lZCcgKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaS5yYXdzLmJlZm9yZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCB2YWx1ZS5pbmRleE9mKCdcXG4nKSAhPT0gLTEgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1teXFxuXSskLywgJycpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIHZhbHVlICkgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC9bXlxcc10vZywgJycpO1xuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgcmF3QmVmb3JlQ2xvc2Uocm9vdCkge1xuICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgIHJvb3Qud2FsayggaSA9PiB7XG4gICAgICAgICAgICBpZiAoIGkubm9kZXMgJiYgaS5ub2Rlcy5sZW5ndGggPiAwICkge1xuICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIGkucmF3cy5hZnRlciAhPT0gJ3VuZGVmaW5lZCcgKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaS5yYXdzLmFmdGVyO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIHZhbHVlLmluZGV4T2YoJ1xcbicpICE9PSAtMSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgvW15cXG5dKyQvLCAnJyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGlmICggdmFsdWUgKSB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoL1teXFxzXS9nLCAnJyk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByYXdCZWZvcmVPcGVuKHJvb3QpIHtcbiAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICByb290LndhbGsoIGkgPT4ge1xuICAgICAgICAgICAgaWYgKCBpLnR5cGUgIT09ICdkZWNsJyApIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGkucmF3cy5iZXR3ZWVuO1xuICAgICAgICAgICAgICAgIGlmICggdHlwZW9mIHZhbHVlICE9PSAndW5kZWZpbmVkJyApIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByYXdDb2xvbihyb290KSB7XG4gICAgICAgIGxldCB2YWx1ZTtcbiAgICAgICAgcm9vdC53YWxrRGVjbHMoIGkgPT4ge1xuICAgICAgICAgICAgaWYgKCB0eXBlb2YgaS5yYXdzLmJldHdlZW4gIT09ICd1bmRlZmluZWQnICkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gaS5yYXdzLmJldHdlZW4ucmVwbGFjZSgvW15cXHM6XS9nLCAnJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGJlZm9yZUFmdGVyKG5vZGUsIGRldGVjdCkge1xuICAgICAgICBsZXQgdmFsdWU7XG4gICAgICAgIGlmICggbm9kZS50eXBlID09PSAnZGVjbCcgKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IHRoaXMucmF3KG5vZGUsIG51bGwsICdiZWZvcmVEZWNsJyk7XG4gICAgICAgIH0gZWxzZSBpZiAoIG5vZGUudHlwZSA9PT0gJ2NvbW1lbnQnICkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnJhdyhub2RlLCBudWxsLCAnYmVmb3JlQ29tbWVudCcpO1xuICAgICAgICB9IGVsc2UgaWYgKCBkZXRlY3QgPT09ICdiZWZvcmUnICkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnJhdyhub2RlLCBudWxsLCAnYmVmb3JlUnVsZScpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGlzLnJhdyhub2RlLCBudWxsLCAnYmVmb3JlQ2xvc2UnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBidWYgICA9IG5vZGUucGFyZW50O1xuICAgICAgICBsZXQgZGVwdGggPSAwO1xuICAgICAgICB3aGlsZSAoIGJ1ZiAmJiBidWYudHlwZSAhPT0gJ3Jvb3QnICkge1xuICAgICAgICAgICAgZGVwdGggKz0gMTtcbiAgICAgICAgICAgIGJ1ZiA9IGJ1Zi5wYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIHZhbHVlLmluZGV4T2YoJ1xcbicpICE9PSAtMSApIHtcbiAgICAgICAgICAgIGxldCBpbmRlbnQgPSB0aGlzLnJhdyhub2RlLCBudWxsLCAnaW5kZW50Jyk7XG4gICAgICAgICAgICBpZiAoIGluZGVudC5sZW5ndGggKSB7XG4gICAgICAgICAgICAgICAgZm9yICggbGV0IHN0ZXAgPSAwOyBzdGVwIDwgZGVwdGg7IHN0ZXArKyApIHZhbHVlICs9IGluZGVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICByYXdWYWx1ZShub2RlLCBwcm9wKSB7XG4gICAgICAgIGxldCB2YWx1ZSA9IG5vZGVbcHJvcF07XG4gICAgICAgIGxldCByYXcgICA9IG5vZGUucmF3c1twcm9wXTtcbiAgICAgICAgaWYgKCByYXcgJiYgcmF3LnZhbHVlID09PSB2YWx1ZSApIHtcbiAgICAgICAgICAgIHJldHVybiByYXcucmF3O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbmV4cG9ydCBkZWZhdWx0IFN0cmluZ2lmaWVyO1xuIl19
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/stringify.js b/node_modules/postcss-reporter/node_modules/postcss/lib/stringify.js
new file mode 100644
index 00000000..e970157e
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/stringify.js
@@ -0,0 +1,17 @@
+'use strict';
+
+exports.__esModule = true;
+exports.default = stringify;
+
+var _stringifier = require('./stringifier');
+
+var _stringifier2 = _interopRequireDefault(_stringifier);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+function stringify(node, builder) {
+ var str = new _stringifier2.default(builder);
+ str.stringify(node);
+}
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInN0cmluZ2lmeS5lczYiXSwibmFtZXMiOlsic3RyaW5naWZ5Iiwibm9kZSIsImJ1aWxkZXIiLCJzdHIiLCJTdHJpbmdpZmllciJdLCJtYXBwaW5ncyI6Ijs7O2tCQUV3QkEsUzs7QUFGeEI7Ozs7OztBQUVlLFNBQVNBLFNBQVQsQ0FBbUJDLElBQW5CLEVBQXlCQyxPQUF6QixFQUFrQztBQUM3QyxRQUFJQyxNQUFNLElBQUlDLHFCQUFKLENBQWdCRixPQUFoQixDQUFWO0FBQ0FDLFFBQUlILFNBQUosQ0FBY0MsSUFBZDtBQUNIIiwiZmlsZSI6InN0cmluZ2lmeS5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBTdHJpbmdpZmllciBmcm9tICcuL3N0cmluZ2lmaWVyJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc3RyaW5naWZ5KG5vZGUsIGJ1aWxkZXIpIHtcbiAgICBsZXQgc3RyID0gbmV3IFN0cmluZ2lmaWVyKGJ1aWxkZXIpO1xuICAgIHN0ci5zdHJpbmdpZnkobm9kZSk7XG59XG4iXX0=
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/terminal-highlight.js b/node_modules/postcss-reporter/node_modules/postcss/lib/terminal-highlight.js
new file mode 100644
index 00000000..439c8fa0
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/terminal-highlight.js
@@ -0,0 +1,83 @@
+'use strict';
+
+exports.__esModule = true;
+
+var _chalk = require('chalk');
+
+var _chalk2 = _interopRequireDefault(_chalk);
+
+var _tokenize = require('./tokenize');
+
+var _tokenize2 = _interopRequireDefault(_tokenize);
+
+var _input = require('./input');
+
+var _input2 = _interopRequireDefault(_input);
+
+function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
+
+var HIGHLIGHT_THEME = {
+ 'brackets': _chalk2.default.cyan,
+ 'at-word': _chalk2.default.cyan,
+ 'call': _chalk2.default.cyan,
+ 'comment': _chalk2.default.gray,
+ 'string': _chalk2.default.green,
+ 'class': _chalk2.default.yellow,
+ 'hash': _chalk2.default.magenta,
+ '(': _chalk2.default.cyan,
+ ')': _chalk2.default.cyan,
+ '{': _chalk2.default.yellow,
+ '}': _chalk2.default.yellow,
+ '[': _chalk2.default.yellow,
+ ']': _chalk2.default.yellow,
+ ':': _chalk2.default.yellow,
+ ';': _chalk2.default.yellow
+};
+
+function getTokenType(_ref, processor) {
+ var type = _ref[0],
+ value = _ref[1];
+
+ if (type === 'word') {
+ if (value[0] === '.') {
+ return 'class';
+ }
+ if (value[0] === '#') {
+ return 'hash';
+ }
+ }
+
+ if (!processor.endOfFile()) {
+ var next = processor.nextToken();
+ processor.back(next);
+ if (next[0] === 'brackets' || next[0] === '(') return 'call';
+ }
+
+ return type;
+}
+
+function terminalHighlight(css) {
+ var processor = (0, _tokenize2.default)(new _input2.default(css), { ignoreErrors: true });
+ var result = '';
+
+ var _loop = function _loop() {
+ var token = processor.nextToken();
+ var color = HIGHLIGHT_THEME[getTokenType(token, processor)];
+ if (color) {
+ result += token[1].split(/\r?\n/).map(function (i) {
+ return color(i);
+ }).join('\n');
+ } else {
+ result += token[1];
+ }
+ };
+
+ while (!processor.endOfFile()) {
+ _loop();
+ }
+ return result;
+}
+
+exports.default = terminalHighlight;
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRlcm1pbmFsLWhpZ2hsaWdodC5lczYiXSwibmFtZXMiOlsiSElHSExJR0hUX1RIRU1FIiwiY2hhbGsiLCJjeWFuIiwiZ3JheSIsImdyZWVuIiwieWVsbG93IiwibWFnZW50YSIsImdldFRva2VuVHlwZSIsInByb2Nlc3NvciIsInR5cGUiLCJ2YWx1ZSIsImVuZE9mRmlsZSIsIm5leHQiLCJuZXh0VG9rZW4iLCJiYWNrIiwidGVybWluYWxIaWdobGlnaHQiLCJjc3MiLCJJbnB1dCIsImlnbm9yZUVycm9ycyIsInJlc3VsdCIsInRva2VuIiwiY29sb3IiLCJzcGxpdCIsIm1hcCIsImkiLCJqb2luIl0sIm1hcHBpbmdzIjoiOzs7O0FBQUE7Ozs7QUFFQTs7OztBQUNBOzs7Ozs7QUFFQSxJQUFNQSxrQkFBa0I7QUFDcEIsZ0JBQVlDLGdCQUFNQyxJQURFO0FBRXBCLGVBQVlELGdCQUFNQyxJQUZFO0FBR3BCLFlBQVlELGdCQUFNQyxJQUhFO0FBSXBCLGVBQVlELGdCQUFNRSxJQUpFO0FBS3BCLGNBQVlGLGdCQUFNRyxLQUxFO0FBTXBCLGFBQVlILGdCQUFNSSxNQU5FO0FBT3BCLFlBQVlKLGdCQUFNSyxPQVBFO0FBUXBCLFNBQVlMLGdCQUFNQyxJQVJFO0FBU3BCLFNBQVlELGdCQUFNQyxJQVRFO0FBVXBCLFNBQVlELGdCQUFNSSxNQVZFO0FBV3BCLFNBQVlKLGdCQUFNSSxNQVhFO0FBWXBCLFNBQVlKLGdCQUFNSSxNQVpFO0FBYXBCLFNBQVlKLGdCQUFNSSxNQWJFO0FBY3BCLFNBQVlKLGdCQUFNSSxNQWRFO0FBZXBCLFNBQVlKLGdCQUFNSTtBQWZFLENBQXhCOztBQWtCQSxTQUFTRSxZQUFULE9BQXFDQyxTQUFyQyxFQUFnRDtBQUFBLFFBQXpCQyxJQUF5QjtBQUFBLFFBQW5CQyxLQUFtQjs7QUFDNUMsUUFBS0QsU0FBUyxNQUFkLEVBQXVCO0FBQ25CLFlBQUtDLE1BQU0sQ0FBTixNQUFhLEdBQWxCLEVBQXdCO0FBQ3BCLG1CQUFPLE9BQVA7QUFDSDtBQUNELFlBQUtBLE1BQU0sQ0FBTixNQUFhLEdBQWxCLEVBQXdCO0FBQ3BCLG1CQUFPLE1BQVA7QUFDSDtBQUNKOztBQUVELFFBQUssQ0FBQ0YsVUFBVUcsU0FBVixFQUFOLEVBQThCO0FBQzFCLFlBQUlDLE9BQU9KLFVBQVVLLFNBQVYsRUFBWDtBQUNBTCxrQkFBVU0sSUFBVixDQUFlRixJQUFmO0FBQ0EsWUFBS0EsS0FBSyxDQUFMLE1BQVksVUFBWixJQUEwQkEsS0FBSyxDQUFMLE1BQVksR0FBM0MsRUFBaUQsT0FBTyxNQUFQO0FBQ3BEOztBQUVELFdBQU9ILElBQVA7QUFDSDs7QUFFRCxTQUFTTSxpQkFBVCxDQUEyQkMsR0FBM0IsRUFBZ0M7QUFDNUIsUUFBSVIsWUFBWSx3QkFBVSxJQUFJUyxlQUFKLENBQVVELEdBQVYsQ0FBVixFQUEwQixFQUFFRSxjQUFjLElBQWhCLEVBQTFCLENBQWhCO0FBQ0EsUUFBSUMsU0FBUyxFQUFiOztBQUY0QjtBQUl4QixZQUFJQyxRQUFRWixVQUFVSyxTQUFWLEVBQVo7QUFDQSxZQUFJUSxRQUFRckIsZ0JBQWdCTyxhQUFhYSxLQUFiLEVBQW9CWixTQUFwQixDQUFoQixDQUFaO0FBQ0EsWUFBS2EsS0FBTCxFQUFhO0FBQ1RGLHNCQUFVQyxNQUFNLENBQU4sRUFBU0UsS0FBVCxDQUFlLE9BQWYsRUFDTEMsR0FESyxDQUNBO0FBQUEsdUJBQUtGLE1BQU1HLENBQU4sQ0FBTDtBQUFBLGFBREEsRUFFTEMsSUFGSyxDQUVBLElBRkEsQ0FBVjtBQUdILFNBSkQsTUFJTztBQUNITixzQkFBVUMsTUFBTSxDQUFOLENBQVY7QUFDSDtBQVp1Qjs7QUFHNUIsV0FBUSxDQUFDWixVQUFVRyxTQUFWLEVBQVQsRUFBaUM7QUFBQTtBQVVoQztBQUNELFdBQU9RLE1BQVA7QUFDSDs7a0JBRWNKLGlCIiwiZmlsZSI6InRlcm1pbmFsLWhpZ2hsaWdodC5qcyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjaGFsayBmcm9tICdjaGFsayc7XG5cbmltcG9ydCB0b2tlbml6ZXIgZnJvbSAnLi90b2tlbml6ZSc7XG5pbXBvcnQgSW5wdXQgICAgZnJvbSAnLi9pbnB1dCc7XG5cbmNvbnN0IEhJR0hMSUdIVF9USEVNRSA9IHtcbiAgICAnYnJhY2tldHMnOiBjaGFsay5jeWFuLFxuICAgICdhdC13b3JkJzogIGNoYWxrLmN5YW4sXG4gICAgJ2NhbGwnOiAgICAgY2hhbGsuY3lhbixcbiAgICAnY29tbWVudCc6ICBjaGFsay5ncmF5LFxuICAgICdzdHJpbmcnOiAgIGNoYWxrLmdyZWVuLFxuICAgICdjbGFzcyc6ICAgIGNoYWxrLnllbGxvdyxcbiAgICAnaGFzaCc6ICAgICBjaGFsay5tYWdlbnRhLFxuICAgICcoJzogICAgICAgIGNoYWxrLmN5YW4sXG4gICAgJyknOiAgICAgICAgY2hhbGsuY3lhbixcbiAgICAneyc6ICAgICAgICBjaGFsay55ZWxsb3csXG4gICAgJ30nOiAgICAgICAgY2hhbGsueWVsbG93LFxuICAgICdbJzogICAgICAgIGNoYWxrLnllbGxvdyxcbiAgICAnXSc6ICAgICAgICBjaGFsay55ZWxsb3csXG4gICAgJzonOiAgICAgICAgY2hhbGsueWVsbG93LFxuICAgICc7JzogICAgICAgIGNoYWxrLnllbGxvd1xufTtcblxuZnVuY3Rpb24gZ2V0VG9rZW5UeXBlKFt0eXBlLCB2YWx1ZV0sIHByb2Nlc3Nvcikge1xuICAgIGlmICggdHlwZSA9PT0gJ3dvcmQnICkge1xuICAgICAgICBpZiAoIHZhbHVlWzBdID09PSAnLicgKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2NsYXNzJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIHZhbHVlWzBdID09PSAnIycgKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2hhc2gnO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCAhcHJvY2Vzc29yLmVuZE9mRmlsZSgpICkge1xuICAgICAgICBsZXQgbmV4dCA9IHByb2Nlc3Nvci5uZXh0VG9rZW4oKTtcbiAgICAgICAgcHJvY2Vzc29yLmJhY2sobmV4dCk7XG4gICAgICAgIGlmICggbmV4dFswXSA9PT0gJ2JyYWNrZXRzJyB8fCBuZXh0WzBdID09PSAnKCcgKSByZXR1cm4gJ2NhbGwnO1xuICAgIH1cblxuICAgIHJldHVybiB0eXBlO1xufVxuXG5mdW5jdGlvbiB0ZXJtaW5hbEhpZ2hsaWdodChjc3MpIHtcbiAgICBsZXQgcHJvY2Vzc29yID0gdG9rZW5pemVyKG5ldyBJbnB1dChjc3MpLCB7IGlnbm9yZUVycm9yczogdHJ1ZSB9KTtcbiAgICBsZXQgcmVzdWx0ID0gJyc7XG4gICAgd2hpbGUgKCAhcHJvY2Vzc29yLmVuZE9mRmlsZSgpICkge1xuICAgICAgICBsZXQgdG9rZW4gPSBwcm9jZXNzb3IubmV4dFRva2VuKCk7XG4gICAgICAgIGxldCBjb2xvciA9IEhJR0hMSUdIVF9USEVNRVtnZXRUb2tlblR5cGUodG9rZW4sIHByb2Nlc3NvcildO1xuICAgICAgICBpZiAoIGNvbG9yICkge1xuICAgICAgICAgICAgcmVzdWx0ICs9IHRva2VuWzFdLnNwbGl0KC9cXHI/XFxuLylcbiAgICAgICAgICAgICAgICAubWFwKCBpID0+IGNvbG9yKGkpIClcbiAgICAgICAgICAgICAgICAuam9pbignXFxuJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gdG9rZW5bMV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdGVybWluYWxIaWdobGlnaHQ7XG4iXX0=
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/tokenize.js b/node_modules/postcss-reporter/node_modules/postcss/lib/tokenize.js
new file mode 100644
index 00000000..6a4a8754
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/tokenize.js
@@ -0,0 +1,306 @@
+'use strict';
+
+exports.__esModule = true;
+exports.default = tokenizer;
+var SINGLE_QUOTE = 39;
+var DOUBLE_QUOTE = 34;
+var BACKSLASH = 92;
+var SLASH = 47;
+var NEWLINE = 10;
+var SPACE = 32;
+var FEED = 12;
+var TAB = 9;
+var CR = 13;
+var OPEN_SQUARE = 91;
+var CLOSE_SQUARE = 93;
+var OPEN_PARENTHESES = 40;
+var CLOSE_PARENTHESES = 41;
+var OPEN_CURLY = 123;
+var CLOSE_CURLY = 125;
+var SEMICOLON = 59;
+var ASTERISK = 42;
+var COLON = 58;
+var AT = 64;
+
+var RE_AT_END = /[ \n\t\r\f\{\}\(\)'"\\;/\[\]#]/g;
+var RE_WORD_END = /[ \n\t\r\f\(\)\{\}:;@!'"\\\]\[#]|\/(?=\*)/g;
+var RE_BAD_BRACKET = /.[\\\/\("'\n]/;
+var RE_HEX_ESCAPE = /[a-f0-9]/i;
+
+function tokenizer(input) {
+ var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ var css = input.css.valueOf();
+ var ignore = options.ignoreErrors;
+
+ var code = void 0,
+ next = void 0,
+ quote = void 0,
+ lines = void 0,
+ last = void 0,
+ content = void 0,
+ escape = void 0,
+ nextLine = void 0,
+ nextOffset = void 0,
+ escaped = void 0,
+ escapePos = void 0,
+ prev = void 0,
+ n = void 0,
+ currentToken = void 0;
+
+ var length = css.length;
+ var offset = -1;
+ var line = 1;
+ var pos = 0;
+ var buffer = [];
+ var returned = [];
+
+ function unclosed(what) {
+ throw input.error('Unclosed ' + what, line, pos - offset);
+ }
+
+ function endOfFile() {
+ return returned.length === 0 && pos >= length;
+ }
+
+ function nextToken() {
+ if (returned.length) return returned.pop();
+ if (pos >= length) return;
+
+ code = css.charCodeAt(pos);
+ if (code === NEWLINE || code === FEED || code === CR && css.charCodeAt(pos + 1) !== NEWLINE) {
+ offset = pos;
+ line += 1;
+ }
+
+ switch (code) {
+ case NEWLINE:
+ case SPACE:
+ case TAB:
+ case CR:
+ case FEED:
+ next = pos;
+ do {
+ next += 1;
+ code = css.charCodeAt(next);
+ if (code === NEWLINE) {
+ offset = next;
+ line += 1;
+ }
+ } while (code === SPACE || code === NEWLINE || code === TAB || code === CR || code === FEED);
+
+ currentToken = ['space', css.slice(pos, next)];
+ pos = next - 1;
+ break;
+
+ case OPEN_SQUARE:
+ currentToken = ['[', '[', line, pos - offset];
+ break;
+
+ case CLOSE_SQUARE:
+ currentToken = [']', ']', line, pos - offset];
+ break;
+
+ case OPEN_CURLY:
+ currentToken = ['{', '{', line, pos - offset];
+ break;
+
+ case CLOSE_CURLY:
+ currentToken = ['}', '}', line, pos - offset];
+ break;
+
+ case COLON:
+ currentToken = [':', ':', line, pos - offset];
+ break;
+
+ case SEMICOLON:
+ currentToken = [';', ';', line, pos - offset];
+ break;
+
+ case OPEN_PARENTHESES:
+ prev = buffer.length ? buffer.pop()[1] : '';
+ n = css.charCodeAt(pos + 1);
+ if (prev === 'url' && n !== SINGLE_QUOTE && n !== DOUBLE_QUOTE && n !== SPACE && n !== NEWLINE && n !== TAB && n !== FEED && n !== CR) {
+ next = pos;
+ do {
+ escaped = false;
+ next = css.indexOf(')', next + 1);
+ if (next === -1) {
+ if (ignore) {
+ next = pos;
+ break;
+ } else {
+ unclosed('bracket');
+ }
+ }
+ escapePos = next;
+ while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
+ escapePos -= 1;
+ escaped = !escaped;
+ }
+ } while (escaped);
+
+ currentToken = ['brackets', css.slice(pos, next + 1), line, pos - offset, line, next - offset];
+
+ pos = next;
+ } else {
+ next = css.indexOf(')', pos + 1);
+ content = css.slice(pos, next + 1);
+
+ if (next === -1 || RE_BAD_BRACKET.test(content)) {
+ currentToken = ['(', '(', line, pos - offset];
+ } else {
+ currentToken = ['brackets', content, line, pos - offset, line, next - offset];
+ pos = next;
+ }
+ }
+
+ break;
+
+ case CLOSE_PARENTHESES:
+ currentToken = [')', ')', line, pos - offset];
+ break;
+
+ case SINGLE_QUOTE:
+ case DOUBLE_QUOTE:
+ quote = code === SINGLE_QUOTE ? '\'' : '"';
+ next = pos;
+ do {
+ escaped = false;
+ next = css.indexOf(quote, next + 1);
+ if (next === -1) {
+ if (ignore) {
+ next = pos + 1;
+ break;
+ } else {
+ unclosed('string');
+ }
+ }
+ escapePos = next;
+ while (css.charCodeAt(escapePos - 1) === BACKSLASH) {
+ escapePos -= 1;
+ escaped = !escaped;
+ }
+ } while (escaped);
+
+ content = css.slice(pos, next + 1);
+ lines = content.split('\n');
+ last = lines.length - 1;
+
+ if (last > 0) {
+ nextLine = line + last;
+ nextOffset = next - lines[last].length;
+ } else {
+ nextLine = line;
+ nextOffset = offset;
+ }
+
+ currentToken = ['string', css.slice(pos, next + 1), line, pos - offset, nextLine, next - nextOffset];
+
+ offset = nextOffset;
+ line = nextLine;
+ pos = next;
+ break;
+
+ case AT:
+ RE_AT_END.lastIndex = pos + 1;
+ RE_AT_END.test(css);
+ if (RE_AT_END.lastIndex === 0) {
+ next = css.length - 1;
+ } else {
+ next = RE_AT_END.lastIndex - 2;
+ }
+
+ currentToken = ['at-word', css.slice(pos, next + 1), line, pos - offset, line, next - offset];
+
+ pos = next;
+ break;
+
+ case BACKSLASH:
+ next = pos;
+ escape = true;
+ while (css.charCodeAt(next + 1) === BACKSLASH) {
+ next += 1;
+ escape = !escape;
+ }
+ code = css.charCodeAt(next + 1);
+ if (escape && code !== SLASH && code !== SPACE && code !== NEWLINE && code !== TAB && code !== CR && code !== FEED) {
+ next += 1;
+ if (RE_HEX_ESCAPE.test(css.charAt(next))) {
+ while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) {
+ next += 1;
+ }
+ if (css.charCodeAt(next + 1) === SPACE) {
+ next += 1;
+ }
+ }
+ }
+
+ currentToken = ['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset];
+
+ pos = next;
+ break;
+
+ default:
+ if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {
+ next = css.indexOf('*/', pos + 2) + 1;
+ if (next === 0) {
+ if (ignore) {
+ next = css.length;
+ } else {
+ unclosed('comment');
+ }
+ }
+
+ content = css.slice(pos, next + 1);
+ lines = content.split('\n');
+ last = lines.length - 1;
+
+ if (last > 0) {
+ nextLine = line + last;
+ nextOffset = next - lines[last].length;
+ } else {
+ nextLine = line;
+ nextOffset = offset;
+ }
+
+ currentToken = ['comment', content, line, pos - offset, nextLine, next - nextOffset];
+
+ offset = nextOffset;
+ line = nextLine;
+ pos = next;
+ } else {
+ RE_WORD_END.lastIndex = pos + 1;
+ RE_WORD_END.test(css);
+ if (RE_WORD_END.lastIndex === 0) {
+ next = css.length - 1;
+ } else {
+ next = RE_WORD_END.lastIndex - 2;
+ }
+
+ currentToken = ['word', css.slice(pos, next + 1), line, pos - offset, line, next - offset];
+
+ buffer.push(currentToken);
+
+ pos = next;
+ }
+
+ break;
+ }
+
+ pos++;
+ return currentToken;
+ }
+
+ function back(token) {
+ returned.push(token);
+ }
+
+ return {
+ back: back,
+ nextToken: nextToken,
+ endOfFile: endOfFile
+ };
+}
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInRva2VuaXplLmVzNiJdLCJuYW1lcyI6WyJ0b2tlbml6ZXIiLCJTSU5HTEVfUVVPVEUiLCJET1VCTEVfUVVPVEUiLCJCQUNLU0xBU0giLCJTTEFTSCIsIk5FV0xJTkUiLCJTUEFDRSIsIkZFRUQiLCJUQUIiLCJDUiIsIk9QRU5fU1FVQVJFIiwiQ0xPU0VfU1FVQVJFIiwiT1BFTl9QQVJFTlRIRVNFUyIsIkNMT1NFX1BBUkVOVEhFU0VTIiwiT1BFTl9DVVJMWSIsIkNMT1NFX0NVUkxZIiwiU0VNSUNPTE9OIiwiQVNURVJJU0siLCJDT0xPTiIsIkFUIiwiUkVfQVRfRU5EIiwiUkVfV09SRF9FTkQiLCJSRV9CQURfQlJBQ0tFVCIsIlJFX0hFWF9FU0NBUEUiLCJpbnB1dCIsIm9wdGlvbnMiLCJjc3MiLCJ2YWx1ZU9mIiwiaWdub3JlIiwiaWdub3JlRXJyb3JzIiwiY29kZSIsIm5leHQiLCJxdW90ZSIsImxpbmVzIiwibGFzdCIsImNvbnRlbnQiLCJlc2NhcGUiLCJuZXh0TGluZSIsIm5leHRPZmZzZXQiLCJlc2NhcGVkIiwiZXNjYXBlUG9zIiwicHJldiIsIm4iLCJjdXJyZW50VG9rZW4iLCJsZW5ndGgiLCJvZmZzZXQiLCJsaW5lIiwicG9zIiwiYnVmZmVyIiwicmV0dXJuZWQiLCJ1bmNsb3NlZCIsIndoYXQiLCJlcnJvciIsImVuZE9mRmlsZSIsIm5leHRUb2tlbiIsInBvcCIsImNoYXJDb2RlQXQiLCJzbGljZSIsImluZGV4T2YiLCJ0ZXN0Iiwic3BsaXQiLCJsYXN0SW5kZXgiLCJjaGFyQXQiLCJwdXNoIiwiYmFjayIsInRva2VuIl0sIm1hcHBpbmdzIjoiOzs7a0JBeUJ3QkEsUztBQXpCeEIsSUFBTUMsaUJBQU47QUFDQSxJQUFNQyxpQkFBTjtBQUNBLElBQU1DLGNBQU47QUFDQSxJQUFNQyxVQUFOO0FBQ0EsSUFBTUMsWUFBTjtBQUNBLElBQU1DLFVBQU47QUFDQSxJQUFNQyxTQUFOO0FBQ0EsSUFBTUMsT0FBTjtBQUNBLElBQU1DLE9BQU47QUFDQSxJQUFNQyxnQkFBTjtBQUNBLElBQU1DLGlCQUFOO0FBQ0EsSUFBTUMscUJBQU47QUFDQSxJQUFNQyxzQkFBTjtBQUNBLElBQU1DLGdCQUFOO0FBQ0EsSUFBTUMsaUJBQU47QUFDQSxJQUFNQyxjQUFOO0FBQ0EsSUFBTUMsYUFBTjtBQUNBLElBQU1DLFVBQU47QUFDQSxJQUFNQyxPQUFOOztBQUVBLElBQU1DLFlBQWlCLGlDQUF2QjtBQUNBLElBQU1DLGNBQWlCLDRDQUF2QjtBQUNBLElBQU1DLGlCQUFpQixlQUF2QjtBQUNBLElBQU1DLGdCQUFpQixXQUF2Qjs7QUFFZSxTQUFTdkIsU0FBVCxDQUFtQndCLEtBQW5CLEVBQXdDO0FBQUEsUUFBZEMsT0FBYyx1RUFBSixFQUFJOztBQUNuRCxRQUFJQyxNQUFNRixNQUFNRSxHQUFOLENBQVVDLE9BQVYsRUFBVjtBQUNBLFFBQUlDLFNBQVNILFFBQVFJLFlBQXJCOztBQUVBLFFBQUlDLGFBQUo7QUFBQSxRQUFVQyxhQUFWO0FBQUEsUUFBZ0JDLGNBQWhCO0FBQUEsUUFBdUJDLGNBQXZCO0FBQUEsUUFBOEJDLGFBQTlCO0FBQUEsUUFBb0NDLGdCQUFwQztBQUFBLFFBQTZDQyxlQUE3QztBQUFBLFFBQ0lDLGlCQURKO0FBQUEsUUFDY0MsbUJBRGQ7QUFBQSxRQUMwQkMsZ0JBRDFCO0FBQUEsUUFDbUNDLGtCQURuQztBQUFBLFFBQzhDQyxhQUQ5QztBQUFBLFFBQ29EQyxVQURwRDtBQUFBLFFBQ3VEQyxxQkFEdkQ7O0FBR0EsUUFBSUMsU0FBU2xCLElBQUlrQixNQUFqQjtBQUNBLFFBQUlDLFNBQVMsQ0FBQyxDQUFkO0FBQ0EsUUFBSUMsT0FBTyxDQUFYO0FBQ0EsUUFBSUMsTUFBTSxDQUFWO0FBQ0EsUUFBSUMsU0FBUyxFQUFiO0FBQ0EsUUFBSUMsV0FBVyxFQUFmOztBQUVBLGFBQVNDLFFBQVQsQ0FBa0JDLElBQWxCLEVBQXdCO0FBQ3BCLGNBQU0zQixNQUFNNEIsS0FBTixDQUFZLGNBQWNELElBQTFCLEVBQWdDTCxJQUFoQyxFQUFzQ0MsTUFBTUYsTUFBNUMsQ0FBTjtBQUNIOztBQUVELGFBQVNRLFNBQVQsR0FBcUI7QUFDakIsZUFBT0osU0FBU0wsTUFBVCxLQUFvQixDQUFwQixJQUF5QkcsT0FBT0gsTUFBdkM7QUFDSDs7QUFFRCxhQUFTVSxTQUFULEdBQXFCO0FBQ2pCLFlBQUtMLFNBQVNMLE1BQWQsRUFBdUIsT0FBT0ssU0FBU00sR0FBVCxFQUFQO0FBQ3ZCLFlBQUtSLE9BQU9ILE1BQVosRUFBcUI7O0FBRXJCZCxlQUFPSixJQUFJOEIsVUFBSixDQUFlVCxHQUFmLENBQVA7QUFDQSxZQUFLakIsU0FBU3pCLE9BQVQsSUFBb0J5QixTQUFTdkIsSUFBN0IsSUFDQXVCLFNBQVNyQixFQUFULElBQWVpQixJQUFJOEIsVUFBSixDQUFlVCxNQUFNLENBQXJCLE1BQTRCMUMsT0FEaEQsRUFDMEQ7QUFDdER3QyxxQkFBU0UsR0FBVDtBQUNBRCxvQkFBUSxDQUFSO0FBQ0g7O0FBRUQsZ0JBQVNoQixJQUFUO0FBQ0EsaUJBQUt6QixPQUFMO0FBQ0EsaUJBQUtDLEtBQUw7QUFDQSxpQkFBS0UsR0FBTDtBQUNBLGlCQUFLQyxFQUFMO0FBQ0EsaUJBQUtGLElBQUw7QUFDSXdCLHVCQUFPZ0IsR0FBUDtBQUNBLG1CQUFHO0FBQ0NoQiw0QkFBUSxDQUFSO0FBQ0FELDJCQUFPSixJQUFJOEIsVUFBSixDQUFlekIsSUFBZixDQUFQO0FBQ0Esd0JBQUtELFNBQVN6QixPQUFkLEVBQXdCO0FBQ3BCd0MsaUNBQVNkLElBQVQ7QUFDQWUsZ0NBQVEsQ0FBUjtBQUNIO0FBQ0osaUJBUEQsUUFPVWhCLFNBQVN4QixLQUFULElBQ0F3QixTQUFTekIsT0FEVCxJQUVBeUIsU0FBU3RCLEdBRlQsSUFHQXNCLFNBQVNyQixFQUhULElBSUFxQixTQUFTdkIsSUFYbkI7O0FBYUFvQywrQkFBZSxDQUFDLE9BQUQsRUFBVWpCLElBQUkrQixLQUFKLENBQVVWLEdBQVYsRUFBZWhCLElBQWYsQ0FBVixDQUFmO0FBQ0FnQixzQkFBTWhCLE9BQU8sQ0FBYjtBQUNBOztBQUVKLGlCQUFLckIsV0FBTDtBQUNJaUMsK0JBQWUsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXRyxJQUFYLEVBQWlCQyxNQUFNRixNQUF2QixDQUFmO0FBQ0E7O0FBRUosaUJBQUtsQyxZQUFMO0FBQ0lnQywrQkFBZSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVdHLElBQVgsRUFBaUJDLE1BQU1GLE1BQXZCLENBQWY7QUFDQTs7QUFFSixpQkFBSy9CLFVBQUw7QUFDSTZCLCtCQUFlLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBV0csSUFBWCxFQUFpQkMsTUFBTUYsTUFBdkIsQ0FBZjtBQUNBOztBQUVKLGlCQUFLOUIsV0FBTDtBQUNJNEIsK0JBQWUsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXRyxJQUFYLEVBQWlCQyxNQUFNRixNQUF2QixDQUFmO0FBQ0E7O0FBRUosaUJBQUszQixLQUFMO0FBQ0l5QiwrQkFBZSxDQUFDLEdBQUQsRUFBTSxHQUFOLEVBQVdHLElBQVgsRUFBaUJDLE1BQU1GLE1BQXZCLENBQWY7QUFDQTs7QUFFSixpQkFBSzdCLFNBQUw7QUFDSTJCLCtCQUFlLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBV0csSUFBWCxFQUFpQkMsTUFBTUYsTUFBdkIsQ0FBZjtBQUNBOztBQUVKLGlCQUFLakMsZ0JBQUw7QUFDSTZCLHVCQUFPTyxPQUFPSixNQUFQLEdBQWdCSSxPQUFPTyxHQUFQLEdBQWEsQ0FBYixDQUFoQixHQUFrQyxFQUF6QztBQUNBYixvQkFBT2hCLElBQUk4QixVQUFKLENBQWVULE1BQU0sQ0FBckIsQ0FBUDtBQUNBLG9CQUFLTixTQUFTLEtBQVQsSUFDQUMsTUFBTXpDLFlBRE4sSUFDc0J5QyxNQUFNeEMsWUFENUIsSUFFQXdDLE1BQU1wQyxLQUZOLElBRWVvQyxNQUFNckMsT0FGckIsSUFFZ0NxQyxNQUFNbEMsR0FGdEMsSUFHQWtDLE1BQU1uQyxJQUhOLElBR2NtQyxNQUFNakMsRUFIekIsRUFHOEI7QUFDMUJzQiwyQkFBT2dCLEdBQVA7QUFDQSx1QkFBRztBQUNDUixrQ0FBVSxLQUFWO0FBQ0FSLCtCQUFVTCxJQUFJZ0MsT0FBSixDQUFZLEdBQVosRUFBaUIzQixPQUFPLENBQXhCLENBQVY7QUFDQSw0QkFBS0EsU0FBUyxDQUFDLENBQWYsRUFBbUI7QUFDZixnQ0FBS0gsTUFBTCxFQUFjO0FBQ1ZHLHVDQUFPZ0IsR0FBUDtBQUNBO0FBQ0gsNkJBSEQsTUFHTztBQUNIRyx5Q0FBUyxTQUFUO0FBQ0g7QUFDSjtBQUNEVixvQ0FBWVQsSUFBWjtBQUNBLCtCQUFRTCxJQUFJOEIsVUFBSixDQUFlaEIsWUFBWSxDQUEzQixNQUFrQ3JDLFNBQTFDLEVBQXNEO0FBQ2xEcUMseUNBQWEsQ0FBYjtBQUNBRCxzQ0FBVSxDQUFDQSxPQUFYO0FBQ0g7QUFDSixxQkFoQkQsUUFnQlVBLE9BaEJWOztBQWtCQUksbUNBQWUsQ0FBQyxVQUFELEVBQWFqQixJQUFJK0IsS0FBSixDQUFVVixHQUFWLEVBQWVoQixPQUFPLENBQXRCLENBQWIsRUFDWGUsSUFEVyxFQUNMQyxNQUFPRixNQURGLEVBRVhDLElBRlcsRUFFTGYsT0FBT2MsTUFGRixDQUFmOztBQUtBRSwwQkFBTWhCLElBQU47QUFFSCxpQkE5QkQsTUE4Qk87QUFDSEEsMkJBQVVMLElBQUlnQyxPQUFKLENBQVksR0FBWixFQUFpQlgsTUFBTSxDQUF2QixDQUFWO0FBQ0FaLDhCQUFVVCxJQUFJK0IsS0FBSixDQUFVVixHQUFWLEVBQWVoQixPQUFPLENBQXRCLENBQVY7O0FBRUEsd0JBQUtBLFNBQVMsQ0FBQyxDQUFWLElBQWVULGVBQWVxQyxJQUFmLENBQW9CeEIsT0FBcEIsQ0FBcEIsRUFBbUQ7QUFDL0NRLHVDQUFlLENBQUMsR0FBRCxFQUFNLEdBQU4sRUFBV0csSUFBWCxFQUFpQkMsTUFBTUYsTUFBdkIsQ0FBZjtBQUNILHFCQUZELE1BRU87QUFDSEYsdUNBQWUsQ0FBQyxVQUFELEVBQWFSLE9BQWIsRUFDWFcsSUFEVyxFQUNMQyxNQUFPRixNQURGLEVBRVhDLElBRlcsRUFFTGYsT0FBT2MsTUFGRixDQUFmO0FBSUFFLDhCQUFNaEIsSUFBTjtBQUNIO0FBQ0o7O0FBRUQ7O0FBRUosaUJBQUtsQixpQkFBTDtBQUNJOEIsK0JBQWUsQ0FBQyxHQUFELEVBQU0sR0FBTixFQUFXRyxJQUFYLEVBQWlCQyxNQUFNRixNQUF2QixDQUFmO0FBQ0E7O0FBRUosaUJBQUs1QyxZQUFMO0FBQ0EsaUJBQUtDLFlBQUw7QUFDSThCLHdCQUFRRixTQUFTN0IsWUFBVCxHQUF3QixJQUF4QixHQUErQixHQUF2QztBQUNBOEIsdUJBQVFnQixHQUFSO0FBQ0EsbUJBQUc7QUFDQ1IsOEJBQVUsS0FBVjtBQUNBUiwyQkFBVUwsSUFBSWdDLE9BQUosQ0FBWTFCLEtBQVosRUFBbUJELE9BQU8sQ0FBMUIsQ0FBVjtBQUNBLHdCQUFLQSxTQUFTLENBQUMsQ0FBZixFQUFtQjtBQUNmLDRCQUFLSCxNQUFMLEVBQWM7QUFDVkcsbUNBQU9nQixNQUFNLENBQWI7QUFDQTtBQUNILHlCQUhELE1BR087QUFDSEcscUNBQVMsUUFBVDtBQUNIO0FBQ0o7QUFDRFYsZ0NBQVlULElBQVo7QUFDQSwyQkFBUUwsSUFBSThCLFVBQUosQ0FBZWhCLFlBQVksQ0FBM0IsTUFBa0NyQyxTQUExQyxFQUFzRDtBQUNsRHFDLHFDQUFhLENBQWI7QUFDQUQsa0NBQVUsQ0FBQ0EsT0FBWDtBQUNIO0FBQ0osaUJBaEJELFFBZ0JVQSxPQWhCVjs7QUFrQkFKLDBCQUFVVCxJQUFJK0IsS0FBSixDQUFVVixHQUFWLEVBQWVoQixPQUFPLENBQXRCLENBQVY7QUFDQUUsd0JBQVVFLFFBQVF5QixLQUFSLENBQWMsSUFBZCxDQUFWO0FBQ0ExQix1QkFBVUQsTUFBTVcsTUFBTixHQUFlLENBQXpCOztBQUVBLG9CQUFLVixPQUFPLENBQVosRUFBZ0I7QUFDWkcsK0JBQWFTLE9BQU9aLElBQXBCO0FBQ0FJLGlDQUFhUCxPQUFPRSxNQUFNQyxJQUFOLEVBQVlVLE1BQWhDO0FBQ0gsaUJBSEQsTUFHTztBQUNIUCwrQkFBYVMsSUFBYjtBQUNBUixpQ0FBYU8sTUFBYjtBQUNIOztBQUVERiwrQkFBZSxDQUFDLFFBQUQsRUFBV2pCLElBQUkrQixLQUFKLENBQVVWLEdBQVYsRUFBZWhCLE9BQU8sQ0FBdEIsQ0FBWCxFQUNYZSxJQURXLEVBQ0xDLE1BQU9GLE1BREYsRUFFWFIsUUFGVyxFQUVETixPQUFPTyxVQUZOLENBQWY7O0FBS0FPLHlCQUFTUCxVQUFUO0FBQ0FRLHVCQUFTVCxRQUFUO0FBQ0FVLHNCQUFTaEIsSUFBVDtBQUNBOztBQUVKLGlCQUFLWixFQUFMO0FBQ0lDLDBCQUFVeUMsU0FBVixHQUFzQmQsTUFBTSxDQUE1QjtBQUNBM0IsMEJBQVV1QyxJQUFWLENBQWVqQyxHQUFmO0FBQ0Esb0JBQUtOLFVBQVV5QyxTQUFWLEtBQXdCLENBQTdCLEVBQWlDO0FBQzdCOUIsMkJBQU9MLElBQUlrQixNQUFKLEdBQWEsQ0FBcEI7QUFDSCxpQkFGRCxNQUVPO0FBQ0hiLDJCQUFPWCxVQUFVeUMsU0FBVixHQUFzQixDQUE3QjtBQUNIOztBQUVEbEIsK0JBQWUsQ0FBQyxTQUFELEVBQVlqQixJQUFJK0IsS0FBSixDQUFVVixHQUFWLEVBQWVoQixPQUFPLENBQXRCLENBQVosRUFDWGUsSUFEVyxFQUNMQyxNQUFPRixNQURGLEVBRVhDLElBRlcsRUFFTGYsT0FBT2MsTUFGRixDQUFmOztBQUtBRSxzQkFBTWhCLElBQU47QUFDQTs7QUFFSixpQkFBSzVCLFNBQUw7QUFDSTRCLHVCQUFTZ0IsR0FBVDtBQUNBWCx5QkFBUyxJQUFUO0FBQ0EsdUJBQVFWLElBQUk4QixVQUFKLENBQWV6QixPQUFPLENBQXRCLE1BQTZCNUIsU0FBckMsRUFBaUQ7QUFDN0M0Qiw0QkFBUyxDQUFUO0FBQ0FLLDZCQUFTLENBQUNBLE1BQVY7QUFDSDtBQUNETix1QkFBT0osSUFBSThCLFVBQUosQ0FBZXpCLE9BQU8sQ0FBdEIsQ0FBUDtBQUNBLG9CQUFLSyxVQUFXTixTQUFTMUIsS0FBVCxJQUNBMEIsU0FBU3hCLEtBRFQsSUFFQXdCLFNBQVN6QixPQUZULElBR0F5QixTQUFTdEIsR0FIVCxJQUlBc0IsU0FBU3JCLEVBSlQsSUFLQXFCLFNBQVN2QixJQUx6QixFQUtrQztBQUM5QndCLDRCQUFRLENBQVI7QUFDQSx3QkFBS1IsY0FBY29DLElBQWQsQ0FBbUJqQyxJQUFJb0MsTUFBSixDQUFXL0IsSUFBWCxDQUFuQixDQUFMLEVBQTRDO0FBQ3hDLCtCQUFRUixjQUFjb0MsSUFBZCxDQUFtQmpDLElBQUlvQyxNQUFKLENBQVcvQixPQUFPLENBQWxCLENBQW5CLENBQVIsRUFBbUQ7QUFDL0NBLG9DQUFRLENBQVI7QUFDSDtBQUNELDRCQUFLTCxJQUFJOEIsVUFBSixDQUFlekIsT0FBTyxDQUF0QixNQUE2QnpCLEtBQWxDLEVBQTBDO0FBQ3RDeUIsb0NBQVEsQ0FBUjtBQUNIO0FBQ0o7QUFDSjs7QUFFRFksK0JBQWUsQ0FBQyxNQUFELEVBQVNqQixJQUFJK0IsS0FBSixDQUFVVixHQUFWLEVBQWVoQixPQUFPLENBQXRCLENBQVQsRUFDWGUsSUFEVyxFQUNMQyxNQUFPRixNQURGLEVBRVhDLElBRlcsRUFFTGYsT0FBT2MsTUFGRixDQUFmOztBQUtBRSxzQkFBTWhCLElBQU47QUFDQTs7QUFFSjtBQUNJLG9CQUFLRCxTQUFTMUIsS0FBVCxJQUFrQnNCLElBQUk4QixVQUFKLENBQWVULE1BQU0sQ0FBckIsTUFBNEI5QixRQUFuRCxFQUE4RDtBQUMxRGMsMkJBQU9MLElBQUlnQyxPQUFKLENBQVksSUFBWixFQUFrQlgsTUFBTSxDQUF4QixJQUE2QixDQUFwQztBQUNBLHdCQUFLaEIsU0FBUyxDQUFkLEVBQWtCO0FBQ2QsNEJBQUtILE1BQUwsRUFBYztBQUNWRyxtQ0FBT0wsSUFBSWtCLE1BQVg7QUFDSCx5QkFGRCxNQUVPO0FBQ0hNLHFDQUFTLFNBQVQ7QUFDSDtBQUNKOztBQUVEZiw4QkFBVVQsSUFBSStCLEtBQUosQ0FBVVYsR0FBVixFQUFlaEIsT0FBTyxDQUF0QixDQUFWO0FBQ0FFLDRCQUFVRSxRQUFReUIsS0FBUixDQUFjLElBQWQsQ0FBVjtBQUNBMUIsMkJBQVVELE1BQU1XLE1BQU4sR0FBZSxDQUF6Qjs7QUFFQSx3QkFBS1YsT0FBTyxDQUFaLEVBQWdCO0FBQ1pHLG1DQUFhUyxPQUFPWixJQUFwQjtBQUNBSSxxQ0FBYVAsT0FBT0UsTUFBTUMsSUFBTixFQUFZVSxNQUFoQztBQUNILHFCQUhELE1BR087QUFDSFAsbUNBQWFTLElBQWI7QUFDQVIscUNBQWFPLE1BQWI7QUFDSDs7QUFFREYsbUNBQWUsQ0FBQyxTQUFELEVBQVlSLE9BQVosRUFDWFcsSUFEVyxFQUNEQyxNQUFPRixNQUROLEVBRVhSLFFBRlcsRUFFRE4sT0FBT08sVUFGTixDQUFmOztBQUtBTyw2QkFBU1AsVUFBVDtBQUNBUSwyQkFBU1QsUUFBVDtBQUNBVSwwQkFBU2hCLElBQVQ7QUFFSCxpQkEvQkQsTUErQk87QUFDSFYsZ0NBQVl3QyxTQUFaLEdBQXdCZCxNQUFNLENBQTlCO0FBQ0ExQixnQ0FBWXNDLElBQVosQ0FBaUJqQyxHQUFqQjtBQUNBLHdCQUFLTCxZQUFZd0MsU0FBWixLQUEwQixDQUEvQixFQUFtQztBQUMvQjlCLCtCQUFPTCxJQUFJa0IsTUFBSixHQUFhLENBQXBCO0FBQ0gscUJBRkQsTUFFTztBQUNIYiwrQkFBT1YsWUFBWXdDLFNBQVosR0FBd0IsQ0FBL0I7QUFDSDs7QUFFRGxCLG1DQUFlLENBQUMsTUFBRCxFQUFTakIsSUFBSStCLEtBQUosQ0FBVVYsR0FBVixFQUFlaEIsT0FBTyxDQUF0QixDQUFULEVBQ1hlLElBRFcsRUFDTEMsTUFBT0YsTUFERixFQUVYQyxJQUZXLEVBRUxmLE9BQU9jLE1BRkYsQ0FBZjs7QUFLQUcsMkJBQU9lLElBQVAsQ0FBWXBCLFlBQVo7O0FBRUFJLDBCQUFNaEIsSUFBTjtBQUNIOztBQUVEO0FBdlBKOztBQTBQQWdCO0FBQ0EsZUFBT0osWUFBUDtBQUNIOztBQUVELGFBQVNxQixJQUFULENBQWNDLEtBQWQsRUFBcUI7QUFDakJoQixpQkFBU2MsSUFBVCxDQUFjRSxLQUFkO0FBQ0g7O0FBRUQsV0FBTztBQUNIRCxrQkFERztBQUVIViw0QkFGRztBQUdIRDtBQUhHLEtBQVA7QUFLSCIsImZpbGUiOiJ0b2tlbml6ZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImNvbnN0IFNJTkdMRV9RVU9URSAgICAgID0gJ1xcJycuY2hhckNvZGVBdCgwKTtcbmNvbnN0IERPVUJMRV9RVU9URSAgICAgID0gICdcIicuY2hhckNvZGVBdCgwKTtcbmNvbnN0IEJBQ0tTTEFTSCAgICAgICAgID0gJ1xcXFwnLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBTTEFTSCAgICAgICAgICAgICA9ICAnLycuY2hhckNvZGVBdCgwKTtcbmNvbnN0IE5FV0xJTkUgICAgICAgICAgID0gJ1xcbicuY2hhckNvZGVBdCgwKTtcbmNvbnN0IFNQQUNFICAgICAgICAgICAgID0gICcgJy5jaGFyQ29kZUF0KDApO1xuY29uc3QgRkVFRCAgICAgICAgICAgICAgPSAnXFxmJy5jaGFyQ29kZUF0KDApO1xuY29uc3QgVEFCICAgICAgICAgICAgICAgPSAnXFx0Jy5jaGFyQ29kZUF0KDApO1xuY29uc3QgQ1IgICAgICAgICAgICAgICAgPSAnXFxyJy5jaGFyQ29kZUF0KDApO1xuY29uc3QgT1BFTl9TUVVBUkUgICAgICAgPSAgJ1snLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBDTE9TRV9TUVVBUkUgICAgICA9ICAnXScuY2hhckNvZGVBdCgwKTtcbmNvbnN0IE9QRU5fUEFSRU5USEVTRVMgID0gICcoJy5jaGFyQ29kZUF0KDApO1xuY29uc3QgQ0xPU0VfUEFSRU5USEVTRVMgPSAgJyknLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBPUEVOX0NVUkxZICAgICAgICA9ICAneycuY2hhckNvZGVBdCgwKTtcbmNvbnN0IENMT1NFX0NVUkxZICAgICAgID0gICd9Jy5jaGFyQ29kZUF0KDApO1xuY29uc3QgU0VNSUNPTE9OICAgICAgICAgPSAgJzsnLmNoYXJDb2RlQXQoMCk7XG5jb25zdCBBU1RFUklTSyAgICAgICAgICA9ICAnKicuY2hhckNvZGVBdCgwKTtcbmNvbnN0IENPTE9OICAgICAgICAgICAgID0gICc6Jy5jaGFyQ29kZUF0KDApO1xuY29uc3QgQVQgICAgICAgICAgICAgICAgPSAgJ0AnLmNoYXJDb2RlQXQoMCk7XG5cbmNvbnN0IFJFX0FUX0VORCAgICAgID0gL1sgXFxuXFx0XFxyXFxmXFx7XFx9XFwoXFwpJ1wiXFxcXDsvXFxbXFxdI10vZztcbmNvbnN0IFJFX1dPUkRfRU5EICAgID0gL1sgXFxuXFx0XFxyXFxmXFwoXFwpXFx7XFx9OjtAISdcIlxcXFxcXF1cXFsjXXxcXC8oPz1cXCopL2c7XG5jb25zdCBSRV9CQURfQlJBQ0tFVCA9IC8uW1xcXFxcXC9cXChcIidcXG5dLztcbmNvbnN0IFJFX0hFWF9FU0NBUEUgID0gL1thLWYwLTldL2k7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRva2VuaXplcihpbnB1dCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgbGV0IGNzcyA9IGlucHV0LmNzcy52YWx1ZU9mKCk7XG4gICAgbGV0IGlnbm9yZSA9IG9wdGlvbnMuaWdub3JlRXJyb3JzO1xuXG4gICAgbGV0IGNvZGUsIG5leHQsIHF1b3RlLCBsaW5lcywgbGFzdCwgY29udGVudCwgZXNjYXBlLFxuICAgICAgICBuZXh0TGluZSwgbmV4dE9mZnNldCwgZXNjYXBlZCwgZXNjYXBlUG9zLCBwcmV2LCBuLCBjdXJyZW50VG9rZW47XG5cbiAgICBsZXQgbGVuZ3RoID0gY3NzLmxlbmd0aDtcbiAgICBsZXQgb2Zmc2V0ID0gLTE7XG4gICAgbGV0IGxpbmUgPSAxO1xuICAgIGxldCBwb3MgPSAwO1xuICAgIGxldCBidWZmZXIgPSBbXTtcbiAgICBsZXQgcmV0dXJuZWQgPSBbXTtcblxuICAgIGZ1bmN0aW9uIHVuY2xvc2VkKHdoYXQpIHtcbiAgICAgICAgdGhyb3cgaW5wdXQuZXJyb3IoJ1VuY2xvc2VkICcgKyB3aGF0LCBsaW5lLCBwb3MgLSBvZmZzZXQpO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGVuZE9mRmlsZSgpIHtcbiAgICAgICAgcmV0dXJuIHJldHVybmVkLmxlbmd0aCA9PT0gMCAmJiBwb3MgPj0gbGVuZ3RoO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIG5leHRUb2tlbigpIHtcbiAgICAgICAgaWYgKCByZXR1cm5lZC5sZW5ndGggKSByZXR1cm4gcmV0dXJuZWQucG9wKCk7XG4gICAgICAgIGlmICggcG9zID49IGxlbmd0aCApIHJldHVybjtcblxuICAgICAgICBjb2RlID0gY3NzLmNoYXJDb2RlQXQocG9zKTtcbiAgICAgICAgaWYgKCBjb2RlID09PSBORVdMSU5FIHx8IGNvZGUgPT09IEZFRUQgfHxcbiAgICAgICAgICAgICBjb2RlID09PSBDUiAmJiBjc3MuY2hhckNvZGVBdChwb3MgKyAxKSAhPT0gTkVXTElORSApIHtcbiAgICAgICAgICAgIG9mZnNldCA9IHBvcztcbiAgICAgICAgICAgIGxpbmUgKz0gMTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAoIGNvZGUgKSB7XG4gICAgICAgIGNhc2UgTkVXTElORTpcbiAgICAgICAgY2FzZSBTUEFDRTpcbiAgICAgICAgY2FzZSBUQUI6XG4gICAgICAgIGNhc2UgQ1I6XG4gICAgICAgIGNhc2UgRkVFRDpcbiAgICAgICAgICAgIG5leHQgPSBwb3M7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgbmV4dCArPSAxO1xuICAgICAgICAgICAgICAgIGNvZGUgPSBjc3MuY2hhckNvZGVBdChuZXh0KTtcbiAgICAgICAgICAgICAgICBpZiAoIGNvZGUgPT09IE5FV0xJTkUgKSB7XG4gICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IG5leHQ7XG4gICAgICAgICAgICAgICAgICAgIGxpbmUgKz0gMTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlICggY29kZSA9PT0gU1BBQ0UgICB8fFxuICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPT09IE5FV0xJTkUgfHxcbiAgICAgICAgICAgICAgICAgICAgICBjb2RlID09PSBUQUIgICAgIHx8XG4gICAgICAgICAgICAgICAgICAgICAgY29kZSA9PT0gQ1IgICAgICB8fFxuICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPT09IEZFRUQgKTtcblxuICAgICAgICAgICAgY3VycmVudFRva2VuID0gWydzcGFjZScsIGNzcy5zbGljZShwb3MsIG5leHQpXTtcbiAgICAgICAgICAgIHBvcyA9IG5leHQgLSAxO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBPUEVOX1NRVUFSRTpcbiAgICAgICAgICAgIGN1cnJlbnRUb2tlbiA9IFsnWycsICdbJywgbGluZSwgcG9zIC0gb2Zmc2V0XTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ0xPU0VfU1FVQVJFOlxuICAgICAgICAgICAgY3VycmVudFRva2VuID0gWyddJywgJ10nLCBsaW5lLCBwb3MgLSBvZmZzZXRdO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBPUEVOX0NVUkxZOlxuICAgICAgICAgICAgY3VycmVudFRva2VuID0gWyd7JywgJ3snLCBsaW5lLCBwb3MgLSBvZmZzZXRdO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDTE9TRV9DVVJMWTpcbiAgICAgICAgICAgIGN1cnJlbnRUb2tlbiA9IFsnfScsICd9JywgbGluZSwgcG9zIC0gb2Zmc2V0XTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQ09MT046XG4gICAgICAgICAgICBjdXJyZW50VG9rZW4gPSBbJzonLCAnOicsIGxpbmUsIHBvcyAtIG9mZnNldF07XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIFNFTUlDT0xPTjpcbiAgICAgICAgICAgIGN1cnJlbnRUb2tlbiA9IFsnOycsICc7JywgbGluZSwgcG9zIC0gb2Zmc2V0XTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgT1BFTl9QQVJFTlRIRVNFUzpcbiAgICAgICAgICAgIHByZXYgPSBidWZmZXIubGVuZ3RoID8gYnVmZmVyLnBvcCgpWzFdIDogJyc7XG4gICAgICAgICAgICBuICAgID0gY3NzLmNoYXJDb2RlQXQocG9zICsgMSk7XG4gICAgICAgICAgICBpZiAoIHByZXYgPT09ICd1cmwnICYmXG4gICAgICAgICAgICAgICAgIG4gIT09IFNJTkdMRV9RVU9URSAmJiBuICE9PSBET1VCTEVfUVVPVEUgJiZcbiAgICAgICAgICAgICAgICAgbiAhPT0gU1BBQ0UgJiYgbiAhPT0gTkVXTElORSAmJiBuICE9PSBUQUIgJiZcbiAgICAgICAgICAgICAgICAgbiAhPT0gRkVFRCAmJiBuICE9PSBDUiApIHtcbiAgICAgICAgICAgICAgICBuZXh0ID0gcG9zO1xuICAgICAgICAgICAgICAgIGRvIHtcbiAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBuZXh0ICAgID0gY3NzLmluZGV4T2YoJyknLCBuZXh0ICsgMSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICggbmV4dCA9PT0gLTEgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIGlnbm9yZSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXh0ID0gcG9zO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmNsb3NlZCgnYnJhY2tldCcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVzY2FwZVBvcyA9IG5leHQ7XG4gICAgICAgICAgICAgICAgICAgIHdoaWxlICggY3NzLmNoYXJDb2RlQXQoZXNjYXBlUG9zIC0gMSkgPT09IEJBQ0tTTEFTSCApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVzY2FwZVBvcyAtPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBlZCA9ICFlc2NhcGVkO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSB3aGlsZSAoIGVzY2FwZWQgKTtcblxuICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbiA9IFsnYnJhY2tldHMnLCBjc3Muc2xpY2UocG9zLCBuZXh0ICsgMSksXG4gICAgICAgICAgICAgICAgICAgIGxpbmUsIHBvcyAgLSBvZmZzZXQsXG4gICAgICAgICAgICAgICAgICAgIGxpbmUsIG5leHQgLSBvZmZzZXRcbiAgICAgICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICAgICAgcG9zID0gbmV4dDtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXh0ICAgID0gY3NzLmluZGV4T2YoJyknLCBwb3MgKyAxKTtcbiAgICAgICAgICAgICAgICBjb250ZW50ID0gY3NzLnNsaWNlKHBvcywgbmV4dCArIDEpO1xuXG4gICAgICAgICAgICAgICAgaWYgKCBuZXh0ID09PSAtMSB8fCBSRV9CQURfQlJBQ0tFVC50ZXN0KGNvbnRlbnQpICkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW4gPSBbJygnLCAnKCcsIGxpbmUsIHBvcyAtIG9mZnNldF07XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudFRva2VuID0gWydicmFja2V0cycsIGNvbnRlbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lLCBwb3MgIC0gb2Zmc2V0LFxuICAgICAgICAgICAgICAgICAgICAgICAgbGluZSwgbmV4dCAtIG9mZnNldFxuICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICBwb3MgPSBuZXh0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDTE9TRV9QQVJFTlRIRVNFUzpcbiAgICAgICAgICAgIGN1cnJlbnRUb2tlbiA9IFsnKScsICcpJywgbGluZSwgcG9zIC0gb2Zmc2V0XTtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgU0lOR0xFX1FVT1RFOlxuICAgICAgICBjYXNlIERPVUJMRV9RVU9URTpcbiAgICAgICAgICAgIHF1b3RlID0gY29kZSA9PT0gU0lOR0xFX1FVT1RFID8gJ1xcJycgOiAnXCInO1xuICAgICAgICAgICAgbmV4dCAgPSBwb3M7XG4gICAgICAgICAgICBkbyB7XG4gICAgICAgICAgICAgICAgZXNjYXBlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIG5leHQgICAgPSBjc3MuaW5kZXhPZihxdW90ZSwgbmV4dCArIDEpO1xuICAgICAgICAgICAgICAgIGlmICggbmV4dCA9PT0gLTEgKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICggaWdub3JlICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHBvcyArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHVuY2xvc2VkKCdzdHJpbmcnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlc2NhcGVQb3MgPSBuZXh0O1xuICAgICAgICAgICAgICAgIHdoaWxlICggY3NzLmNoYXJDb2RlQXQoZXNjYXBlUG9zIC0gMSkgPT09IEJBQ0tTTEFTSCApIHtcbiAgICAgICAgICAgICAgICAgICAgZXNjYXBlUG9zIC09IDE7XG4gICAgICAgICAgICAgICAgICAgIGVzY2FwZWQgPSAhZXNjYXBlZDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IHdoaWxlICggZXNjYXBlZCApO1xuXG4gICAgICAgICAgICBjb250ZW50ID0gY3NzLnNsaWNlKHBvcywgbmV4dCArIDEpO1xuICAgICAgICAgICAgbGluZXMgICA9IGNvbnRlbnQuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgbGFzdCAgICA9IGxpbmVzLmxlbmd0aCAtIDE7XG5cbiAgICAgICAgICAgIGlmICggbGFzdCA+IDAgKSB7XG4gICAgICAgICAgICAgICAgbmV4dExpbmUgICA9IGxpbmUgKyBsYXN0O1xuICAgICAgICAgICAgICAgIG5leHRPZmZzZXQgPSBuZXh0IC0gbGluZXNbbGFzdF0ubGVuZ3RoO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXh0TGluZSAgID0gbGluZTtcbiAgICAgICAgICAgICAgICBuZXh0T2Zmc2V0ID0gb2Zmc2V0O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50VG9rZW4gPSBbJ3N0cmluZycsIGNzcy5zbGljZShwb3MsIG5leHQgKyAxKSxcbiAgICAgICAgICAgICAgICBsaW5lLCBwb3MgIC0gb2Zmc2V0LFxuICAgICAgICAgICAgICAgIG5leHRMaW5lLCBuZXh0IC0gbmV4dE9mZnNldFxuICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgb2Zmc2V0ID0gbmV4dE9mZnNldDtcbiAgICAgICAgICAgIGxpbmUgICA9IG5leHRMaW5lO1xuICAgICAgICAgICAgcG9zICAgID0gbmV4dDtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgQVQ6XG4gICAgICAgICAgICBSRV9BVF9FTkQubGFzdEluZGV4ID0gcG9zICsgMTtcbiAgICAgICAgICAgIFJFX0FUX0VORC50ZXN0KGNzcyk7XG4gICAgICAgICAgICBpZiAoIFJFX0FUX0VORC5sYXN0SW5kZXggPT09IDAgKSB7XG4gICAgICAgICAgICAgICAgbmV4dCA9IGNzcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXh0ID0gUkVfQVRfRU5ELmxhc3RJbmRleCAtIDI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGN1cnJlbnRUb2tlbiA9IFsnYXQtd29yZCcsIGNzcy5zbGljZShwb3MsIG5leHQgKyAxKSxcbiAgICAgICAgICAgICAgICBsaW5lLCBwb3MgIC0gb2Zmc2V0LFxuICAgICAgICAgICAgICAgIGxpbmUsIG5leHQgLSBvZmZzZXRcbiAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgIHBvcyA9IG5leHQ7XG4gICAgICAgICAgICBicmVhaztcblxuICAgICAgICBjYXNlIEJBQ0tTTEFTSDpcbiAgICAgICAgICAgIG5leHQgICA9IHBvcztcbiAgICAgICAgICAgIGVzY2FwZSA9IHRydWU7XG4gICAgICAgICAgICB3aGlsZSAoIGNzcy5jaGFyQ29kZUF0KG5leHQgKyAxKSA9PT0gQkFDS1NMQVNIICkge1xuICAgICAgICAgICAgICAgIG5leHQgICs9IDE7XG4gICAgICAgICAgICAgICAgZXNjYXBlID0gIWVzY2FwZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvZGUgPSBjc3MuY2hhckNvZGVBdChuZXh0ICsgMSk7XG4gICAgICAgICAgICBpZiAoIGVzY2FwZSAmJiAoY29kZSAhPT0gU0xBU0ggICAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgIT09IFNQQUNFICAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlICE9PSBORVdMSU5FICYmXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSAhPT0gVEFCICAgICAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgIT09IENSICAgICAgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlICE9PSBGRUVEICkgKSB7XG4gICAgICAgICAgICAgICAgbmV4dCArPSAxO1xuICAgICAgICAgICAgICAgIGlmICggUkVfSEVYX0VTQ0FQRS50ZXN0KGNzcy5jaGFyQXQobmV4dCkpICkge1xuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoIFJFX0hFWF9FU0NBUEUudGVzdChjc3MuY2hhckF0KG5leHQgKyAxKSkgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZXh0ICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKCBjc3MuY2hhckNvZGVBdChuZXh0ICsgMSkgPT09IFNQQUNFICkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV4dCArPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjdXJyZW50VG9rZW4gPSBbJ3dvcmQnLCBjc3Muc2xpY2UocG9zLCBuZXh0ICsgMSksXG4gICAgICAgICAgICAgICAgbGluZSwgcG9zICAtIG9mZnNldCxcbiAgICAgICAgICAgICAgICBsaW5lLCBuZXh0IC0gb2Zmc2V0XG4gICAgICAgICAgICBdO1xuXG4gICAgICAgICAgICBwb3MgPSBuZXh0O1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGlmICggY29kZSA9PT0gU0xBU0ggJiYgY3NzLmNoYXJDb2RlQXQocG9zICsgMSkgPT09IEFTVEVSSVNLICkge1xuICAgICAgICAgICAgICAgIG5leHQgPSBjc3MuaW5kZXhPZignKi8nLCBwb3MgKyAyKSArIDE7XG4gICAgICAgICAgICAgICAgaWYgKCBuZXh0ID09PSAwICkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIGlnbm9yZSApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5leHQgPSBjc3MubGVuZ3RoO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdW5jbG9zZWQoJ2NvbW1lbnQnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnRlbnQgPSBjc3Muc2xpY2UocG9zLCBuZXh0ICsgMSk7XG4gICAgICAgICAgICAgICAgbGluZXMgICA9IGNvbnRlbnQuc3BsaXQoJ1xcbicpO1xuICAgICAgICAgICAgICAgIGxhc3QgICAgPSBsaW5lcy5sZW5ndGggLSAxO1xuXG4gICAgICAgICAgICAgICAgaWYgKCBsYXN0ID4gMCApIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dExpbmUgICA9IGxpbmUgKyBsYXN0O1xuICAgICAgICAgICAgICAgICAgICBuZXh0T2Zmc2V0ID0gbmV4dCAtIGxpbmVzW2xhc3RdLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuZXh0TGluZSAgID0gbGluZTtcbiAgICAgICAgICAgICAgICAgICAgbmV4dE9mZnNldCA9IG9mZnNldDtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjdXJyZW50VG9rZW4gPSBbJ2NvbW1lbnQnLCBjb250ZW50LFxuICAgICAgICAgICAgICAgICAgICBsaW5lLCAgICAgcG9zICAtIG9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgbmV4dExpbmUsIG5leHQgLSBuZXh0T2Zmc2V0XG4gICAgICAgICAgICAgICAgXTtcblxuICAgICAgICAgICAgICAgIG9mZnNldCA9IG5leHRPZmZzZXQ7XG4gICAgICAgICAgICAgICAgbGluZSAgID0gbmV4dExpbmU7XG4gICAgICAgICAgICAgICAgcG9zICAgID0gbmV4dDtcblxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBSRV9XT1JEX0VORC5sYXN0SW5kZXggPSBwb3MgKyAxO1xuICAgICAgICAgICAgICAgIFJFX1dPUkRfRU5ELnRlc3QoY3NzKTtcbiAgICAgICAgICAgICAgICBpZiAoIFJFX1dPUkRfRU5ELmxhc3RJbmRleCA9PT0gMCApIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCA9IGNzcy5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQgPSBSRV9XT1JEX0VORC5sYXN0SW5kZXggLSAyO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGN1cnJlbnRUb2tlbiA9IFsnd29yZCcsIGNzcy5zbGljZShwb3MsIG5leHQgKyAxKSxcbiAgICAgICAgICAgICAgICAgICAgbGluZSwgcG9zICAtIG9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgbGluZSwgbmV4dCAtIG9mZnNldFxuICAgICAgICAgICAgICAgIF07XG5cbiAgICAgICAgICAgICAgICBidWZmZXIucHVzaChjdXJyZW50VG9rZW4pO1xuXG4gICAgICAgICAgICAgICAgcG9zID0gbmV4dDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cblxuICAgICAgICBwb3MrKztcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRUb2tlbjtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBiYWNrKHRva2VuKSB7XG4gICAgICAgIHJldHVybmVkLnB1c2godG9rZW4pO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICAgIGJhY2ssXG4gICAgICAgIG5leHRUb2tlbixcbiAgICAgICAgZW5kT2ZGaWxlXG4gICAgfTtcbn1cbiJdfQ==
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/vendor.js b/node_modules/postcss-reporter/node_modules/postcss/lib/vendor.js
new file mode 100644
index 00000000..e8f342e4
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/vendor.js
@@ -0,0 +1,52 @@
+'use strict';
+
+exports.__esModule = true;
+/**
+ * Contains helpers for working with vendor prefixes.
+ *
+ * @example
+ * const vendor = postcss.vendor;
+ *
+ * @namespace vendor
+ */
+var vendor = {
+
+ /**
+ * Returns the vendor prefix extracted from an input string.
+ *
+ * @param {string} prop - string with or without vendor prefix
+ *
+ * @return {string} vendor prefix or empty string
+ *
+ * @example
+ * postcss.vendor.prefix('-moz-tab-size') //=> '-moz-'
+ * postcss.vendor.prefix('tab-size') //=> ''
+ */
+ prefix: function prefix(prop) {
+ var match = prop.match(/^(-\w+-)/);
+ if (match) {
+ return match[0];
+ } else {
+ return '';
+ }
+ },
+
+
+ /**
+ * Returns the input string stripped of its vendor prefix.
+ *
+ * @param {string} prop - string with or without vendor prefix
+ *
+ * @return {string} string name without vendor prefixes
+ *
+ * @example
+ * postcss.vendor.unprefixed('-moz-tab-size') //=> 'tab-size'
+ */
+ unprefixed: function unprefixed(prop) {
+ return prop.replace(/^-\w+-/, '');
+ }
+};
+
+exports.default = vendor;
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInZlbmRvci5lczYiXSwibmFtZXMiOlsidmVuZG9yIiwicHJlZml4IiwicHJvcCIsIm1hdGNoIiwidW5wcmVmaXhlZCIsInJlcGxhY2UiXSwibWFwcGluZ3MiOiI7OztBQUFBOzs7Ozs7OztBQVFBLElBQUlBLFNBQVM7O0FBRVQ7Ozs7Ozs7Ozs7O0FBV0FDLFVBYlMsa0JBYUZDLElBYkUsRUFhSTtBQUNULFlBQUlDLFFBQVFELEtBQUtDLEtBQUwsQ0FBVyxVQUFYLENBQVo7QUFDQSxZQUFLQSxLQUFMLEVBQWE7QUFDVCxtQkFBT0EsTUFBTSxDQUFOLENBQVA7QUFDSCxTQUZELE1BRU87QUFDSCxtQkFBTyxFQUFQO0FBQ0g7QUFDSixLQXBCUTs7O0FBc0JUOzs7Ozs7Ozs7O0FBVUFDLGNBaENTLHNCQWdDRUYsSUFoQ0YsRUFnQ1E7QUFDYixlQUFPQSxLQUFLRyxPQUFMLENBQWEsUUFBYixFQUF1QixFQUF2QixDQUFQO0FBQ0g7QUFsQ1EsQ0FBYjs7a0JBc0NlTCxNIiwiZmlsZSI6InZlbmRvci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29udGFpbnMgaGVscGVycyBmb3Igd29ya2luZyB3aXRoIHZlbmRvciBwcmVmaXhlcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogY29uc3QgdmVuZG9yID0gcG9zdGNzcy52ZW5kb3I7XG4gKlxuICogQG5hbWVzcGFjZSB2ZW5kb3JcbiAqL1xubGV0IHZlbmRvciA9IHtcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIHZlbmRvciBwcmVmaXggZXh0cmFjdGVkIGZyb20gYW4gaW5wdXQgc3RyaW5nLlxuICAgICAqXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHByb3AgLSBzdHJpbmcgd2l0aCBvciB3aXRob3V0IHZlbmRvciBwcmVmaXhcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gdmVuZG9yIHByZWZpeCBvciBlbXB0eSBzdHJpbmdcbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogcG9zdGNzcy52ZW5kb3IucHJlZml4KCctbW96LXRhYi1zaXplJykgLy89PiAnLW1vei0nXG4gICAgICogcG9zdGNzcy52ZW5kb3IucHJlZml4KCd0YWItc2l6ZScpICAgICAgLy89PiAnJ1xuICAgICAqL1xuICAgIHByZWZpeChwcm9wKSB7XG4gICAgICAgIGxldCBtYXRjaCA9IHByb3AubWF0Y2goL14oLVxcdystKS8pO1xuICAgICAgICBpZiAoIG1hdGNoICkge1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoWzBdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuICcnO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIC8qKlxuICAgICAqIFJldHVybnMgdGhlIGlucHV0IHN0cmluZyBzdHJpcHBlZCBvZiBpdHMgdmVuZG9yIHByZWZpeC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wIC0gc3RyaW5nIHdpdGggb3Igd2l0aG91dCB2ZW5kb3IgcHJlZml4XG4gICAgICpcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9IHN0cmluZyBuYW1lIHdpdGhvdXQgdmVuZG9yIHByZWZpeGVzXG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHBvc3Rjc3MudmVuZG9yLnVucHJlZml4ZWQoJy1tb3otdGFiLXNpemUnKSAvLz0+ICd0YWItc2l6ZSdcbiAgICAgKi9cbiAgICB1bnByZWZpeGVkKHByb3ApIHtcbiAgICAgICAgcmV0dXJuIHByb3AucmVwbGFjZSgvXi1cXHcrLS8sICcnKTtcbiAgICB9XG5cbn07XG5cbmV4cG9ydCBkZWZhdWx0IHZlbmRvcjtcbiJdfQ==
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/warn-once.js b/node_modules/postcss-reporter/node_modules/postcss/lib/warn-once.js
new file mode 100644
index 00000000..00b2e775
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/warn-once.js
@@ -0,0 +1,14 @@
+'use strict';
+
+exports.__esModule = true;
+exports.default = warnOnce;
+var printed = {};
+
+function warnOnce(message) {
+ if (printed[message]) return;
+ printed[message] = true;
+
+ if (typeof console !== 'undefined' && console.warn) console.warn(message);
+}
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndhcm4tb25jZS5lczYiXSwibmFtZXMiOlsid2Fybk9uY2UiLCJwcmludGVkIiwibWVzc2FnZSIsImNvbnNvbGUiLCJ3YXJuIl0sIm1hcHBpbmdzIjoiOzs7a0JBRXdCQSxRO0FBRnhCLElBQUlDLFVBQVUsRUFBZDs7QUFFZSxTQUFTRCxRQUFULENBQWtCRSxPQUFsQixFQUEyQjtBQUN0QyxRQUFLRCxRQUFRQyxPQUFSLENBQUwsRUFBd0I7QUFDeEJELFlBQVFDLE9BQVIsSUFBbUIsSUFBbkI7O0FBRUEsUUFBSyxPQUFPQyxPQUFQLEtBQW1CLFdBQW5CLElBQWtDQSxRQUFRQyxJQUEvQyxFQUFzREQsUUFBUUMsSUFBUixDQUFhRixPQUFiO0FBQ3pEIiwiZmlsZSI6Indhcm4tb25jZS5qcyIsInNvdXJjZXNDb250ZW50IjpbImxldCBwcmludGVkID0geyB9O1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB3YXJuT25jZShtZXNzYWdlKSB7XG4gICAgaWYgKCBwcmludGVkW21lc3NhZ2VdICkgcmV0dXJuO1xuICAgIHByaW50ZWRbbWVzc2FnZV0gPSB0cnVlO1xuXG4gICAgaWYgKCB0eXBlb2YgY29uc29sZSAhPT0gJ3VuZGVmaW5lZCcgJiYgY29uc29sZS53YXJuICkgY29uc29sZS53YXJuKG1lc3NhZ2UpO1xufVxuIl19
diff --git a/node_modules/postcss-reporter/node_modules/postcss/lib/warning.js b/node_modules/postcss-reporter/node_modules/postcss/lib/warning.js
new file mode 100644
index 00000000..bcf0a8b3
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/lib/warning.js
@@ -0,0 +1,122 @@
+'use strict';
+
+exports.__esModule = true;
+
+function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
+
+/**
+ * Represents a plugin’s warning. It can be created using {@link Node#warn}.
+ *
+ * @example
+ * if ( decl.important ) {
+ * decl.warn(result, 'Avoid !important', { word: '!important' });
+ * }
+ */
+var Warning = function () {
+
+ /**
+ * @param {string} text - warning message
+ * @param {Object} [opts] - warning options
+ * @param {Node} opts.node - CSS node that caused the warning
+ * @param {string} opts.word - word in CSS source that caused the warning
+ * @param {number} opts.index - index in CSS node string that caused
+ * the warning
+ * @param {string} opts.plugin - name of the plugin that created
+ * this warning. {@link Result#warn} fills
+ * this property automatically.
+ */
+ function Warning(text) {
+ var opts = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
+
+ _classCallCheck(this, Warning);
+
+ /**
+ * @member {string} - Type to filter warnings from
+ * {@link Result#messages}. Always equal
+ * to `"warning"`.
+ *
+ * @example
+ * const nonWarning = result.messages.filter(i => i.type !== 'warning')
+ */
+ this.type = 'warning';
+ /**
+ * @member {string} - The warning message.
+ *
+ * @example
+ * warning.text //=> 'Try to avoid !important'
+ */
+ this.text = text;
+
+ if (opts.node && opts.node.source) {
+ var pos = opts.node.positionBy(opts);
+ /**
+ * @member {number} - Line in the input file
+ * with this warning’s source
+ *
+ * @example
+ * warning.line //=> 5
+ */
+ this.line = pos.line;
+ /**
+ * @member {number} - Column in the input file
+ * with this warning’s source.
+ *
+ * @example
+ * warning.column //=> 6
+ */
+ this.column = pos.column;
+ }
+
+ for (var opt in opts) {
+ this[opt] = opts[opt];
+ }
+ }
+
+ /**
+ * Returns a warning position and message.
+ *
+ * @example
+ * warning.toString() //=> 'postcss-lint:a.css:10:14: Avoid !important'
+ *
+ * @return {string} warning position and message
+ */
+
+
+ Warning.prototype.toString = function toString() {
+ if (this.node) {
+ return this.node.error(this.text, {
+ plugin: this.plugin,
+ index: this.index,
+ word: this.word
+ }).message;
+ } else if (this.plugin) {
+ return this.plugin + ': ' + this.text;
+ } else {
+ return this.text;
+ }
+ };
+
+ /**
+ * @memberof Warning#
+ * @member {string} plugin - The name of the plugin that created
+ * it will fill this property automatically.
+ * this warning. When you call {@link Node#warn}
+ *
+ * @example
+ * warning.plugin //=> 'postcss-important'
+ */
+
+ /**
+ * @memberof Warning#
+ * @member {Node} node - Contains the CSS node that caused the warning.
+ *
+ * @example
+ * warning.node.toString() //=> 'color: white !important'
+ */
+
+ return Warning;
+}();
+
+exports.default = Warning;
+module.exports = exports['default'];
+//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndhcm5pbmcuZXM2Il0sIm5hbWVzIjpbIldhcm5pbmciLCJ0ZXh0Iiwib3B0cyIsInR5cGUiLCJub2RlIiwic291cmNlIiwicG9zIiwicG9zaXRpb25CeSIsImxpbmUiLCJjb2x1bW4iLCJvcHQiLCJ0b1N0cmluZyIsImVycm9yIiwicGx1Z2luIiwiaW5kZXgiLCJ3b3JkIiwibWVzc2FnZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7Ozs7Ozs7O0lBUU1BLE87O0FBRUY7Ozs7Ozs7Ozs7O0FBV0EsbUJBQVlDLElBQVosRUFBOEI7QUFBQSxRQUFaQyxJQUFZLHVFQUFMLEVBQUs7O0FBQUE7O0FBQzFCOzs7Ozs7OztBQVFBLFNBQUtDLElBQUwsR0FBWSxTQUFaO0FBQ0E7Ozs7OztBQU1BLFNBQUtGLElBQUwsR0FBWUEsSUFBWjs7QUFFQSxRQUFLQyxLQUFLRSxJQUFMLElBQWFGLEtBQUtFLElBQUwsQ0FBVUMsTUFBNUIsRUFBcUM7QUFDakMsVUFBSUMsTUFBVUosS0FBS0UsSUFBTCxDQUFVRyxVQUFWLENBQXFCTCxJQUFyQixDQUFkO0FBQ0E7Ozs7Ozs7QUFPQSxXQUFLTSxJQUFMLEdBQWNGLElBQUlFLElBQWxCO0FBQ0E7Ozs7Ozs7QUFPQSxXQUFLQyxNQUFMLEdBQWNILElBQUlHLE1BQWxCO0FBQ0g7O0FBRUQsU0FBTSxJQUFJQyxHQUFWLElBQWlCUixJQUFqQjtBQUF3QixXQUFLUSxHQUFMLElBQVlSLEtBQUtRLEdBQUwsQ0FBWjtBQUF4QjtBQUNIOztBQUVEOzs7Ozs7Ozs7O29CQVFBQyxRLHVCQUFXO0FBQ1AsUUFBSyxLQUFLUCxJQUFWLEVBQWlCO0FBQ2IsYUFBTyxLQUFLQSxJQUFMLENBQVVRLEtBQVYsQ0FBZ0IsS0FBS1gsSUFBckIsRUFBMkI7QUFDOUJZLGdCQUFRLEtBQUtBLE1BRGlCO0FBRTlCQyxlQUFRLEtBQUtBLEtBRmlCO0FBRzlCQyxjQUFRLEtBQUtBO0FBSGlCLE9BQTNCLEVBSUpDLE9BSkg7QUFLSCxLQU5ELE1BTU8sSUFBSyxLQUFLSCxNQUFWLEVBQW1CO0FBQ3RCLGFBQU8sS0FBS0EsTUFBTCxHQUFjLElBQWQsR0FBcUIsS0FBS1osSUFBakM7QUFDSCxLQUZNLE1BRUE7QUFDSCxhQUFPLEtBQUtBLElBQVo7QUFDSDtBQUNKLEc7O0FBRUQ7Ozs7Ozs7Ozs7QUFVQTs7Ozs7Ozs7Ozs7a0JBVVdELE8iLCJmaWxlIjoid2FybmluZy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogUmVwcmVzZW50cyBhIHBsdWdpbuKAmXMgd2FybmluZy4gSXQgY2FuIGJlIGNyZWF0ZWQgdXNpbmcge0BsaW5rIE5vZGUjd2Fybn0uXG4gKlxuICogQGV4YW1wbGVcbiAqIGlmICggZGVjbC5pbXBvcnRhbnQgKSB7XG4gKiAgICAgZGVjbC53YXJuKHJlc3VsdCwgJ0F2b2lkICFpbXBvcnRhbnQnLCB7IHdvcmQ6ICchaW1wb3J0YW50JyB9KTtcbiAqIH1cbiAqL1xuY2xhc3MgV2FybmluZyB7XG5cbiAgICAvKipcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAgICAgICAgLSB3YXJuaW5nIG1lc3NhZ2VcbiAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdHNdICAgICAgLSB3YXJuaW5nIG9wdGlvbnNcbiAgICAgKiBAcGFyYW0ge05vZGV9ICAgb3B0cy5ub2RlICAgLSBDU1Mgbm9kZSB0aGF0IGNhdXNlZCB0aGUgd2FybmluZ1xuICAgICAqIEBwYXJhbSB7c3RyaW5nfSBvcHRzLndvcmQgICAtIHdvcmQgaW4gQ1NTIHNvdXJjZSB0aGF0IGNhdXNlZCB0aGUgd2FybmluZ1xuICAgICAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLmluZGV4ICAtIGluZGV4IGluIENTUyBub2RlIHN0cmluZyB0aGF0IGNhdXNlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSB3YXJuaW5nXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IG9wdHMucGx1Z2luIC0gbmFtZSBvZiB0aGUgcGx1Z2luIHRoYXQgY3JlYXRlZFxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgd2FybmluZy4ge0BsaW5rIFJlc3VsdCN3YXJufSBmaWxsc1xuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcHJvcGVydHkgYXV0b21hdGljYWxseS5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3Rvcih0ZXh0LCBvcHRzID0geyB9KSB7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAbWVtYmVyIHtzdHJpbmd9IC0gVHlwZSB0byBmaWx0ZXIgd2FybmluZ3MgZnJvbVxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAge0BsaW5rIFJlc3VsdCNtZXNzYWdlc30uIEFsd2F5cyBlcXVhbFxuICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgdG8gYFwid2FybmluZ1wiYC5cbiAgICAgICAgICpcbiAgICAgICAgICogQGV4YW1wbGVcbiAgICAgICAgICogY29uc3Qgbm9uV2FybmluZyA9IHJlc3VsdC5tZXNzYWdlcy5maWx0ZXIoaSA9PiBpLnR5cGUgIT09ICd3YXJuaW5nJylcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudHlwZSA9ICd3YXJuaW5nJztcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEBtZW1iZXIge3N0cmluZ30gLSBUaGUgd2FybmluZyBtZXNzYWdlLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgKiB3YXJuaW5nLnRleHQgLy89PiAnVHJ5IHRvIGF2b2lkICFpbXBvcnRhbnQnXG4gICAgICAgICAqL1xuICAgICAgICB0aGlzLnRleHQgPSB0ZXh0O1xuXG4gICAgICAgIGlmICggb3B0cy5ub2RlICYmIG9wdHMubm9kZS5zb3VyY2UgKSB7XG4gICAgICAgICAgICBsZXQgcG9zICAgICA9IG9wdHMubm9kZS5wb3NpdGlvbkJ5KG9wdHMpO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IC0gTGluZSBpbiB0aGUgaW5wdXQgZmlsZVxuICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgIHdpdGggdGhpcyB3YXJuaW5n4oCZcyBzb3VyY2VcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgICAgICogd2FybmluZy5saW5lIC8vPT4gNVxuICAgICAgICAgICAgICovXG4gICAgICAgICAgICB0aGlzLmxpbmUgICA9IHBvcy5saW5lO1xuICAgICAgICAgICAgLyoqXG4gICAgICAgICAgICAgKiBAbWVtYmVyIHtudW1iZXJ9IC0gQ29sdW1uIGluIHRoZSBpbnB1dCBmaWxlXG4gICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgd2l0aCB0aGlzIHdhcm5pbmfigJlzIHNvdXJjZS5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBAZXhhbXBsZVxuICAgICAgICAgICAgICogd2FybmluZy5jb2x1bW4gLy89PiA2XG4gICAgICAgICAgICAgKi9cbiAgICAgICAgICAgIHRoaXMuY29sdW1uID0gcG9zLmNvbHVtbjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoIGxldCBvcHQgaW4gb3B0cyApIHRoaXNbb3B0XSA9IG9wdHNbb3B0XTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBSZXR1cm5zIGEgd2FybmluZyBwb3NpdGlvbiBhbmQgbWVzc2FnZS5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogd2FybmluZy50b1N0cmluZygpIC8vPT4gJ3Bvc3Rjc3MtbGludDphLmNzczoxMDoxNDogQXZvaWQgIWltcG9ydGFudCdcbiAgICAgKlxuICAgICAqIEByZXR1cm4ge3N0cmluZ30gd2FybmluZyBwb3NpdGlvbiBhbmQgbWVzc2FnZVxuICAgICAqL1xuICAgIHRvU3RyaW5nKCkge1xuICAgICAgICBpZiAoIHRoaXMubm9kZSApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm5vZGUuZXJyb3IodGhpcy50ZXh0LCB7XG4gICAgICAgICAgICAgICAgcGx1Z2luOiB0aGlzLnBsdWdpbixcbiAgICAgICAgICAgICAgICBpbmRleDogIHRoaXMuaW5kZXgsXG4gICAgICAgICAgICAgICAgd29yZDogICB0aGlzLndvcmRcbiAgICAgICAgICAgIH0pLm1lc3NhZ2U7XG4gICAgICAgIH0gZWxzZSBpZiAoIHRoaXMucGx1Z2luICkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMucGx1Z2luICsgJzogJyArIHRoaXMudGV4dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRleHQ7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBAbWVtYmVyb2YgV2FybmluZyNcbiAgICAgKiBAbWVtYmVyIHtzdHJpbmd9IHBsdWdpbiAtIFRoZSBuYW1lIG9mIHRoZSBwbHVnaW4gdGhhdCBjcmVhdGVkXG4gICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICBpdCB3aWxsIGZpbGwgdGhpcyBwcm9wZXJ0eSBhdXRvbWF0aWNhbGx5LlxuICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcyB3YXJuaW5nLiBXaGVuIHlvdSBjYWxsIHtAbGluayBOb2RlI3dhcm59XG4gICAgICpcbiAgICAgKiBAZXhhbXBsZVxuICAgICAqIHdhcm5pbmcucGx1Z2luIC8vPT4gJ3Bvc3Rjc3MtaW1wb3J0YW50J1xuICAgICAqL1xuXG4gICAgLyoqXG4gICAgICogQG1lbWJlcm9mIFdhcm5pbmcjXG4gICAgICogQG1lbWJlciB7Tm9kZX0gbm9kZSAtIENvbnRhaW5zIHRoZSBDU1Mgbm9kZSB0aGF0IGNhdXNlZCB0aGUgd2FybmluZy5cbiAgICAgKlxuICAgICAqIEBleGFtcGxlXG4gICAgICogd2FybmluZy5ub2RlLnRvU3RyaW5nKCkgLy89PiAnY29sb3I6IHdoaXRlICFpbXBvcnRhbnQnXG4gICAgICovXG5cbn1cblxuZXhwb3J0IGRlZmF1bHQgV2FybmluZztcbiJdfQ==
diff --git a/node_modules/postcss-reporter/node_modules/postcss/package.json b/node_modules/postcss-reporter/node_modules/postcss/package.json
new file mode 100644
index 00000000..4e3dcb9f
--- /dev/null
+++ b/node_modules/postcss-reporter/node_modules/postcss/package.json
@@ -0,0 +1,25 @@
+{
+ "name": "postcss",
+ "version": "6.0.23",
+ "description": "Tool for transforming styles with JS plugins",
+ "engines": {
+ "node": ">=4.0.0"
+ },
+ "keywords": ["css", "postcss", "rework", "preprocessor", "parser", "source map", "transform", "manipulation", "transpiler"],
+ "author": "Andrey Sitnik <andrey@sitnik.ru>",
+ "license": "MIT",
+ "homepage": "https://postcss.org/",
+ "repository": "postcss/postcss",
+ "dependencies": {
+ "chalk": "^2.4.1",
+ "source-map": "^0.6.1",
+ "supports-color": "^5.4.0"
+ },
+ "main": "lib/postcss",
+ "types": "lib/postcss.d.ts",
+ "browser": {
+ "supports-color": false,
+ "chalk": false,
+ "fs": false
+ }
+} \ No newline at end of file
diff --git a/node_modules/postcss-reporter/package.json b/node_modules/postcss-reporter/package.json
index 15a9867c..7233b6f0 100644
--- a/node_modules/postcss-reporter/package.json
+++ b/node_modules/postcss-reporter/package.json
@@ -1,31 +1,46 @@
{
"name": "postcss-reporter",
- "version": "7.0.5",
+ "version": "5.0.0",
"description": "Log PostCSS messages in the console",
"main": "index.js",
+ "scripts": {
+ "lint": "eslint .",
+ "test": "npm run lint && tape test",
+ "visual": "node test/visual.js"
+ },
"files": [
"index.js",
"lib"
],
- "engines": {
- "node": ">=10"
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/postcss/postcss-reporter.git"
},
- "repository": "postcss/postcss-reporter",
"author": {
"name": "David Clark",
"email": "david.dave.clark@gmail.com",
- "url": "https://davidtheclark.com"
+ "url": "http://davidtheclark.com"
},
"license": "MIT",
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
+ "bugs": {
+ "url": "https://github.com/postcss/postcss-reporter/issues"
},
- "peerDependencies": {
- "postcss": "^8.1.0"
+ "homepage": "https://github.com/postcss/postcss-reporter",
+ "devDependencies": {
+ "eslint": "1.3.1",
+ "less": "2.7.1",
+ "source-map": "0.5.6",
+ "strip-color": "^0.1.0",
+ "stylelint": "6.8.0",
+ "tape": "^4.7.0"
},
"dependencies": {
- "picocolors": "^1.0.0",
- "thenby": "^1.3.4"
+ "chalk": "^2.0.1",
+ "lodash": "^4.17.4",
+ "log-symbols": "^2.0.0",
+ "postcss": "^6.0.8"
+ },
+ "engines": {
+ "node": ">=4"
}
}
diff --git a/node_modules/postcss-selector-parser/node_modules/.bin/cssesc b/node_modules/postcss-selector-parser/node_modules/.bin/cssesc
new file mode 120000
index 00000000..7ba2ed9b
--- /dev/null
+++ b/node_modules/postcss-selector-parser/node_modules/.bin/cssesc
@@ -0,0 +1 @@
+../../../cssesc/bin/cssesc \ No newline at end of file
diff --git a/node_modules/postcss-svgo/node_modules/.bin/svgo b/node_modules/postcss-svgo/node_modules/.bin/svgo
new file mode 120000
index 00000000..a8d8be9a
--- /dev/null
+++ b/node_modules/postcss-svgo/node_modules/.bin/svgo
@@ -0,0 +1 @@
+../../../svgo/bin/svgo \ No newline at end of file
diff --git a/node_modules/postcss-unopacity/node_modules/ansi-regex/index.js b/node_modules/postcss-unopacity/node_modules/ansi-regex/index.js
deleted file mode 100644
index b9574ed7..00000000
--- a/node_modules/postcss-unopacity/node_modules/ansi-regex/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-'use strict';
-module.exports = function () {
- return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g;
-};
diff --git a/node_modules/postcss-unopacity/node_modules/ansi-regex/license b/node_modules/postcss-unopacity/node_modules/ansi-regex/license
deleted file mode 100644
index 654d0bfe..00000000
--- a/node_modules/postcss-unopacity/node_modules/ansi-regex/license
+++ /dev/null
@@ -1,21 +0,0 @@
-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.
diff --git a/node_modules/postcss-unopacity/node_modules/ansi-regex/package.json b/node_modules/postcss-unopacity/node_modules/ansi-regex/package.json
deleted file mode 100644
index eb44fb5c..00000000
--- a/node_modules/postcss-unopacity/node_modules/ansi-regex/package.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
- "name": "ansi-regex",
- "version": "2.1.1",
- "description": "Regular expression for matching ANSI escape codes",
- "license": "MIT",
- "repository": "chalk/ansi-regex",
- "author": {
- "name": "Sindre Sorhus",
- "email": "sindresorhus@gmail.com",
- "url": "sindresorhus.com"
- },
- "maintainers": [
- "Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)",
- "Joshua Appelman <jappelman@xebia.com> (jbnicolai.com)",
- "JD Ballard <i.am.qix@gmail.com> (github.com/qix-)"
- ],
- "engines": {
- "node": ">=0.10.0"
- },
- "scripts": {
- "test": "xo && ava --verbose",
- "view-supported": "node fixtures/view-codes.js"
- },
- "files": [
- "index.js"
- ],
- "keywords": [
- "ansi",
- "styles",
- "color",
- "colour",
- "colors",
- "terminal",
- "console",
- "cli",
- "string",
- "tty",
- "escape",
- "formatting",
- "rgb",
- "256",
- "shell",
- "xterm",
- "command-line",
- "text",
- "regex",
- "regexp",
- "re",
- "match",
- "test",
- "find",
- "pattern"
- ],
- "devDependencies": {
- "ava": "0.17.0",
- "xo": "0.16.0"
- },
- "xo": {
- "rules": {
- "guard-for-in": 0,
- "no-loop-func": 0
- }
- }
-}
diff --git a/node_modules/postcss-unopacity/node_modules/ansi-regex/readme.md b/node_modules/postcss-unopacity/node_modules/ansi-regex/readme.md
deleted file mode 100644
index 6a928edf..00000000
--- a/node_modules/postcss-unopacity/node_modules/ansi-regex/readme.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# ansi-regex [![Build Status](https://travis-ci.org/chalk/ansi-regex.svg?branch=master)](https://travis-ci.org/chalk/ansi-regex)
-
-> Regular expression for matching [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)
-
-
-## Install
-
-```
-$ npm install --save ansi-regex
-```
-
-
-## Usage
-
-```js
-const ansiRegex = require('ansi-regex');
-
-ansiRegex().test('\u001b[4mcake\u001b[0m');
-//=> true
-
-ansiRegex().test('cake');
-//=> false
-
-'\u001b[4mcake\u001b[0m'.match(ansiRegex());
-//=> ['\u001b[4m', '\u001b[0m']
-```
-
-## FAQ
-
-### Why do you test for codes not in the ECMA 48 standard?
-
-Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. If I recall correctly, we test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them.
-
-On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out.
-
-
-## License
-
-MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/node_modules/postcss-unroot/node_modules/ansi-regex/index.js b/node_modules/postcss-unroot/node_modules/ansi-regex/index.js
deleted file mode 100644
index b9574ed7..00000000
--- a/node_modules/postcss-unroot/node_modules/ansi-regex/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-'use strict';
-module.exports = function () {
- return /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-PRZcf-nqry=><]/g;
-};
diff --git a/node_modules/postcss-unroot/node_modules/ansi-regex/license b/node_modules/postcss-unroot/node_modules/ansi-regex/license
deleted file mode 100644
index 654d0bfe..00000000
--- a/node_modules/postcss-unroot/node_modules/ansi-regex/license
+++ /dev/null
@@ -1,21 +0,0 @@
-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.
diff --git a/node_modules/postcss-unroot/node_modules/ansi-regex/package.json b/node_modules/postcss-unroot/node_modules/ansi-regex/package.json
deleted file mode 100644
index eb44fb5c..00000000
--- a/node_modules/postcss-unroot/node_modules/ansi-regex/package.json
+++ /dev/null
@@ -1,64 +0,0 @@
-{
- "name": "ansi-regex",
- "version": "2.1.1",
- "description": "Regular expression for matching ANSI escape codes",
- "license": "MIT",
- "repository": "chalk/ansi-regex",
- "author": {
- "name": "Sindre Sorhus",
- "email": "sindresorhus@gmail.com",
- "url": "sindresorhus.com"
- },
- "maintainers": [
- "Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)",
- "Joshua Appelman <jappelman@xebia.com> (jbnicolai.com)",
- "JD Ballard <i.am.qix@gmail.com> (github.com/qix-)"
- ],
- "engines": {
- "node": ">=0.10.0"
- },
- "scripts": {
- "test": "xo && ava --verbose",
- "view-supported": "node fixtures/view-codes.js"
- },
- "files": [
- "index.js"
- ],
- "keywords": [
- "ansi",
- "styles",
- "color",
- "colour",
- "colors",
- "terminal",
- "console",
- "cli",
- "string",
- "tty",
- "escape",
- "formatting",
- "rgb",
- "256",
- "shell",
- "xterm",
- "command-line",
- "text",
- "regex",
- "regexp",
- "re",
- "match",
- "test",
- "find",
- "pattern"
- ],
- "devDependencies": {
- "ava": "0.17.0",
- "xo": "0.16.0"
- },
- "xo": {
- "rules": {
- "guard-for-in": 0,
- "no-loop-func": 0
- }
- }
-}
diff --git a/node_modules/postcss-unroot/node_modules/ansi-regex/readme.md b/node_modules/postcss-unroot/node_modules/ansi-regex/readme.md
deleted file mode 100644
index 6a928edf..00000000
--- a/node_modules/postcss-unroot/node_modules/ansi-regex/readme.md
+++ /dev/null
@@ -1,39 +0,0 @@
-# ansi-regex [![Build Status](https://travis-ci.org/chalk/ansi-regex.svg?branch=master)](https://travis-ci.org/chalk/ansi-regex)
-
-> Regular expression for matching [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)
-
-
-## Install
-
-```
-$ npm install --save ansi-regex
-```
-
-
-## Usage
-
-```js
-const ansiRegex = require('ansi-regex');
-
-ansiRegex().test('\u001b[4mcake\u001b[0m');
-//=> true
-
-ansiRegex().test('cake');
-//=> false
-
-'\u001b[4mcake\u001b[0m'.match(ansiRegex());
-//=> ['\u001b[4m', '\u001b[0m']
-```
-
-## FAQ
-
-### Why do you test for codes not in the ECMA 48 standard?
-
-Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. If I recall correctly, we test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them.
-
-On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out.
-
-
-## License
-
-MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/node_modules/postcss/node_modules/.bin/nanoid b/node_modules/postcss/node_modules/.bin/nanoid
new file mode 120000
index 00000000..7b4e5ad1
--- /dev/null
+++ b/node_modules/postcss/node_modules/.bin/nanoid
@@ -0,0 +1 @@
+../../../nanoid/bin/nanoid.cjs \ No newline at end of file
diff --git a/node_modules/reduce-css-calc/CHANGELOG.md b/node_modules/reduce-css-calc/CHANGELOG.md
index 0a42c1bb..fff0c07c 100755
--- a/node_modules/reduce-css-calc/CHANGELOG.md
+++ b/node_modules/reduce-css-calc/CHANGELOG.md
@@ -1,164 +1,84 @@
-# Changelog of `reduce-css-call`
-
-## 2.1.8 - 2020-01-08
-
-- Fix Parse error on custom property fallback ([#68](https://github.com/MoOx/reduce-css-calc/pull/68)) - @snowystinger)
-
-## 2.1.7 - 2019-10-22
-
-- Switch to a maintained jison fork ([#57](https://github.com/MoOx/reduce-css-calc/pull/57)) - @davidgovea)
-
-## 2.1.6 - 2019-01-11
-
-- Fixed: Incorrect calculation when subtracting (e.g. `calc(100% - calc(120px + 1em + 2em + 100px))`) ([#52](https://github.com/MoOx/reduce-css-calc/pull/53) - @sylvainpolletvillard)
-
-## 2.1.5 - 2018-09-20
-
-- [Avoid breaking when seeing ` constant()`` or `env()`](https://github.com/MoOx/reduce-css-calc/commit/409c9ba2cd5e06e7f8f679f7f0c3c3a14ff3e673) by @dlee
-
-## 2.1.4 - 2018-01-22
-
-- Prevent webpack parsing issue
- (see https://github.com/zaach/jison/pull/352)
-
-## 2.1.3 - 2017-11-27
-
-- Fixed: Incorrect reduction for a specific case (e.g. `calc(1em + (1em - 5px))`) ([#43](https://github.com/MoOx/reduce-css-calc/pull/43) - @Justineo)
-
-## 2.1.2 - 2017-11-26
-
-- Fixed: Incorrect reduction of division with custom property (e.g. `calc(var(--foo) / 2)`) ([#41](https://github.com/MoOx/reduce-css-calc/issues/41) - @Semigradsky)
-
-## 2.1.1 - 2017-10-12
-
-- Fixed: Incorrect reduction of nested expression (e.g. `calc( (1em - calc( 10px + 1em)) / 2)`) ([#39](https://github.com/MoOx/reduce-css-calc/pull/39) - @gyoshev)
-
-## 2.1.0 - 2017-10-10
-
-- Added: Support for working in browsers without transpiling ([#36](https://github.com/MoOx/reduce-css-calc/pull/36) - @Semigradsky)
-- Fixed: `calc(100vw - (100vw - 100%))` does not evaluate to `100%` ([#35](https://github.com/MoOx/reduce-css-calc/pull/35) - @Semigradsky)
-
-## 2.0.5 - 2017-05-12
-
-- Fixed: Support division with a CSS variable.
-
-## 2.0.4 - 2017-05-09
-
-- Fixed: CSS variable regex was overly greedy and caused a crash in some
- cases. ([#27](https://github.com/MoOx/reduce-css-calc/pull/27) - @andyjansson)
-
-## 2.0.3 - 2017-05-09
-
-- Fixed: Regression in handling decimals without having any numbers after
- the decimal place (e.g. `10.px`).
-
-## 2.0.2 - 2017-05-08
-
-- Fixed: Regression in consecutive subtraction handling
- ([#25](https://github.com/MoOx/reduce-css-calc/pull/25) - @andyjansson)
-
-## 2.0.1 - 2017-05-08
-
-- Fixed: Support for nested calc e.g. `calc(100% - calc(50px - 25px))`.
-- Fixed: Support for CSS variables e.g. `calc(var(--mouseX) * 1px)`.
-
-## 2.0.0 - 2017-05-08
-
-- Rewritten with a jison parser for more accurate value parsing.
-- Breaking: reduce-css-calc will now throw when trying to multiply or divide
- by the same unit (e.g. `calc(200px * 20px)`), and also when trying to divide
- by zero.
-- Added: Better handling of zero values (e.g. `calc(100vw / 2 - 6px + 0px)`
- becomes `calc(100vw / 2 - 6px)`).
-- Added: Better handling of mixed time values (e.g. `calc(1s - 50ms)`
- becomes `0.95s`).
-- Added: Inner parentheses calculation to simplify complex expressions (e.g.
- `calc(14px + 6 * ((100vw - 320px) / 448))` becomes `calc(9.71px + 1.34vw)`
- with precision set to `2`).
-- Fixed: `calc(1px + 1)` does not evaluate to `2px`.
-
-([#22](https://github.com/MoOx/reduce-css-calc/pull/22) - @andyjansson)
-
-## 1.3.0 - 2016-08-26
+# 1.3.0 - 2016-08-26
- Added: calc identifier from unresolved nested expressions are removed for
better browser support
([#19](https://github.com/MoOx/reduce-css-calc/pull/19) - @ben-eb)
-## 1.2.8 - 2016-08-26
+# 1.2.8 - 2016-08-26
- Fixed: regression from 1.2.5 on calc() with value without leading 0
([#17](https://github.com/MoOx/reduce-css-calc/pull/17) - @ben-eb)
-## 1.2.7 - 2016-08-22
+# 1.2.7 - 2016-08-22
- Fixed: regression from 1.2.5 on calc() with value without leading 0
(@MoOx)
-## 1.2.6 - 2016-08-22
+# 1.2.6 - 2016-08-22
- Fixed: regression from 1.2.5 on calc() on multiple lines
(@MoOx)
-## 1.2.5 - 2016-08-22
+# 1.2.5 - 2016-08-22
-- Fixed: security issue due to the usage of `eval()`.
+- Fixed: security issue due to the usage of ``eval()``.
This is to avoid an arbitrary code execution.
Now operations are resolved using
- [`math-expression-evaluator`](https://github.com/redhivesoftware/math-expression-evaluator)
+ [``math-expression-evaluator``](https://github.com/redhivesoftware/math-expression-evaluator)
-## 1.2.4 - 2016-06-09
+# 1.2.4 - 2016-06-09
- Fixed: zero values are not unitless anymore.
Browsers do not calculate calc() with 0 unitless values.
http://jsbin.com/punivivipo/edit?html,css,output
- ([#11](https://github.com/MoOx/reduce-css-calc/pull/11))
+ ([#11](https://github.com/MoOx/reduce-css-calc/pull/11))

-## 1.2.3 - 2016-04-28
+# 1.2.3 - 2016-04-28
- Fixed: wrong rouding in some edge cases
([#10](https://github.com/MoOx/reduce-css-calc/pull/10))
-## 1.2.2 - 2016-04-19
+# 1.2.2 - 2016-04-19
- Fixed: Don't reduce expression containing CSS variables.
([#9](https://github.com/MoOx/reduce-css-calc/pull/9))
-## 1.2.1 - 2016-02-22
+# 1.2.1 - 2016-02-22
- Fixed: uppercase letters in units are now supported
([#8](https://github.com/MoOx/reduce-css-calc/pull/8))
-## 1.2.0 - 2014-11-24
+# 1.2.0 - 2014-11-24
- Decimal precision is now customisable as the `precision` option
-## 1.1.4 - 2014-11-12
+# 1.1.4 - 2014-11-12
- 5 decimals rounding for everything
-## 1.1.3 - 2014-08-13
+# 1.1.3 - 2014-08-13
- 5 decimals rounding for percentage
-## 1.1.2 - 2014-08-10
+# 1.1.2 - 2014-08-10
- Prevent infinite loop by adding a `Call stack overflow`
- Correctly ignore unrecognized values (safer evaluation for nested expressions,
see [postcss/postcss-calc#2](https://github.com/postcss/postcss-calc/issues/2))
-- Handle rounding issues (eg: 10% \* 20% now give 2%, not 2.0000000000000004%)
+- Handle rounding issues (eg: 10% * 20% now give 2%, not 2.0000000000000004%)
-## 1.1.1 - 2014-08-06
+# 1.1.1 - 2014-08-06
- Fix issue when using mutiples differents prefixes in the same function
-## 1.1.0 - 2014-08-06
+# 1.1.0 - 2014-08-06
- support more complex formulas
- use `reduce-function-call`
- better error message
-## 1.0.0 - 2014-08-04
+
+# 1.0.0 - 2014-08-04
First release
diff --git a/node_modules/reduce-css-calc/README.md b/node_modules/reduce-css-calc/README.md
index bc9e59fb..0ba73d30 100755
--- a/node_modules/reduce-css-calc/README.md
+++ b/node_modules/reduce-css-calc/README.md
@@ -1,6 +1,4 @@
-# reduce-css-calc
-
-[![Build Status](https://travis-ci.org/MoOx/reduce-css-calc.svg)](https://travis-ci.org/MoOx/reduce-css-calc)
+# reduce-css-calc [![Build Status](https://travis-ci.org/MoOx/reduce-css-calc.png)](https://travis-ci.org/MoOx/reduce-css-calc)
> Reduce CSS calc() function to the maximum.
@@ -9,7 +7,7 @@ Particularly useful for packages like [rework-calc](https://github.com/reworkcss
## Installation
```console
-npm install reduce-css-calc
+$ npm install reduce-css-calc
```
## Usage
@@ -56,19 +54,17 @@ reduceCSSCalc("-moz-calc(50% - 2em)")
// -moz-calc(50% - 2em)
```
-See [unit tests](src/__tests__/index.js) for others examples.
-
----
+See [unit tests](test/index.js) for others examples.
## Contributing
Work on a branch, install dev-dependencies, respect coding style & run tests before submitting a bug fix or a feature.
```console
-git clone https://github.com/MoOx/reduce-css-calc.git
-git checkout -b patch-1
-npm install
-npm test
+$ git clone https://github.com/MoOx/reduce-css-calc.git
+$ git checkout -b patch-1
+$ npm install
+$ npm test
```
## [Changelog](CHANGELOG.md)
diff --git a/node_modules/laggard/node_modules/reduce-css-calc/index.js b/node_modules/reduce-css-calc/index.js
index 3ec72471..3ec72471 100755
--- a/node_modules/laggard/node_modules/reduce-css-calc/index.js
+++ b/node_modules/reduce-css-calc/index.js
diff --git a/node_modules/reduce-css-calc/package.json b/node_modules/reduce-css-calc/package.json
index e68caf24..6baa0601 100644
--- a/node_modules/reduce-css-calc/package.json
+++ b/node_modules/reduce-css-calc/package.json
@@ -1,49 +1,33 @@
{
"name": "reduce-css-calc",
- "version": "2.1.8",
+ "version": "1.3.0",
"description": "Reduce CSS calc() function to the maximum",
"keywords": [
"css",
"calculation",
"calc"
],
- "main": "dist/index.js",
- "files": [
- "dist"
- ],
- "scripts": {
- "prepublish": "npm run build && del-cli dist/__tests__",
- "build": "del-cli dist && cross-env BABEL_ENV=publish babel src --out-dir dist && jison parser.jison -o dist/parser.js",
- "pretest": "eslint src && npm run build",
- "test": "ava dist/__tests__/",
- "release": "npmpub"
- },
"author": "Maxime Thirouin",
"license": "MIT",
"repository": "https://github.com/MoOx/reduce-css-calc.git",
- "devDependencies": {
- "ava": "^0.18.2",
- "babel-cli": "^6.18.0",
- "babel-core": "^6.21.0",
- "babel-eslint": "^7.1.1",
- "babel-plugin-add-module-exports": "^0.2.1",
- "babel-preset-env": "^1.6.0",
- "babel-register": "^6.18.0",
- "cross-env": "^3.1.4",
- "del-cli": "^0.2.1",
- "eslint": "^3.12.2",
- "eslint-config-i-am-meticulous": "^6.0.1",
- "eslint-plugin-babel": "^4.0.0",
- "eslint-plugin-import": "^2.2.0",
- "jison-gho": "^0.6.1-216",
- "npmpub": "^5.0.0"
- },
+ "files": [
+ "index.js"
+ ],
"dependencies": {
- "css-unit-converter": "^1.1.1",
- "postcss-value-parser": "^3.3.0"
+ "balanced-match": "^0.4.2",
+ "math-expression-evaluator": "^1.2.14",
+ "reduce-function-call": "^1.0.1"
+ },
+ "devDependencies": {
+ "jscs": "^1.5.9",
+ "jshint": "^2.5.2",
+ "npmpub": "^3.0.3",
+ "tape": "^2.13.4"
},
- "eslintConfig": {
- "parser": "babel-eslint",
- "extends": "eslint-config-i-am-meticulous"
+ "scripts": {
+ "jscs": "jscs *.js **/*.js",
+ "jshint": "jshint . --exclude node_modules",
+ "test": "npm run jscs && npm run jshint && tape test",
+ "release": "npmpub"
}
}
diff --git a/node_modules/reduce-function-call/node_modules/balanced-match/.github/FUNDING.yml b/node_modules/reduce-function-call/node_modules/balanced-match/.github/FUNDING.yml
new file mode 100644
index 00000000..cea8b16e
--- /dev/null
+++ b/node_modules/reduce-function-call/node_modules/balanced-match/.github/FUNDING.yml
@@ -0,0 +1,2 @@
+tidelift: "npm/balanced-match"
+patreon: juliangruber
diff --git a/node_modules/postcss-fixes/node_modules/balanced-match/LICENSE.md b/node_modules/reduce-function-call/node_modules/balanced-match/LICENSE.md
index 2cdc8e41..2cdc8e41 100644
--- a/node_modules/postcss-fixes/node_modules/balanced-match/LICENSE.md
+++ b/node_modules/reduce-function-call/node_modules/balanced-match/LICENSE.md
diff --git a/node_modules/postcss-quantity-queries/node_modules/balanced-match/README.md b/node_modules/reduce-function-call/node_modules/balanced-match/README.md
index 08e918c0..d2a48b6b 100644
--- a/node_modules/postcss-quantity-queries/node_modules/balanced-match/README.md
+++ b/node_modules/reduce-function-call/node_modules/balanced-match/README.md
@@ -66,6 +66,12 @@ With [npm](https://npmjs.org) do:
npm install balanced-match
```
+## Security contact information
+
+To report a security vulnerability, please use the
+[Tidelift security contact](https://tidelift.com/security).
+Tidelift will coordinate the fix and disclosure.
+
## License
(MIT)
diff --git a/node_modules/postcss-fixes/node_modules/balanced-match/index.js b/node_modules/reduce-function-call/node_modules/balanced-match/index.js
index e8d85870..c67a6460 100644
--- a/node_modules/postcss-fixes/node_modules/balanced-match/index.js
+++ b/node_modules/reduce-function-call/node_modules/balanced-match/index.js
@@ -1,3 +1,4 @@
+'use strict';
module.exports = balanced;
function balanced(a, b, str) {
if (a instanceof RegExp) a = maybeMatch(a, str);
@@ -27,6 +28,9 @@ function range(a, b, str) {
var i = ai;
if (ai >= 0 && bi > 0) {
+ if(a===b) {
+ return [ai, bi];
+ }
begs = [];
left = str.length;
diff --git a/node_modules/laggard/node_modules/balanced-match/package.json b/node_modules/reduce-function-call/node_modules/balanced-match/package.json
index 720eb4d1..ce6073e0 100644
--- a/node_modules/laggard/node_modules/balanced-match/package.json
+++ b/node_modules/reduce-function-call/node_modules/balanced-match/package.json
@@ -1,7 +1,7 @@
{
"name": "balanced-match",
"description": "Match balanced character pairs, like \"{\" and \"}\"",
- "version": "0.4.2",
+ "version": "1.0.2",
"repository": {
"type": "git",
"url": "git://github.com/juliangruber/balanced-match.git"
@@ -9,10 +9,11 @@
"homepage": "https://github.com/juliangruber/balanced-match",
"main": "index.js",
"scripts": {
- "test": "make test"
+ "test": "tape test/test.js",
+ "bench": "matcha test/bench.js"
},
- "dependencies": {},
"devDependencies": {
+ "matcha": "^0.7.0",
"tape": "^4.6.0"
},
"keywords": [
diff --git a/node_modules/regexpu-core/node_modules/.bin/regjsparser b/node_modules/regexpu-core/node_modules/.bin/regjsparser
new file mode 120000
index 00000000..2e1b4926
--- /dev/null
+++ b/node_modules/regexpu-core/node_modules/.bin/regjsparser
@@ -0,0 +1 @@
+../../../regjsparser/bin/parser \ No newline at end of file
diff --git a/node_modules/rucksack-css/node_modules/.bin/browserslist b/node_modules/rucksack-css/node_modules/.bin/browserslist
deleted file mode 120000
index 3cd991b2..00000000
--- a/node_modules/rucksack-css/node_modules/.bin/browserslist
+++ /dev/null
@@ -1 +0,0 @@
-../browserslist/cli.js \ No newline at end of file
diff --git a/node_modules/rucksack-css/node_modules/.bin/laggard b/node_modules/rucksack-css/node_modules/.bin/laggard
new file mode 120000
index 00000000..e34ed709
--- /dev/null
+++ b/node_modules/rucksack-css/node_modules/.bin/laggard
@@ -0,0 +1 @@
+../../../laggard/bin/cmd.js \ No newline at end of file
diff --git a/node_modules/rucksack-css/node_modules/autoprefixer/node_modules/.bin/browserslist b/node_modules/rucksack-css/node_modules/autoprefixer/node_modules/.bin/browserslist
new file mode 120000
index 00000000..c4cc06e3
--- /dev/null
+++ b/node_modules/rucksack-css/node_modules/autoprefixer/node_modules/.bin/browserslist
@@ -0,0 +1 @@
+../../../browserslist/cli.js \ No newline at end of file
diff --git a/node_modules/rucksack-css/node_modules/postcss-reporter/CHANGELOG.md b/node_modules/rucksack-css/node_modules/postcss-reporter/CHANGELOG.md
deleted file mode 100644
index 97e25532..00000000
--- a/node_modules/rucksack-css/node_modules/postcss-reporter/CHANGELOG.md
+++ /dev/null
@@ -1,65 +0,0 @@
-# Changelog
-
-## 5.0.0
-
-- Move PostCSS from `peerDependencies` to `dependencies`.
-- Drop support for Node 0.12.
-
-## 4.0.0
-
-- Upgrade to PostCSS v6. (If you still use PostCSS v5, stick with v3 until you can upgrade your PostCSS.)
-- Switched PostCSS to a peer dependency.
-
-## 3.0.0
-
-- Replace `clearMessages` option with `clearReportedMessages` and `clearAllMessages`.
-
-## 2.0.0
-
-- Only log warning messages (`type: "warning"`) by default.
-
-## 1.4.1
-- Add `filter` option.
-- Add blacklist functionality to `plugins` option with `!` prefix`.
-
-## 1.3.3
-- Fix regression that caused positions from sources without incoming sourcemaps not to be logged.
-
-## 1.3.2
-- Find more accurate positions of preprocessed files with sourcemaps.
-
-## 1.3.1
-- Fix Windows path bug.
-
-## 1.3.0
-- Check individual messages for distinct sources, then group messages by those sources,
- instead of always using the PostCSS Result's source.
-- Output empty string from `formatter` if there are no messages, instead of `undefined`.
-
-## 1.2.1
-- Handle variable and absent input sources.
-
-## 1.2.0
-- Add `noIcon` and `noPlugin` options to both reporter and formatter.
-
-## 1.1.0
-- Use PostCSS 5's line/column properties on warnings, instead of relying on the source node.
-
-## 1.0.0
-- Upgrade to PostCSS 5.
-
-## 0.4.0
-- Add `positionless` option (to both the reporter and the formatter), with default value `"first"`.
-- Cleaner npm install (files specified in `package.json`).
-
-## 0.3.1
-- Remove leftover debugging log statement.
-
-## 0.3.0
-- Add `sortByPosition` option (to both the reporter and the formatter), with default value `true`.
-
-## 0.2.0
-- Alter `defaultFormatter` to use warning symbol and not repeat `# postcss-reporter`.
-
-## 0.1.0
-- First release.
diff --git a/node_modules/rucksack-css/node_modules/postcss-reporter/LICENSE b/node_modules/rucksack-css/node_modules/postcss-reporter/LICENSE
deleted file mode 100644
index 6d347c06..00000000
--- a/node_modules/rucksack-css/node_modules/postcss-reporter/LICENSE
+++ /dev/null
@@ -1,22 +0,0 @@
-The MIT License (MIT)
-
-Copyright (c) 2015 David Clark
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
-
diff --git a/node_modules/rucksack-css/node_modules/postcss-reporter/README.md b/node_modules/rucksack-css/node_modules/postcss-reporter/README.md
deleted file mode 100644
index 6842f131..00000000
--- a/node_modules/rucksack-css/node_modules/postcss-reporter/README.md
+++ /dev/null
@@ -1,143 +0,0 @@
-# postcss-reporter
-[![Build Status](https://travis-ci.org/postcss/postcss-reporter.svg?branch=master)](https://travis-ci.org/postcss/postcss-reporter)
-[![AppVeyor Build Status](https://img.shields.io/appveyor/ci/davidtheclark/postcss-reporter/master.svg?label=windows%20build)](https://ci.appveyor.com/project/davidtheclark/postcss-reporter)
-
-A PostCSS plugin to `console.log()` the messages (warnings, etc.) registered by other PostCSS plugins.
-
-## Purpose
-
-As of PostCSS 4.1, a single PostCSS process can accumulate messages from all of the plugins it uses.
-Most of these messages are [warnings](https://github.com/postcss/postcss/blob/master/docs/guidelines/plugin.md#32-use-resultwarn-for-warnings).
-Presumably, plugin authors want you to see those messages.
-So this plugin exists to read the accumulated messages (or messages from only the plugins you've specified), format them, and print them to the console.
-
-By default, the messages are formatted for human legibility and sorted according to the line/column positions attached to the messages. But another formatting function can be passed in with an option, and sorting can be turned of with an option.
-
-*By default, only warnings are logged*. If you would like to see more messages, you can change the `filter` function.
-
-## Example Output
-
-![Example](example.png?raw=true)
-
-## Installation
-
-```
-npm install postcss-reporter
-```
-
-Version 1.0.0+ is compatible with PostCSS 5+. (Earlier versions are compatible with PostCSS 4.)
-
-## Usage
-
-Add it to your plugin list *after any plugins whose messages you want to log*, and optionally pass it an object of options.
-
-For example, using [gulp-postcss](https://github.com/postcss/gulp-postcss):
-
-```js
-gulp.task('css', function() {
- return gulp.src('./src/*.css')
- .pipe(postcss([
- bemLinter(),
- customProperties(),
- calc(),
- rejectAllColors(),
- reporter(myOptions) // <------ ding
- ]))
- .pipe(gulp.dest('./dist'));
-});
-```
-
-## Options
-
-**clearReportedMessages** (boolean, default = `false`)
-
-If true, the plugin will clear the result's messages after it logs them. This prevents other plugins, or the whatever runner you use, from logging the same information again and causing confusion.
-
-**formatter** (function, default = the default formatter)
-
-By default, this reporter will format the messages for human legibility in the console.
-To use another formatter, pass a function that
-
- - accepts an object containing a `messages` array and a `source` string
- - returns the string to report
-
-For example, you could write a formatter like this:
-
-```js
-reporter({
- formatter: function(input) {
- return input.source + ' produced ' + input.messages.length + ' messages';
- }
-})
-```
-
-**plugins** (array of strings, default = `[]`)
-
-If `plugins` is empty (as it is by default), the reporter will log messages from every PostCSS plugin.
-
-There are 2 ways to limit output:
-
-- **Whitelist:** Provide an array of the plugins whose messages you would like to show.
- For example, `{ plugins: ['postcss-bem-linter'] }` will only log messages from the `postcss-bem-linter` plugin.
-- **Blacklist:** Prefix all plugins in the array with `!` to specify only those plugins whose messages you would like to hide.
- (All other plugins will be shown.)
- For example, `{ plugins: ['!postcss-bem-linter'] }` will never log messages from the `postcss-bem-linter` plugin; but will log messages from every other plugin.
-
-**filter** (function)
-
-Provide a filter function. It receives the message object and returns a truthy or falsy value, indicating whether that particular message should be reported or not.
-
-By default, only messages with `type: "warning"` warnings are logged. (These are the messages produced when the plugin author uses PostCSS's `warn()` function.)
-
-For example, `function(message) { return true }` will only every message, regardless of the plugin or whether it's a warning or not.
-
-**clearAllMessages** (boolean, default = `false`)
-
-If `true`, not pass any messages into other plugins, or the whatever runner you use, for logging.
-
-**throwError** (boolean, default = `false`)
-
-If `true`, after the plugin logs your messages it will throw an error if it found any warnings.
-
-**sortByPosition** (boolean, default = `true`)
-
-If `false`, messages will not be sorted by line/column position.
-
-**positionless** (`"first"|"last"|"any"`, default = `"first"`)
-
-By default, messages without line/column positions will be grouped at the beginning of the output.
-To put them at the end, instead, use `"last"`.
-To not bother sorting these, use `"any"`.
-
-**noIcon** (boolean, default = `false`)
-
-If `true`, no exclamatory triangle icons will be printed next to warnings.
-
-**noPlugin** (boolean, default = `false`)
-
-If `true`, plugin names will not be printed in brackets after messages.
-
-## How to get output without colors
-
-If you would like no colors in the console output, simply pass `--no-colors` when you invoke whatever command runs this plugin. (This works because of [chalk](https://github.com/sindresorhus/chalk).)
-
-## Standalone formatter
-
-You can also use this module's formatter as a library, with following API:
-
-```js
-var formatter = require('postcss-reporter/lib/formatter');
-var myFormatter = formatter(myOptions);
-// to use defaults, just pass no options: `formatter()`
-var warningLog = myFormatter({
- messages: someMessages,
- source: someSource
-});
-console.log(warningLog);
-```
-
-These are the formatter's options:
-
-- sortByPosition (boolean, default = `true`)
-- noIcon (boolean, default = `false`) - Do not print any warning exclamatory triangle icons
-- noPlugin (boolean, default = `false`) - Do not print plugin names
diff --git a/node_modules/rucksack-css/node_modules/postcss-reporter/index.js b/node_modules/rucksack-css/node_modules/postcss-reporter/index.js
deleted file mode 100644
index 2a4e4136..00000000
--- a/node_modules/rucksack-css/node_modules/postcss-reporter/index.js
+++ /dev/null
@@ -1,4 +0,0 @@
-var postcss = require('postcss');
-var reporter = require('./lib/reporter');
-
-module.exports = postcss.plugin('postcss-reporter', reporter);
diff --git a/node_modules/rucksack-css/node_modules/postcss-reporter/lib/formatter.js b/node_modules/rucksack-css/node_modules/postcss-reporter/lib/formatter.js
deleted file mode 100644
index b5719b8f..00000000
--- a/node_modules/rucksack-css/node_modules/postcss-reporter/lib/formatter.js
+++ /dev/null
@@ -1,80 +0,0 @@
-var chalk = require('chalk');
-var path = require('path');
-var symbols = require('log-symbols');
-var _ = require('lodash');
-var util = require('./util');
-
-module.exports = function(opts) {
- var options = opts || {};
- var sortByPosition = (typeof options.sortByPosition !== 'undefined') ? options.sortByPosition : true;
- var positionless = options.positionless || 'first';
-
- return function(input) {
- var messages = input.messages;
- var source = input.source;
-
- if (!messages.length) return '';
-
- var orderedMessages = _.sortBy(
- messages,
- function(m) {
- if (!m.line) return 1;
- if (positionless === 'any') return 1;
- if (positionless === 'first') return 2;
- if (positionless === 'last') return 0;
- },
- function(m) {
- if (!sortByPosition) return 1;
- return m.line;
- },
- function(m) {
- if (!sortByPosition) return 1;
- return m.column;
- }
- );
-
- var output = '\n';
-
- if (source) {
- output += chalk.bold.underline(logFrom(source)) + '\n';
- }
-
- orderedMessages.forEach(function(w) {
- output += messageToString(w) + '\n';
- });
-
- return output;
-
- function messageToString(message) {
- var location = util.getLocation(message);
- var str = '';
-
- if (location.line) {
- str += chalk.bold(location.line);
- }
-
- if (location.column) {
- str += chalk.bold(':' + location.column)
- }
-
- if (location.line || location.column) {
- str += '\t';
- }
-
- if (!options.noIcon && message.type === 'warning') {
- str += chalk.yellow(symbols.warning + ' ');
- }
-
- str += message.text;
- if (!options.noPlugin) {
- str += chalk.yellow(' [' + message.plugin + ']');
- }
- return str;
- }
-
- function logFrom(fromValue) {
- if (fromValue.charAt(0) === '<') return fromValue;
- return path.relative(process.cwd(), fromValue).split(path.sep).join('/');
- }
- };
-};
diff --git a/node_modules/rucksack-css/node_modules/postcss-reporter/lib/reporter.js b/node_modules/rucksack-css/node_modules/postcss-reporter/lib/reporter.js
deleted file mode 100644
index 70781fba..00000000
--- a/node_modules/rucksack-css/node_modules/postcss-reporter/lib/reporter.js
+++ /dev/null
@@ -1,81 +0,0 @@
-var chalk = require('chalk');
-var _ = require('lodash');
-var defaultFormatter = require('./formatter');
-var util = require('./util');
-
-module.exports = function(opts) {
- var options = opts || {};
-
- var formatter = options.formatter || defaultFormatter({
- sortByPosition: (typeof options.sortByPosition !== 'undefined') ? options.sortByPosition : true,
- positionless: options.positionless || 'first',
- noIcon: options.noIcon,
- noPlugin: options.noPlugin,
- });
-
- var pluginFilter;
- if (!options.plugins) {
- // Every plugin
- pluginFilter = function() { return true; };
- } else if (options.plugins.every(function(plugin) { return plugin[0] === '!'; })) {
- // Blacklist
- pluginFilter = function(message) {
- return options.plugins.indexOf('!' + message.plugin) === -1;
- };
- } else {
- // Whitelist
- pluginFilter = function(message) {
- return options.plugins.indexOf(message.plugin) !== -1;
- };
- }
-
- var messageFilter = options.filter || function(message) { return (message.type === 'warning'); };
-
- return function(css, result) {
- var messagesToLog = result.messages
- .filter(pluginFilter)
- .filter(messageFilter);
-
- var resultSource = (!result.root.source) ? ''
- : result.root.source.input.file || result.root.source.input.id
-
- var sourceGroupedMessages = _.groupBy(messagesToLog, function(message) {
- return util.getLocation(message).file || resultSource;
- });
-
- var report = '';
- _.forOwn(sourceGroupedMessages, function(messages, source) {
- report += formatter({
- messages: messages,
- source: source,
- });
- });
-
- if (options.clearReportedMessages) {
- result.messages = _.difference(result.messages, messagesToLog);
- }
-
- if (options.clearAllMessages) {
- var messagesToClear = result.messages.filter(pluginFilter);
- result.messages = _.difference(result.messages, messagesToClear);
- }
-
-
- if (!report) return;
-
- console.log(report);
-
- if (options.throwError && shouldThrowError()) {
- throw new Error(chalk.red.bold('\n** postcss-reporter: warnings or errors were found **'));
- }
-
- function shouldThrowError() {
- return (
- messagesToLog.length
- && messagesToLog.some(function(message) {
- return message.type === 'warning' || message.type === 'error';
- })
- );
- }
- };
-};
diff --git a/node_modules/rucksack-css/node_modules/postcss-reporter/lib/util.js b/node_modules/rucksack-css/node_modules/postcss-reporter/lib/util.js
deleted file mode 100644
index 76c649bc..00000000
--- a/node_modules/rucksack-css/node_modules/postcss-reporter/lib/util.js
+++ /dev/null
@@ -1,20 +0,0 @@
-var _ = require('lodash');
-
-exports.getLocation = function(message) {
- var messageNode = message.node;
-
- var location = {
- line: message.line,
- column: message.column,
- };
-
- var messageInput = _.get(messageNode, 'source.input');
-
- if (!messageInput) return location;
-
- var originLocation = messageInput.origin && messageInput.origin(message.line, message.column)
- if (originLocation) return originLocation
-
- location.file = messageInput.file || messageInput.id;
- return location;
-};
diff --git a/node_modules/rucksack-css/node_modules/postcss-reporter/package.json b/node_modules/rucksack-css/node_modules/postcss-reporter/package.json
deleted file mode 100644
index 7233b6f0..00000000
--- a/node_modules/rucksack-css/node_modules/postcss-reporter/package.json
+++ /dev/null
@@ -1,46 +0,0 @@
-{
- "name": "postcss-reporter",
- "version": "5.0.0",
- "description": "Log PostCSS messages in the console",
- "main": "index.js",
- "scripts": {
- "lint": "eslint .",
- "test": "npm run lint && tape test",
- "visual": "node test/visual.js"
- },
- "files": [
- "index.js",
- "lib"
- ],
- "repository": {
- "type": "git",
- "url": "https://github.com/postcss/postcss-reporter.git"
- },
- "author": {
- "name": "David Clark",
- "email": "david.dave.clark@gmail.com",
- "url": "http://davidtheclark.com"
- },
- "license": "MIT",
- "bugs": {
- "url": "https://github.com/postcss/postcss-reporter/issues"
- },
- "homepage": "https://github.com/postcss/postcss-reporter",
- "devDependencies": {
- "eslint": "1.3.1",
- "less": "2.7.1",
- "source-map": "0.5.6",
- "strip-color": "^0.1.0",
- "stylelint": "6.8.0",
- "tape": "^4.7.0"
- },
- "dependencies": {
- "chalk": "^2.0.1",
- "lodash": "^4.17.4",
- "log-symbols": "^2.0.0",
- "postcss": "^6.0.8"
- },
- "engines": {
- "node": ">=4"
- }
-}
diff --git a/node_modules/slash/index.js b/node_modules/slash/index.js
index 1b7ee1ed..75d72501 100644
--- a/node_modules/slash/index.js
+++ b/node_modules/slash/index.js
@@ -1,9 +1,11 @@
-export default function slash(path) {
- const isExtendedLengthPath = path.startsWith('\\\\?\\');
+'use strict';
+module.exports = input => {
+ const isExtendedLengthPath = /^\\\\\?\\/.test(input);
+ const hasNonAscii = /[^\u0000-\u0080]+/.test(input); // eslint-disable-line no-control-regex
- if (isExtendedLengthPath) {
- return path;
+ if (isExtendedLengthPath || hasNonAscii) {
+ return input;
}
- return path.replace(/\\/g, '/');
-}
+ return input.replace(/\\/g, '/');
+};
diff --git a/node_modules/slash/license b/node_modules/slash/license
index fa7ceba3..e7af2f77 100644
--- a/node_modules/slash/license
+++ b/node_modules/slash/license
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
+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:
diff --git a/node_modules/slash/package.json b/node_modules/slash/package.json
index a0f507c9..1e360070 100644
--- a/node_modules/slash/package.json
+++ b/node_modules/slash/package.json
@@ -1,39 +1,34 @@
{
"name": "slash",
- "version": "5.1.0",
+ "version": "2.0.0",
"description": "Convert Windows backslash paths to slash paths",
"license": "MIT",
"repository": "sindresorhus/slash",
- "funding": "https://github.com/sponsors/sindresorhus",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
- "url": "https://sindresorhus.com"
+ "url": "sindresorhus.com"
},
- "type": "module",
- "exports": "./index.js",
- "types": "./index.d.ts",
"engines": {
- "node": ">=14.16"
+ "node": ">=6"
},
"scripts": {
- "test": "xo && ava && tsd"
+ "test": "xo && ava"
},
"files": [
- "index.js",
- "index.d.ts"
+ "index.js"
],
"keywords": [
"path",
"seperator",
+ "sep",
"slash",
"backslash",
"windows",
- "convert"
+ "win"
],
"devDependencies": {
- "ava": "^5.2.0",
- "tsd": "^0.28.1",
- "xo": "^0.54.2"
+ "ava": "*",
+ "xo": "*"
}
}
diff --git a/node_modules/slash/readme.md b/node_modules/slash/readme.md
index 42f74f90..5e2fedbc 100644
--- a/node_modules/slash/readme.md
+++ b/node_modules/slash/readme.md
@@ -1,36 +1,44 @@
-# slash
+# slash [![Build Status](https://travis-ci.org/sindresorhus/slash.svg?branch=master)](https://travis-ci.org/sindresorhus/slash)
> Convert Windows backslash paths to slash paths: `foo\\bar` ➔ `foo/bar`
-[Forward-slash paths can be used in Windows](http://superuser.com/a/176395/6877) as long as they're not extended-length paths.
+[Forward-slash paths can be used in Windows](http://superuser.com/a/176395/6877) as long as they're not extended-length paths and don't contain any non-ascii characters.
+
+This was created since the `path` methods in Node outputs `\\` paths on Windows.
-This was created since the `path` methods in Node.js outputs `\\` paths on Windows.
## Install
-```sh
-npm install slash
+```
+$ npm install slash
```
+
## Usage
```js
-import path from 'node:path';
-import slash from 'slash';
+const path = require('path');
+const slash = require('slash');
-const string = path.join('foo', 'bar');
+const str = path.join('foo', 'bar');
// Unix => foo/bar
// Windows => foo\\bar
-slash(string);
+slash(str);
// Unix => foo/bar
// Windows => foo/bar
```
+
## API
### slash(path)
Type: `string`
-Accepts a Windows backslash path and returns a path with forward slashes.
+Accepts a Windows backslash path and returns a slash path.
+
+
+## License
+
+MIT © [Sindre Sorhus](https://sindresorhus.com)
diff --git a/node_modules/ansi-regex/index.d.ts b/node_modules/strip-ansi/node_modules/ansi-regex/index.d.ts
index 2dbf6af2..2dbf6af2 100644
--- a/node_modules/ansi-regex/index.d.ts
+++ b/node_modules/strip-ansi/node_modules/ansi-regex/index.d.ts
diff --git a/node_modules/strip-ansi/node_modules/ansi-regex/index.js b/node_modules/strip-ansi/node_modules/ansi-regex/index.js
new file mode 100644
index 00000000..616ff837
--- /dev/null
+++ b/node_modules/strip-ansi/node_modules/ansi-regex/index.js
@@ -0,0 +1,10 @@
+'use strict';
+
+module.exports = ({onlyFirst = false} = {}) => {
+ const pattern = [
+ '[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?\\u0007)',
+ '(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-ntqry=><~]))'
+ ].join('|');
+
+ return new RegExp(pattern, onlyFirst ? undefined : 'g');
+};
diff --git a/node_modules/@babel/cli/node_modules/slash/license b/node_modules/strip-ansi/node_modules/ansi-regex/license
index e7af2f77..e7af2f77 100644
--- a/node_modules/@babel/cli/node_modules/slash/license
+++ b/node_modules/strip-ansi/node_modules/ansi-regex/license
diff --git a/node_modules/strip-ansi/node_modules/ansi-regex/package.json b/node_modules/strip-ansi/node_modules/ansi-regex/package.json
new file mode 100644
index 00000000..017f5311
--- /dev/null
+++ b/node_modules/strip-ansi/node_modules/ansi-regex/package.json
@@ -0,0 +1,55 @@
+{
+ "name": "ansi-regex",
+ "version": "5.0.1",
+ "description": "Regular expression for matching ANSI escape codes",
+ "license": "MIT",
+ "repository": "chalk/ansi-regex",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "scripts": {
+ "test": "xo && ava && tsd",
+ "view-supported": "node fixtures/view-codes.js"
+ },
+ "files": [
+ "index.js",
+ "index.d.ts"
+ ],
+ "keywords": [
+ "ansi",
+ "styles",
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "cli",
+ "string",
+ "tty",
+ "escape",
+ "formatting",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "command-line",
+ "text",
+ "regex",
+ "regexp",
+ "re",
+ "match",
+ "test",
+ "find",
+ "pattern"
+ ],
+ "devDependencies": {
+ "ava": "^2.4.0",
+ "tsd": "^0.9.0",
+ "xo": "^0.25.3"
+ }
+}
diff --git a/node_modules/strip-ansi/node_modules/ansi-regex/readme.md b/node_modules/strip-ansi/node_modules/ansi-regex/readme.md
new file mode 100644
index 00000000..4d848bc3
--- /dev/null
+++ b/node_modules/strip-ansi/node_modules/ansi-regex/readme.md
@@ -0,0 +1,78 @@
+# ansi-regex
+
+> Regular expression for matching [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code)
+
+
+## Install
+
+```
+$ npm install ansi-regex
+```
+
+
+## Usage
+
+```js
+const ansiRegex = require('ansi-regex');
+
+ansiRegex().test('\u001B[4mcake\u001B[0m');
+//=> true
+
+ansiRegex().test('cake');
+//=> false
+
+'\u001B[4mcake\u001B[0m'.match(ansiRegex());
+//=> ['\u001B[4m', '\u001B[0m']
+
+'\u001B[4mcake\u001B[0m'.match(ansiRegex({onlyFirst: true}));
+//=> ['\u001B[4m']
+
+'\u001B]8;;https://github.com\u0007click\u001B]8;;\u0007'.match(ansiRegex());
+//=> ['\u001B]8;;https://github.com\u0007', '\u001B]8;;\u0007']
+```
+
+
+## API
+
+### ansiRegex(options?)
+
+Returns a regex for matching ANSI escape codes.
+
+#### options
+
+Type: `object`
+
+##### onlyFirst
+
+Type: `boolean`<br>
+Default: `false` *(Matches any ANSI escape codes in a string)*
+
+Match only the first ANSI escape.
+
+
+## FAQ
+
+### Why do you test for codes not in the ECMA 48 standard?
+
+Some of the codes we run as a test are codes that we acquired finding various lists of non-standard or manufacturer specific codes. We test for both standard and non-standard codes, as most of them follow the same or similar format and can be safely matched in strings without the risk of removing actual string content. There are a few non-standard control codes that do not follow the traditional format (i.e. they end in numbers) thus forcing us to exclude them from the test because we cannot reliably match them.
+
+On the historical side, those ECMA standards were established in the early 90's whereas the VT100, for example, was designed in the mid/late 70's. At that point in time, control codes were still pretty ungoverned and engineers used them for a multitude of things, namely to activate hardware ports that may have been proprietary. Somewhere else you see a similar 'anarchy' of codes is in the x86 architecture for processors; there are a ton of "interrupts" that can mean different things on certain brands of processors, most of which have been phased out.
+
+
+## Maintainers
+
+- [Sindre Sorhus](https://github.com/sindresorhus)
+- [Josh Junon](https://github.com/qix-)
+
+
+---
+
+<div align="center">
+ <b>
+ <a href="https://tidelift.com/subscription/pkg/npm-ansi-regex?utm_source=npm-ansi-regex&utm_medium=referral&utm_campaign=readme">Get professional support for this package with a Tidelift subscription</a>
+ </b>
+ <br>
+ <sub>
+ Tidelift helps make open source sustainable for maintainers while giving companies<br>assurances about security, maintenance, and licensing for their dependencies.
+ </sub>
+</div>
diff --git a/node_modules/stylehacks/node_modules/.bin/browserslist b/node_modules/stylehacks/node_modules/.bin/browserslist
new file mode 120000
index 00000000..c4cc06e3
--- /dev/null
+++ b/node_modules/stylehacks/node_modules/.bin/browserslist
@@ -0,0 +1 @@
+../../../browserslist/cli.js \ No newline at end of file
diff --git a/node_modules/svgo/node_modules/commander/CHANGELOG.md b/node_modules/svgo/node_modules/commander/CHANGELOG.md
new file mode 100644
index 00000000..0b55881b
--- /dev/null
+++ b/node_modules/svgo/node_modules/commander/CHANGELOG.md
@@ -0,0 +1,440 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
+and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). (Format adopted after v3.0.0.)
+
+<!-- markdownlint-disable MD024 -->
+<!-- markdownlint-disable MD004 -->
+
+## [7.2.0] (2021-03-26)
+
+### Added
+
+- TypeScript typing for `parent` property on `Command` ([#1475])
+- TypeScript typing for `.attributeName()` on `Option` ([#1483])
+- support information in package ([#1477])
+
+### Changed
+
+- improvements to error messages, README, and tests
+- update dependencies
+
+## [7.1.0] (2021-02-15)
+
+### Added
+
+- support for named imports from ECMAScript modules ([#1440])
+- add `.cjs` to list of expected script file extensions ([#1449])
+- allow using option choices and variadic together ([#1454])
+
+### Fixed
+
+- replace use of deprecated `process.mainModule` ([#1448])
+- regression for legacy `command('*')` and call when command line includes options ([#1464])
+- regression for `on('command:*', ...)` and call when command line includes unknown options ([#1464])
+- display best error for combination of unknown command and unknown option (i.e. unknown command) ([#1464])
+
+### Changed
+
+- make TypeScript typings tests stricter ([#1453])
+- improvements to README and tests
+
+## [7.0.0] (2021-01-15)
+
+### Added
+
+- `.enablePositionalOptions()` to let program and subcommand reuse same option ([#1427])
+- `.passThroughOptions()` to pass options through to other programs without needing `--` ([#1427])
+- `.allowExcessArguments(false)` to show an error message if there are too many command-arguments on command line for the action handler ([#1409])
+- `.configureOutput()` to modify use of stdout and stderr or customise display of errors ([#1387])
+- use `.addHelpText()` to add text before or after the built-in help, for just current command or also for all subcommands ([#1296])
+- enhance Option class ([#1331])
+ - allow hiding options from help
+ - allow restricting option arguments to a list of choices
+ - allow setting how default value is shown in help
+- `.createOption()` to support subclassing of automatically created options (like `.createCommand()`) ([#1380])
+- refactor the code generating the help into a separate public Help class ([#1365])
+ - support sorting subcommands and options in help
+ - support specifying wrap width (columns)
+ - allow subclassing Help class
+ - allow configuring Help class without subclassing
+
+### Changed
+
+- *Breaking:* options are stored safely by default, not as properties on the command ([#1409])
+ - this especially affects accessing options on program, use `program.opts()`
+ - revert behaviour with `.storeOptionsAsProperties()`
+- *Breaking:* action handlers are passed options and command separately ([#1409])
+- deprecated callback parameter to `.help()` and `.outputHelp()` (removed from README) ([#1296])
+- *Breaking:* errors now displayed using `process.stderr.write()` instead of `console.error()`
+- deprecate `.on('--help')` (removed from README) ([#1296])
+- initialise the command description to empty string (previously undefined) ([#1365])
+- document and annotate deprecated routines ([#1349])
+
+### Fixed
+
+- wrapping bugs in help ([#1365])
+ - first line of command description was wrapping two characters early
+ - pad width calculation was not including help option and help command
+ - pad width calculation was including hidden options and commands
+- improve backwards compatibility for custom command event listeners ([#1403])
+
+### Deleted
+
+- *Breaking:* `.passCommandToAction()` ([#1409])
+ - no longer needed as action handler is passed options and command
+- *Breaking:* "extra arguments" parameter to action handler ([#1409])
+ - if being used to detect excess arguments, there is now an error available by setting `.allowExcessArguments(false)`
+
+### Migration Tips
+
+The biggest change is the parsed option values. Previously the options were stored by default as properties on the command object, and now the options are stored separately.
+
+If you wish to restore the old behaviour and get running quickly you can call `.storeOptionsAsProperties()`.
+To allow you to move to the new code patterns incrementally, the action handler will be passed the command _twice_,
+to match the new "options" and "command" parameters (see below).
+
+**program options**
+
+Use the `.opts()` method to access the options. This is available on any command but is used most with the program.
+
+```js
+program.option('-d, --debug');
+program.parse();
+// Old code before Commander 7
+if (program.debug) console.log(`Program name is ${program.name()}`);
+```
+
+```js
+// New code
+const options = program.opts();
+if (options.debug) console.log(`Program name is ${program.name()}`);
+```
+
+**action handler**
+
+The action handler gets passed a parameter for each command-argument you declared. Previously by default the next parameter was the command object with the options as properties. Now the next two parameters are instead the options and the command. If you
+only accessed the options there may be no code changes required.
+
+```js
+program
+ .command('compress <filename>')
+ .option('-t, --trace')
+ // Old code before Commander 7
+ .action((filename, cmd)) => {
+ if (cmd.trace) console.log(`Command name is ${cmd.name()}`);
+ });
+```
+
+```js
+ // New code
+ .action((filename, options, command)) => {
+ if (options.trace) console.log(`Command name is ${command.name()}`);
+ });
+```
+
+If you already set `.storeOptionsAsProperties(false)` you may still need to adjust your code.
+
+```js
+program
+ .command('compress <filename>')
+ .storeOptionsAsProperties(false)
+ .option('-t, --trace')
+ // Old code before Commander 7
+ .action((filename, command)) => {
+ if (command.opts().trace) console.log(`Command name is ${command.name()}`);
+ });
+```
+
+```js
+ // New code
+ .action((filename, options, command)) => {
+ if (command.opts().trace) console.log(`Command name is ${command.name()}`);
+ });
+```
+
+## [7.0.0-2] (2020-12-14)
+
+(Released in 7.0.0)
+
+## [7.0.0-1] (2020-11-21)
+
+(Released in 7.0.0)
+
+## [7.0.0-0] (2020-10-25)
+
+(Released in 7.0.0)
+
+## [6.2.1] (2020-12-13)
+
+### Fixed
+
+- some tests failed if directory path included a space ([1390])
+
+## [6.2.0] (2020-10-25)
+
+### Added
+
+- added 'tsx' file extension for stand-alone executable subcommands ([#1368])
+- documented second parameter to `.description()` to describe command arguments ([#1353])
+- documentation of special cases with options taking varying numbers of option-arguments ([#1332])
+- documentation for terminology ([#1361])
+
+### Fixed
+
+- add missing TypeScript definition for `.addHelpCommand()' ([#1375])
+- removed blank line after "Arguments:" in help, to match "Options:" and "Commands:" ([#1360])
+
+### Changed
+
+- update dependencies
+
+## [6.1.0] (2020-08-28)
+
+### Added
+
+- include URL to relevant section of README for error for potential conflict between Command properties and option values ([#1306])
+- `.combineFlagAndOptionalValue(false)` to ease upgrade path from older versions of Commander ([#1326])
+- allow disabling the built-in help option using `.helpOption(false)` ([#1325])
+- allow just some arguments in `argumentDescription` to `.description()` ([#1323])
+
+### Changed
+
+- tidy async test and remove lint override ([#1312])
+
+### Fixed
+
+- executable subcommand launching when script path not known ([#1322])
+
+## [6.0.0] (2020-07-21)
+
+### Added
+
+- add support for variadic options ([#1250])
+- allow options to be added with just a short flag ([#1256])
+ - *Breaking* the option property has same case as flag. e.g. flag `-n` accessed as `opts().n` (previously uppercase)
+- *Breaking* throw an error if there might be a clash between option name and a Command property, with advice on how to resolve ([#1275])
+
+### Fixed
+
+- Options which contain -no- in the middle of the option flag should not be treated as negatable. ([#1301])
+
+## [6.0.0-0] (2020-06-20)
+
+(Released in 6.0.0)
+
+## [5.1.0] (2020-04-25)
+
+### Added
+
+- support for multiple command aliases, the first of which is shown in the auto-generated help ([#531], [#1236])
+- configuration support in `addCommand()` for `hidden` and `isDefault` ([#1232])
+
+### Fixed
+
+- omit masked help flags from the displayed help ([#645], [#1247])
+- remove old short help flag when change help flags using `helpOption` ([#1248])
+
+### Changed
+
+- remove use of `arguments` to improve auto-generated help in editors ([#1235])
+- rename `.command()` configuration `noHelp` to `hidden` (but not remove old support) ([#1232])
+- improvements to documentation
+- update dependencies
+- update tested versions of node
+- eliminate lint errors in TypeScript ([#1208])
+
+## [5.0.0] (2020-03-14)
+
+### Added
+
+* support for nested commands with action-handlers ([#1] [#764] [#1149])
+* `.addCommand()` for adding a separately configured command ([#764] [#1149])
+* allow a non-executable to be set as the default command ([#742] [#1149])
+* implicit help command when there are subcommands (previously only if executables) ([#1149])
+* customise implicit help command with `.addHelpCommand()` ([#1149])
+* display error message for unknown subcommand, by default ([#432] [#1088] [#1149])
+* display help for missing subcommand, by default ([#1088] [#1149])
+* combined short options as single argument may include boolean flags and value flag and value (e.g. `-a -b -p 80` can be written as `-abp80`) ([#1145])
+* `.parseOption()` includes short flag and long flag expansions ([#1145])
+* `.helpInformation()` returns help text as a string, previously a private routine ([#1169])
+* `.parse()` implicitly uses `process.argv` if arguments not specified ([#1172])
+* optionally specify where `.parse()` arguments "from", if not following node conventions ([#512] [#1172])
+* suggest help option along with unknown command error ([#1179])
+* TypeScript definition for `commands` property of `Command` ([#1184])
+* export `program` property ([#1195])
+* `createCommand` factory method to simplify subclassing ([#1191])
+
+### Fixed
+
+* preserve argument order in subcommands ([#508] [#962] [#1138])
+* do not emit `command:*` for executable subcommands ([#809] [#1149])
+* action handler called whether or not there are non-option arguments ([#1062] [#1149])
+* combining option short flag and value in single argument now works for subcommands ([#1145])
+* only add implicit help command when it will not conflict with other uses of argument ([#1153] [#1149])
+* implicit help command works with command aliases ([#948] [#1149])
+* options are validated whether or not there is an action handler ([#1149])
+
+### Changed
+
+* *Breaking* `.args` contains command arguments with just recognised options removed ([#1032] [#1138])
+* *Breaking* display error if required argument for command is missing ([#995] [#1149])
+* tighten TypeScript definition of custom option processing function passed to `.option()` ([#1119])
+* *Breaking* `.allowUnknownOption()` ([#802] [#1138])
+ * unknown options included in arguments passed to command action handler
+ * unknown options included in `.args`
+* only recognised option short flags and long flags are expanded (e.g. `-ab` or `--foo=bar`) ([#1145])
+* *Breaking* `.parseOptions()` ([#1138])
+ * `args` in returned result renamed `operands` and does not include anything after first unknown option
+ * `unknown` in returned result has arguments after first unknown option including operands, not just options and values
+* *Breaking* `.on('command:*', callback)` and other command events passed (changed) results from `.parseOptions`, i.e. operands and unknown ([#1138])
+* refactor Option from prototype to class ([#1133])
+* refactor Command from prototype to class ([#1159])
+* changes to error handling ([#1165])
+ * throw for author error, not just display message
+ * preflight for variadic error
+ * add tips to missing subcommand executable
+* TypeScript fluent return types changed to be more subclass friendly, return `this` rather than `Command` ([#1180])
+* `.parseAsync` returns `Promise<this>` to be consistent with `.parse()` ([#1180])
+* update dependencies
+
+### Removed
+
+* removed EventEmitter from TypeScript definition for Command, eliminating implicit peer dependency on `@types/node` ([#1146])
+* removed private function `normalize` (the functionality has been integrated into `parseOptions`) ([#1145])
+* `parseExpectedArgs` is now private ([#1149])
+
+### Migration Tips
+
+If you use `.on('command:*')` or more complicated tests to detect an unrecognised subcommand, you may be able to delete the code and rely on the default behaviour.
+
+If you use `program.args` or more complicated tests to detect a missing subcommand, you may be able to delete the code and rely on the default behaviour.
+
+If you use `.command('*')` to add a default command, you may be be able to switch to `isDefault:true` with a named command.
+
+If you want to continue combining short options with optional values as though they were boolean flags, set `combineFlagAndOptionalValue(false)`
+to expand `-fb` to `-f -b` rather than `-f b`.
+
+## [5.0.0-4] (2020-03-03)
+
+(Released in 5.0.0)
+
+## [5.0.0-3] (2020-02-20)
+
+(Released in 5.0.0)
+
+## [5.0.0-2] (2020-02-10)
+
+(Released in 5.0.0)
+
+## [5.0.0-1] (2020-02-08)
+
+(Released in 5.0.0)
+
+## [5.0.0-0] (2020-02-02)
+
+(Released in 5.0.0)
+
+## Older versions
+
+* [4.x](./changelogs/CHANGELOG-4.md)
+* [3.x](./changelogs/CHANGELOG-3.md)
+* [2.x](./changelogs/CHANGELOG-2.md)
+* [1.x](./changelogs/CHANGELOG-1.md)
+* [0.x](./changelogs/CHANGELOG-0.md)
+
+[#1]: https://github.com/tj/commander.js/issues/1
+[#432]: https://github.com/tj/commander.js/issues/432
+[#508]: https://github.com/tj/commander.js/issues/508
+[#512]: https://github.com/tj/commander.js/issues/512
+[#531]: https://github.com/tj/commander.js/issues/531
+[#645]: https://github.com/tj/commander.js/issues/645
+[#742]: https://github.com/tj/commander.js/issues/742
+[#764]: https://github.com/tj/commander.js/issues/764
+[#802]: https://github.com/tj/commander.js/issues/802
+[#809]: https://github.com/tj/commander.js/issues/809
+[#948]: https://github.com/tj/commander.js/issues/948
+[#962]: https://github.com/tj/commander.js/issues/962
+[#995]: https://github.com/tj/commander.js/issues/995
+[#1032]: https://github.com/tj/commander.js/issues/1032
+[#1062]: https://github.com/tj/commander.js/pull/1062
+[#1088]: https://github.com/tj/commander.js/issues/1088
+[#1119]: https://github.com/tj/commander.js/pull/1119
+[#1133]: https://github.com/tj/commander.js/pull/1133
+[#1138]: https://github.com/tj/commander.js/pull/1138
+[#1145]: https://github.com/tj/commander.js/pull/1145
+[#1146]: https://github.com/tj/commander.js/pull/1146
+[#1149]: https://github.com/tj/commander.js/pull/1149
+[#1153]: https://github.com/tj/commander.js/issues/1153
+[#1159]: https://github.com/tj/commander.js/pull/1159
+[#1165]: https://github.com/tj/commander.js/pull/1165
+[#1169]: https://github.com/tj/commander.js/pull/1169
+[#1172]: https://github.com/tj/commander.js/pull/1172
+[#1179]: https://github.com/tj/commander.js/pull/1179
+[#1180]: https://github.com/tj/commander.js/pull/1180
+[#1184]: https://github.com/tj/commander.js/pull/1184
+[#1191]: https://github.com/tj/commander.js/pull/1191
+[#1195]: https://github.com/tj/commander.js/pull/1195
+[#1208]: https://github.com/tj/commander.js/pull/1208
+[#1232]: https://github.com/tj/commander.js/pull/1232
+[#1235]: https://github.com/tj/commander.js/pull/1235
+[#1236]: https://github.com/tj/commander.js/pull/1236
+[#1247]: https://github.com/tj/commander.js/pull/1247
+[#1248]: https://github.com/tj/commander.js/pull/1248
+[#1250]: https://github.com/tj/commander.js/pull/1250
+[#1256]: https://github.com/tj/commander.js/pull/1256
+[#1275]: https://github.com/tj/commander.js/pull/1275
+[#1296]: https://github.com/tj/commander.js/pull/1296
+[#1301]: https://github.com/tj/commander.js/issues/1301
+[#1306]: https://github.com/tj/commander.js/pull/1306
+[#1312]: https://github.com/tj/commander.js/pull/1312
+[#1322]: https://github.com/tj/commander.js/pull/1322
+[#1323]: https://github.com/tj/commander.js/pull/1323
+[#1325]: https://github.com/tj/commander.js/pull/1325
+[#1326]: https://github.com/tj/commander.js/pull/1326
+[#1331]: https://github.com/tj/commander.js/pull/1331
+[#1332]: https://github.com/tj/commander.js/pull/1332
+[#1349]: https://github.com/tj/commander.js/pull/1349
+[#1353]: https://github.com/tj/commander.js/pull/1353
+[#1360]: https://github.com/tj/commander.js/pull/1360
+[#1361]: https://github.com/tj/commander.js/pull/1361
+[#1365]: https://github.com/tj/commander.js/pull/1365
+[#1368]: https://github.com/tj/commander.js/pull/1368
+[#1375]: https://github.com/tj/commander.js/pull/1375
+[#1380]: https://github.com/tj/commander.js/pull/1380
+[#1387]: https://github.com/tj/commander.js/pull/1387
+[#1390]: https://github.com/tj/commander.js/pull/1390
+[#1403]: https://github.com/tj/commander.js/pull/1403
+[#1409]: https://github.com/tj/commander.js/pull/1409
+[#1427]: https://github.com/tj/commander.js/pull/1427
+[#1440]: https://github.com/tj/commander.js/pull/1440
+[#1448]: https://github.com/tj/commander.js/pull/1448
+[#1449]: https://github.com/tj/commander.js/pull/1449
+[#1453]: https://github.com/tj/commander.js/pull/1453
+[#1454]: https://github.com/tj/commander.js/pull/1454
+[#1464]: https://github.com/tj/commander.js/pull/1464
+[#1475]: https://github.com/tj/commander.js/pull/1475
+[#1477]: https://github.com/tj/commander.js/pull/1477
+[#1483]: https://github.com/tj/commander.js/pull/1483
+
+[Unreleased]: https://github.com/tj/commander.js/compare/master...develop
+[7.2.0]: https://github.com/tj/commander.js/compare/v7.1.0...v7.2.0
+[7.1.0]: https://github.com/tj/commander.js/compare/v7.0.0...v7.1.0
+[7.0.0]: https://github.com/tj/commander.js/compare/v6.2.1...v7.0.0
+[7.0.0-2]: https://github.com/tj/commander.js/compare/v7.0.0-1...v7.0.0-2
+[7.0.0-1]: https://github.com/tj/commander.js/compare/v7.0.0-0...v7.0.0-1
+[7.0.0-0]: https://github.com/tj/commander.js/compare/v6.2.0...v7.0.0-0
+[6.2.1]: https://github.com/tj/commander.js/compare/v6.2.0..v6.2.1
+[6.2.0]: https://github.com/tj/commander.js/compare/v6.1.0..v6.2.0
+[6.1.0]: https://github.com/tj/commander.js/compare/v6.0.0..v6.1.0
+[6.0.0]: https://github.com/tj/commander.js/compare/v5.1.0..v6.0.0
+[6.0.0-0]: https://github.com/tj/commander.js/compare/v5.1.0..v6.0.0-0
+[5.1.0]: https://github.com/tj/commander.js/compare/v5.0.0..v5.1.0
+[5.0.0]: https://github.com/tj/commander.js/compare/v4.1.1..v5.0.0
+[5.0.0-4]: https://github.com/tj/commander.js/compare/v5.0.0-3..v5.0.0-4
+[5.0.0-3]: https://github.com/tj/commander.js/compare/v5.0.0-2..v5.0.0-3
+[5.0.0-2]: https://github.com/tj/commander.js/compare/v5.0.0-1..v5.0.0-2
+[5.0.0-1]: https://github.com/tj/commander.js/compare/v5.0.0-0..v5.0.0-1
+[5.0.0-0]: https://github.com/tj/commander.js/compare/v4.1.1..v5.0.0-0
diff --git a/node_modules/@babel/cli/node_modules/commander/LICENSE b/node_modules/svgo/node_modules/commander/LICENSE
index 10f997ab..10f997ab 100644
--- a/node_modules/@babel/cli/node_modules/commander/LICENSE
+++ b/node_modules/svgo/node_modules/commander/LICENSE
diff --git a/node_modules/svgo/node_modules/commander/Readme.md b/node_modules/svgo/node_modules/commander/Readme.md
new file mode 100644
index 00000000..d2a88a7b
--- /dev/null
+++ b/node_modules/svgo/node_modules/commander/Readme.md
@@ -0,0 +1,917 @@
+# Commander.js
+
+[![Build Status](https://github.com/tj/commander.js/workflows/build/badge.svg)](https://github.com/tj/commander.js/actions?query=workflow%3A%22build%22)
+[![NPM Version](http://img.shields.io/npm/v/commander.svg?style=flat)](https://www.npmjs.org/package/commander)
+[![NPM Downloads](https://img.shields.io/npm/dm/commander.svg?style=flat)](https://npmcharts.com/compare/commander?minimal=true)
+[![Install Size](https://packagephobia.now.sh/badge?p=commander)](https://packagephobia.now.sh/result?p=commander)
+
+The complete solution for [node.js](http://nodejs.org) command-line interfaces.
+
+Read this in other languages: English | [简体中文](./Readme_zh-CN.md)
+
+- [Commander.js](#commanderjs)
+ - [Installation](#installation)
+ - [Declaring _program_ variable](#declaring-program-variable)
+ - [Options](#options)
+ - [Common option types, boolean and value](#common-option-types-boolean-and-value)
+ - [Default option value](#default-option-value)
+ - [Other option types, negatable boolean and boolean|value](#other-option-types-negatable-boolean-and-booleanvalue)
+ - [Required option](#required-option)
+ - [Variadic option](#variadic-option)
+ - [Version option](#version-option)
+ - [More configuration](#more-configuration)
+ - [Custom option processing](#custom-option-processing)
+ - [Commands](#commands)
+ - [Specify the argument syntax](#specify-the-argument-syntax)
+ - [Action handler](#action-handler)
+ - [Stand-alone executable (sub)commands](#stand-alone-executable-subcommands)
+ - [Automated help](#automated-help)
+ - [Custom help](#custom-help)
+ - [Display help from code](#display-help-from-code)
+ - [.usage and .name](#usage-and-name)
+ - [.helpOption(flags, description)](#helpoptionflags-description)
+ - [.addHelpCommand()](#addhelpcommand)
+ - [More configuration](#more-configuration-1)
+ - [Custom event listeners](#custom-event-listeners)
+ - [Bits and pieces](#bits-and-pieces)
+ - [.parse() and .parseAsync()](#parse-and-parseasync)
+ - [Parsing Configuration](#parsing-configuration)
+ - [Legacy options as properties](#legacy-options-as-properties)
+ - [TypeScript](#typescript)
+ - [createCommand()](#createcommand)
+ - [Node options such as `--harmony`](#node-options-such-as---harmony)
+ - [Debugging stand-alone executable subcommands](#debugging-stand-alone-executable-subcommands)
+ - [Override exit and output handling](#override-exit-and-output-handling)
+ - [Additional documentation](#additional-documentation)
+ - [Examples](#examples)
+ - [Support](#support)
+ - [Commander for enterprise](#commander-for-enterprise)
+
+For information about terms used in this document see: [terminology](./docs/terminology.md)
+
+## Installation
+
+```bash
+npm install commander
+```
+
+## Declaring _program_ variable
+
+Commander exports a global object which is convenient for quick programs.
+This is used in the examples in this README for brevity.
+
+```js
+const { program } = require('commander');
+program.version('0.0.1');
+```
+
+For larger programs which may use commander in multiple ways, including unit testing, it is better to create a local Command object to use.
+
+```js
+const { Command } = require('commander');
+const program = new Command();
+program.version('0.0.1');
+```
+
+For named imports in ECMAScript modules, import from `commander/esm.mjs`.
+
+```js
+// index.mjs
+import { Command } from 'commander/esm.mjs';
+const program = new Command();
+```
+
+And in TypeScript:
+
+```ts
+// index.ts
+import { Command } from 'commander';
+const program = new Command();
+```
+
+
+## Options
+
+Options are defined with the `.option()` method, also serving as documentation for the options. Each option can have a short flag (single character) and a long name, separated by a comma or space or vertical bar ('|').
+
+The parsed options can be accessed by calling `.opts()` on a `Command` object, and are passed to the action handler. Multi-word options such as "--template-engine" are camel-cased, becoming `program.opts().templateEngine` etc.
+
+Multiple short flags may optionally be combined in a single argument following the dash: boolean flags, followed by a single option taking a value (possibly followed by the value).
+For example `-a -b -p 80` may be written as `-ab -p80` or even `-abp80`.
+
+You can use `--` to indicate the end of the options, and any remaining arguments will be used without being interpreted.
+
+By default options on the command line are not positional, and can be specified before or after other arguments.
+
+### Common option types, boolean and value
+
+The two most used option types are a boolean option, and an option which takes its value
+from the following argument (declared with angle brackets like `--expect <value>`). Both are `undefined` unless specified on command line.
+
+Example file: [options-common.js](./examples/options-common.js)
+
+```js
+program
+ .option('-d, --debug', 'output extra debugging')
+ .option('-s, --small', 'small pizza size')
+ .option('-p, --pizza-type <type>', 'flavour of pizza');
+
+program.parse(process.argv);
+
+const options = program.opts();
+if (options.debug) console.log(options);
+console.log('pizza details:');
+if (options.small) console.log('- small pizza size');
+if (options.pizzaType) console.log(`- ${options.pizzaType}`);
+```
+
+```bash
+$ pizza-options -d
+{ debug: true, small: undefined, pizzaType: undefined }
+pizza details:
+$ pizza-options -p
+error: option '-p, --pizza-type <type>' argument missing
+$ pizza-options -ds -p vegetarian
+{ debug: true, small: true, pizzaType: 'vegetarian' }
+pizza details:
+- small pizza size
+- vegetarian
+$ pizza-options --pizza-type=cheese
+pizza details:
+- cheese
+```
+
+`program.parse(arguments)` processes the arguments, leaving any args not consumed by the program options in the `program.args` array. The parameter is optional and defaults to `process.argv`.
+
+### Default option value
+
+You can specify a default value for an option which takes a value.
+
+Example file: [options-defaults.js](./examples/options-defaults.js)
+
+```js
+program
+ .option('-c, --cheese <type>', 'add the specified type of cheese', 'blue');
+
+program.parse();
+
+console.log(`cheese: ${program.opts().cheese}`);
+```
+
+```bash
+$ pizza-options
+cheese: blue
+$ pizza-options --cheese stilton
+cheese: stilton
+```
+
+### Other option types, negatable boolean and boolean|value
+
+You can define a boolean option long name with a leading `no-` to set the option value to false when used.
+Defined alone this also makes the option true by default.
+
+If you define `--foo` first, adding `--no-foo` does not change the default value from what it would
+otherwise be. You can specify a default boolean value for a boolean option and it can be overridden on command line.
+
+Example file: [options-negatable.js](./examples/options-negatable.js)
+
+```js
+program
+ .option('--no-sauce', 'Remove sauce')
+ .option('--cheese <flavour>', 'cheese flavour', 'mozzarella')
+ .option('--no-cheese', 'plain with no cheese')
+ .parse();
+
+const options = program.opts();
+const sauceStr = options.sauce ? 'sauce' : 'no sauce';
+const cheeseStr = (options.cheese === false) ? 'no cheese' : `${options.cheese} cheese`;
+console.log(`You ordered a pizza with ${sauceStr} and ${cheeseStr}`);
+```
+
+```bash
+$ pizza-options
+You ordered a pizza with sauce and mozzarella cheese
+$ pizza-options --sauce
+error: unknown option '--sauce'
+$ pizza-options --cheese=blue
+You ordered a pizza with sauce and blue cheese
+$ pizza-options --no-sauce --no-cheese
+You ordered a pizza with no sauce and no cheese
+```
+
+You can specify an option which may be used as a boolean option but may optionally take an option-argument
+(declared with square brackets like `--optional [value]`).
+
+Example file: [options-boolean-or-value.js](./examples/options-boolean-or-value.js)
+
+```js
+program
+ .option('-c, --cheese [type]', 'Add cheese with optional type');
+
+program.parse(process.argv);
+
+const options = program.opts();
+if (options.cheese === undefined) console.log('no cheese');
+else if (options.cheese === true) console.log('add cheese');
+else console.log(`add cheese type ${options.cheese}`);
+```
+
+```bash
+$ pizza-options
+no cheese
+$ pizza-options --cheese
+add cheese
+$ pizza-options --cheese mozzarella
+add cheese type mozzarella
+```
+
+For information about possible ambiguous cases, see [options taking varying arguments](./docs/options-taking-varying-arguments.md).
+
+### Required option
+
+You may specify a required (mandatory) option using `.requiredOption`. The option must have a value after parsing, usually specified on the command line, or perhaps from a default value (say from environment). The method is otherwise the same as `.option` in format, taking flags and description, and optional default value or custom processing.
+
+Example file: [options-required.js](./examples/options-required.js)
+
+```js
+program
+ .requiredOption('-c, --cheese <type>', 'pizza must have cheese');
+
+program.parse();
+```
+
+```bash
+$ pizza
+error: required option '-c, --cheese <type>' not specified
+```
+
+### Variadic option
+
+You may make an option variadic by appending `...` to the value placeholder when declaring the option. On the command line you
+can then specify multiple option-arguments, and the parsed option value will be an array. The extra arguments
+are read until the first argument starting with a dash. The special argument `--` stops option processing entirely. If a value
+is specified in the same argument as the option then no further values are read.
+
+Example file: [options-variadic.js](./examples/options-variadic.js)
+
+```js
+program
+ .option('-n, --number <numbers...>', 'specify numbers')
+ .option('-l, --letter [letters...]', 'specify letters');
+
+program.parse();
+
+console.log('Options: ', program.opts());
+console.log('Remaining arguments: ', program.args);
+```
+
+```bash
+$ collect -n 1 2 3 --letter a b c
+Options: { number: [ '1', '2', '3' ], letter: [ 'a', 'b', 'c' ] }
+Remaining arguments: []
+$ collect --letter=A -n80 operand
+Options: { number: [ '80' ], letter: [ 'A' ] }
+Remaining arguments: [ 'operand' ]
+$ collect --letter -n 1 -n 2 3 -- operand
+Options: { number: [ '1', '2', '3' ], letter: true }
+Remaining arguments: [ 'operand' ]
+```
+
+For information about possible ambiguous cases, see [options taking varying arguments](./docs/options-taking-varying-arguments.md).
+
+### Version option
+
+The optional `version` method adds handling for displaying the command version. The default option flags are `-V` and `--version`, and when present the command prints the version number and exits.
+
+```js
+program.version('0.0.1');
+```
+
+```bash
+$ ./examples/pizza -V
+0.0.1
+```
+
+You may change the flags and description by passing additional parameters to the `version` method, using
+the same syntax for flags as the `option` method.
+
+```js
+program.version('0.0.1', '-v, --vers', 'output the current version');
+```
+
+### More configuration
+
+You can add most options using the `.option()` method, but there are some additional features available
+by constructing an `Option` explicitly for less common cases.
+
+Example file: [options-extra.js](./examples/options-extra.js)
+
+```js
+program
+ .addOption(new Option('-s, --secret').hideHelp())
+ .addOption(new Option('-t, --timeout <delay>', 'timeout in seconds').default(60, 'one minute'))
+ .addOption(new Option('-d, --drink <size>', 'drink size').choices(['small', 'medium', 'large']));
+```
+
+```bash
+$ extra --help
+Usage: help [options]
+
+Options:
+ -t, --timeout <delay> timeout in seconds (default: one minute)
+ -d, --drink <size> drink cup size (choices: "small", "medium", "large")
+ -h, --help display help for command
+
+$ extra --drink huge
+error: option '-d, --drink <size>' argument 'huge' is invalid. Allowed choices are small, medium, large.
+```
+
+### Custom option processing
+
+You may specify a function to do custom processing of option-arguments. The callback function receives two parameters,
+the user specified option-argument and the previous value for the option. It returns the new value for the option.
+
+This allows you to coerce the option-argument to the desired type, or accumulate values, or do entirely custom processing.
+
+You can optionally specify the default/starting value for the option after the function parameter.
+
+Example file: [options-custom-processing.js](./examples/options-custom-processing.js)
+
+```js
+function myParseInt(value, dummyPrevious) {
+ // parseInt takes a string and a radix
+ const parsedValue = parseInt(value, 10);
+ if (isNaN(parsedValue)) {
+ throw new commander.InvalidOptionArgumentError('Not a number.');
+ }
+ return parsedValue;
+}
+
+function increaseVerbosity(dummyValue, previous) {
+ return previous + 1;
+}
+
+function collect(value, previous) {
+ return previous.concat([value]);
+}
+
+function commaSeparatedList(value, dummyPrevious) {
+ return value.split(',');
+}
+
+program
+ .option('-f, --float <number>', 'float argument', parseFloat)
+ .option('-i, --integer <number>', 'integer argument', myParseInt)
+ .option('-v, --verbose', 'verbosity that can be increased', increaseVerbosity, 0)
+ .option('-c, --collect <value>', 'repeatable value', collect, [])
+ .option('-l, --list <items>', 'comma separated list', commaSeparatedList)
+;
+
+program.parse();
+
+const options = program.opts();
+if (options.float !== undefined) console.log(`float: ${options.float}`);
+if (options.integer !== undefined) console.log(`integer: ${options.integer}`);
+if (options.verbose > 0) console.log(`verbosity: ${options.verbose}`);
+if (options.collect.length > 0) console.log(options.collect);
+if (options.list !== undefined) console.log(options.list);
+```
+
+```bash
+$ custom -f 1e2
+float: 100
+$ custom --integer 2
+integer: 2
+$ custom -v -v -v
+verbose: 3
+$ custom -c a -c b -c c
+[ 'a', 'b', 'c' ]
+$ custom --list x,y,z
+[ 'x', 'y', 'z' ]
+```
+
+## Commands
+
+You can specify (sub)commands using `.command()` or `.addCommand()`. There are two ways these can be implemented: using an action handler attached to the command, or as a stand-alone executable file (described in more detail later). The subcommands may be nested ([example](./examples/nestedCommands.js)).
+
+In the first parameter to `.command()` you specify the command name and any command-arguments. The arguments may be `<required>` or `[optional]`, and the last argument may also be `variadic...`.
+
+You can use `.addCommand()` to add an already configured subcommand to the program.
+
+For example:
+
+```js
+// Command implemented using action handler (description is supplied separately to `.command`)
+// Returns new command for configuring.
+program
+ .command('clone <source> [destination]')
+ .description('clone a repository into a newly created directory')
+ .action((source, destination) => {
+ console.log('clone command called');
+ });
+
+// Command implemented using stand-alone executable file (description is second parameter to `.command`)
+// Returns `this` for adding more commands.
+program
+ .command('start <service>', 'start named service')
+ .command('stop [service]', 'stop named service, or all if no name supplied');
+
+// Command prepared separately.
+// Returns `this` for adding more commands.
+program
+ .addCommand(build.makeBuildCommand());
+```
+
+Configuration options can be passed with the call to `.command()` and `.addCommand()`. Specifying `hidden: true` will
+remove the command from the generated help output. Specifying `isDefault: true` will run the subcommand if no other
+subcommand is specified ([example](./examples/defaultCommand.js)).
+
+### Specify the argument syntax
+
+You use `.arguments` to specify the expected command-arguments for the top-level command, and for subcommands they are usually
+included in the `.command` call. Angled brackets (e.g. `<required>`) indicate required command-arguments.
+Square brackets (e.g. `[optional]`) indicate optional command-arguments.
+You can optionally describe the arguments in the help by supplying a hash as second parameter to `.description()`.
+
+Example file: [arguments.js](./examples/arguments.js)
+
+```js
+program
+ .version('0.1.0')
+ .arguments('<username> [password]')
+ .description('test command', {
+ username: 'user to login',
+ password: 'password for user, if required'
+ })
+ .action((username, password) => {
+ console.log('username:', username);
+ console.log('environment:', password || 'no password given');
+ });
+```
+
+ The last argument of a command can be variadic, and only the last argument. To make an argument variadic you
+ append `...` to the argument name. For example:
+
+```js
+program
+ .version('0.1.0')
+ .command('rmdir <dirs...>')
+ .action(function (dirs) {
+ dirs.forEach((dir) => {
+ console.log('rmdir %s', dir);
+ });
+ });
+```
+
+The variadic argument is passed to the action handler as an array.
+
+### Action handler
+
+The action handler gets passed a parameter for each command-argument you declared, and two additional parameters
+which are the parsed options and the command object itself.
+
+Example file: [thank.js](./examples/thank.js)
+
+```js
+program
+ .arguments('<name>')
+ .option('-t, --title <honorific>', 'title to use before name')
+ .option('-d, --debug', 'display some debugging')
+ .action((name, options, command) => {
+ if (options.debug) {
+ console.error('Called %s with options %o', command.name(), options);
+ }
+ const title = options.title ? `${options.title} ` : '';
+ console.log(`Thank-you ${title}${name}`);
+ });
+```
+
+You may supply an `async` action handler, in which case you call `.parseAsync` rather than `.parse`.
+
+```js
+async function run() { /* code goes here */ }
+
+async function main() {
+ program
+ .command('run')
+ .action(run);
+ await program.parseAsync(process.argv);
+}
+```
+
+A command's options and arguments on the command line are validated when the command is used. Any unknown options or missing arguments will be reported as an error. You can suppress the unknown option checks with `.allowUnknownOption()`. By default it is not an error to
+pass more arguments than declared, but you can make this an error with `.allowExcessArguments(false)`.
+
+### Stand-alone executable (sub)commands
+
+When `.command()` is invoked with a description argument, this tells Commander that you're going to use stand-alone executables for subcommands.
+Commander will search the executables in the directory of the entry script (like `./examples/pm`) with the name `program-subcommand`, like `pm-install`, `pm-search`.
+You can specify a custom name with the `executableFile` configuration option.
+
+You handle the options for an executable (sub)command in the executable, and don't declare them at the top-level.
+
+Example file: [pm](./examples/pm)
+
+```js
+program
+ .version('0.1.0')
+ .command('install [name]', 'install one or more packages')
+ .command('search [query]', 'search with optional query')
+ .command('update', 'update installed packages', { executableFile: 'myUpdateSubCommand' })
+ .command('list', 'list packages installed', { isDefault: true });
+
+program.parse(process.argv);
+```
+
+If the program is designed to be installed globally, make sure the executables have proper modes, like `755`.
+
+## Automated help
+
+The help information is auto-generated based on the information commander already knows about your program. The default
+help option is `-h,--help`.
+
+Example file: [pizza](./examples/pizza)
+
+```bash
+$ node ./examples/pizza --help
+Usage: pizza [options]
+
+An application for pizza ordering
+
+Options:
+ -p, --peppers Add peppers
+ -c, --cheese <type> Add the specified type of cheese (default: "marble")
+ -C, --no-cheese You do not want any cheese
+ -h, --help display help for command
+```
+
+A `help` command is added by default if your command has subcommands. It can be used alone, or with a subcommand name to show
+further help for the subcommand. These are effectively the same if the `shell` program has implicit help:
+
+```bash
+shell help
+shell --help
+
+shell help spawn
+shell spawn --help
+```
+
+### Custom help
+
+You can add extra text to be displayed along with the built-in help.
+
+Example file: [custom-help](./examples/custom-help)
+
+```js
+program
+ .option('-f, --foo', 'enable some foo');
+
+program.addHelpText('after', `
+
+Example call:
+ $ custom-help --help`);
+```
+
+Yields the following help output:
+
+```Text
+Usage: custom-help [options]
+
+Options:
+ -f, --foo enable some foo
+ -h, --help display help for command
+
+Example call:
+ $ custom-help --help
+```
+
+The positions in order displayed are:
+
+- `beforeAll`: add to the program for a global banner or header
+- `before`: display extra information before built-in help
+- `after`: display extra information after built-in help
+- `afterAll`: add to the program for a global footer (epilog)
+
+The positions "beforeAll" and "afterAll" apply to the command and all its subcommands.
+
+The second parameter can be a string, or a function returning a string. The function is passed a context object for your convenience. The properties are:
+
+- error: a boolean for whether the help is being displayed due to a usage error
+- command: the Command which is displaying the help
+
+### Display help from code
+
+`.help()`: display help information and exit immediately. You can optionally pass `{ error: true }` to display on stderr and exit with an error status.
+
+`.outputHelp()`: output help information without exiting. You can optionally pass `{ error: true }` to display on stderr.
+
+`.helpInformation()`: get the built-in command help information as a string for processing or displaying yourself.
+
+### .usage and .name
+
+These allow you to customise the usage description in the first line of the help. The name is otherwise
+deduced from the (full) program arguments. Given:
+
+```js
+program
+ .name("my-command")
+ .usage("[global options] command")
+```
+
+The help will start with:
+
+```Text
+Usage: my-command [global options] command
+```
+
+### .helpOption(flags, description)
+
+By default every command has a help option. Override the default help flags and description. Pass false to disable the built-in help option.
+
+```js
+program
+ .helpOption('-e, --HELP', 'read more information');
+```
+
+### .addHelpCommand()
+
+A help command is added by default if your command has subcommands. You can explicitly turn on or off the implicit help command with `.addHelpCommand()` and `.addHelpCommand(false)`.
+
+You can both turn on and customise the help command by supplying the name and description:
+
+```js
+program.addHelpCommand('assist [command]', 'show assistance');
+```
+
+### More configuration
+
+The built-in help is formatted using the Help class.
+You can configure the Help behaviour by modifying data properties and methods using `.configureHelp()`, or by subclassing using `.createHelp()` if you prefer.
+
+The data properties are:
+
+- `helpWidth`: specify the wrap width, useful for unit tests
+- `sortSubcommands`: sort the subcommands alphabetically
+- `sortOptions`: sort the options alphabetically
+
+There are methods getting the visible lists of arguments, options, and subcommands. There are methods for formatting the items in the lists, with each item having a _term_ and _description_. Take a look at `.formatHelp()` to see how they are used.
+
+Example file: [configure-help.js](./examples/configure-help.js)
+
+```
+program.configureHelp({
+ sortSubcommands: true,
+ subcommandTerm: (cmd) => cmd.name() // Just show the name, instead of short usage.
+});
+```
+
+## Custom event listeners
+
+You can execute custom actions by listening to command and option events.
+
+```js
+program.on('option:verbose', function () {
+ process.env.VERBOSE = this.opts().verbose;
+});
+
+program.on('command:*', function (operands) {
+ console.error(`error: unknown command '${operands[0]}'`);
+ const availableCommands = program.commands.map(cmd => cmd.name());
+ mySuggestBestMatch(operands[0], availableCommands);
+ process.exitCode = 1;
+});
+```
+
+## Bits and pieces
+
+### .parse() and .parseAsync()
+
+The first argument to `.parse` is the array of strings to parse. You may omit the parameter to implicitly use `process.argv`.
+
+If the arguments follow different conventions than node you can pass a `from` option in the second parameter:
+
+- 'node': default, `argv[0]` is the application and `argv[1]` is the script being run, with user parameters after that
+- 'electron': `argv[1]` varies depending on whether the electron application is packaged
+- 'user': all of the arguments from the user
+
+For example:
+
+```js
+program.parse(process.argv); // Explicit, node conventions
+program.parse(); // Implicit, and auto-detect electron
+program.parse(['-f', 'filename'], { from: 'user' });
+```
+
+### Parsing Configuration
+
+If the default parsing does not suit your needs, there are some behaviours to support other usage patterns.
+
+By default program options are recognised before and after subcommands. To only look for program options before subcommands, use `.enablePositionalOptions()`. This lets you use
+an option for a different purpose in subcommands.
+
+Example file: [positional-options.js](./examples/positional-options.js)
+
+With positional options, the `-b` is a program option in the first line and a subcommand option in the second line:
+
+```sh
+program -b subcommand
+program subcommand -b
+```
+
+By default options are recognised before and after command-arguments. To only process options that come
+before the command-arguments, use `.passThroughOptions()`. This lets you pass the arguments and following options through to another program
+without needing to use `--` to end the option processing.
+To use pass through options in a subcommand, the program needs to enable positional options.
+
+Example file: [pass-through-options.js](./examples/pass-through-options.js)
+
+With pass through options, the `--port=80` is a program option in the first line and passed through as a command-argument in the second line:
+
+```sh
+program --port=80 arg
+program arg --port=80
+```
+
+By default the option processing shows an error for an unknown option. To have an unknown option treated as an ordinary command-argument and continue looking for options, use `.allowUnknownOption()`. This lets you mix known and unknown options.
+
+By default the argument processing does not display an error for more command-arguments than expected.
+To display an error for excess arguments, use`.allowExcessArguments(false)`.
+
+### Legacy options as properties
+
+Before Commander 7, the option values were stored as properties on the command.
+This was convenient to code but the downside was possible clashes with
+existing properties of `Command`. You can revert to the old behaviour to run unmodified legacy code by using `.storeOptionsAsProperties()`.
+
+```js
+program
+ .storeOptionsAsProperties()
+ .option('-d, --debug')
+ .action((commandAndOptions) => {
+ if (commandAndOptions.debug) {
+ console.error(`Called ${commandAndOptions.name()}`);
+ }
+ });
+```
+
+### TypeScript
+
+If you use `ts-node` and stand-alone executable subcommands written as `.ts` files, you need to call your program through node to get the subcommands called correctly. e.g.
+
+```bash
+node -r ts-node/register pm.ts
+```
+
+### createCommand()
+
+This factory function creates a new command. It is exported and may be used instead of using `new`, like:
+
+```js
+const { createCommand } = require('commander');
+const program = createCommand();
+```
+
+`createCommand` is also a method of the Command object, and creates a new command rather than a subcommand. This gets used internally
+when creating subcommands using `.command()`, and you may override it to
+customise the new subcommand (example file [custom-command-class.js](./examples/custom-command-class.js)).
+
+### Node options such as `--harmony`
+
+You can enable `--harmony` option in two ways:
+
+- Use `#! /usr/bin/env node --harmony` in the subcommands scripts. (Note Windows does not support this pattern.)
+- Use the `--harmony` option when call the command, like `node --harmony examples/pm publish`. The `--harmony` option will be preserved when spawning subcommand process.
+
+### Debugging stand-alone executable subcommands
+
+An executable subcommand is launched as a separate child process.
+
+If you are using the node inspector for [debugging](https://nodejs.org/en/docs/guides/debugging-getting-started/) executable subcommands using `node --inspect` et al,
+the inspector port is incremented by 1 for the spawned subcommand.
+
+If you are using VSCode to debug executable subcommands you need to set the `"autoAttachChildProcesses": true` flag in your launch.json configuration.
+
+### Override exit and output handling
+
+By default Commander calls `process.exit` when it detects errors, or after displaying the help or version. You can override
+this behaviour and optionally supply a callback. The default override throws a `CommanderError`.
+
+The override callback is passed a `CommanderError` with properties `exitCode` number, `code` string, and `message`. The default override behaviour is to throw the error, except for async handling of executable subcommand completion which carries on. The normal display of error messages or version or help
+is not affected by the override which is called after the display.
+
+```js
+program.exitOverride();
+
+try {
+ program.parse(process.argv);
+} catch (err) {
+ // custom processing...
+}
+```
+
+By default Commander is configured for a command-line application and writes to stdout and stderr.
+You can modify this behaviour for custom applications. In addition, you can modify the display of error messages.
+
+Example file: [configure-output.js](./examples/configure-output.js)
+
+
+```js
+function errorColor(str) {
+ // Add ANSI escape codes to display text in red.
+ return `\x1b[31m${str}\x1b[0m`;
+}
+
+program
+ .configureOutput({
+ // Visibly override write routines as example!
+ writeOut: (str) => process.stdout.write(`[OUT] ${str}`),
+ writeErr: (str) => process.stdout.write(`[ERR] ${str}`),
+ // Highlight errors in color.
+ outputError: (str, write) => write(errorColor(str))
+ });
+```
+
+### Additional documentation
+
+There is more information available about:
+
+- [deprecated](./docs/deprecated.md) features still supported for backwards compatibility
+- [options taking varying arguments](./docs/options-taking-varying-arguments.md)
+
+## Examples
+
+In a single command program, you might not need an action handler.
+
+Example file: [pizza](./examples/pizza)
+
+```js
+const { program } = require('commander');
+
+program
+ .description('An application for pizza ordering')
+ .option('-p, --peppers', 'Add peppers')
+ .option('-c, --cheese <type>', 'Add the specified type of cheese', 'marble')
+ .option('-C, --no-cheese', 'You do not want any cheese');
+
+program.parse();
+
+const options = program.opts();
+console.log('you ordered a pizza with:');
+if (options.peppers) console.log(' - peppers');
+const cheese = !options.cheese ? 'no' : options.cheese;
+console.log(' - %s cheese', cheese);
+```
+
+In a multi-command program, you will have action handlers for each command (or stand-alone executables for the commands).
+
+Example file: [deploy](./examples/deploy)
+
+```js
+const { Command } = require('commander');
+const program = new Command();
+
+program
+ .version('0.0.1')
+ .option('-c, --config <path>', 'set config path', './deploy.conf');
+
+program
+ .command('setup [env]')
+ .description('run setup commands for all envs')
+ .option('-s, --setup_mode <mode>', 'Which setup mode to use', 'normal')
+ .action((env, options) => {
+ env = env || 'all';
+ console.log('read config from %s', program.opts().config);
+ console.log('setup for %s env(s) with %s mode', env, options.setup_mode);
+ });
+
+program
+ .command('exec <script>')
+ .alias('ex')
+ .description('execute the given remote cmd')
+ .option('-e, --exec_mode <mode>', 'Which exec mode to use', 'fast')
+ .action((script, options) => {
+ console.log('read config from %s', program.opts().config);
+ console.log('exec "%s" using %s mode and config %s', script, options.exec_mode, program.opts().config);
+ }).addHelpText('after', `
+Examples:
+ $ deploy exec sequential
+ $ deploy exec async`
+ );
+
+program.parse(process.argv);
+```
+
+More samples can be found in the [examples](https://github.com/tj/commander.js/tree/master/examples) directory.
+
+## Support
+
+The current version of Commander is fully supported on Long Term Support versions of node, and requires at least node v10.
+(For older versions of node, use an older version of Commander. Commander version 2.x has the widest support.)
+
+The main forum for free and community support is the project [Issues](https://github.com/tj/commander.js/issues) on GitHub.
+
+### Commander for enterprise
+
+Available as part of the Tidelift Subscription
+
+The maintainers of Commander and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-commander?utm_source=npm-commander&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)
diff --git a/node_modules/commander/esm.mjs b/node_modules/svgo/node_modules/commander/esm.mjs
index 60bf2521..60bf2521 100644
--- a/node_modules/commander/esm.mjs
+++ b/node_modules/svgo/node_modules/commander/esm.mjs
diff --git a/node_modules/svgo/node_modules/commander/index.js b/node_modules/svgo/node_modules/commander/index.js
new file mode 100644
index 00000000..985a8cfc
--- /dev/null
+++ b/node_modules/svgo/node_modules/commander/index.js
@@ -0,0 +1,2217 @@
+/**
+ * Module dependencies.
+ */
+
+const EventEmitter = require('events').EventEmitter;
+const childProcess = require('child_process');
+const path = require('path');
+const fs = require('fs');
+
+// @ts-check
+
+// Although this is a class, methods are static in style to allow override using subclass or just functions.
+class Help {
+ constructor() {
+ this.helpWidth = undefined;
+ this.sortSubcommands = false;
+ this.sortOptions = false;
+ }
+
+ /**
+ * Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one.
+ *
+ * @param {Command} cmd
+ * @returns {Command[]}
+ */
+
+ visibleCommands(cmd) {
+ const visibleCommands = cmd.commands.filter(cmd => !cmd._hidden);
+ if (cmd._hasImplicitHelpCommand()) {
+ // Create a command matching the implicit help command.
+ const args = cmd._helpCommandnameAndArgs.split(/ +/);
+ const helpCommand = cmd.createCommand(args.shift())
+ .helpOption(false);
+ helpCommand.description(cmd._helpCommandDescription);
+ helpCommand._parseExpectedArgs(args);
+ visibleCommands.push(helpCommand);
+ }
+ if (this.sortSubcommands) {
+ visibleCommands.sort((a, b) => {
+ return a.name().localeCompare(b.name());
+ });
+ }
+ return visibleCommands;
+ }
+
+ /**
+ * Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one.
+ *
+ * @param {Command} cmd
+ * @returns {Option[]}
+ */
+
+ visibleOptions(cmd) {
+ const visibleOptions = cmd.options.filter((option) => !option.hidden);
+ // Implicit help
+ const showShortHelpFlag = cmd._hasHelpOption && cmd._helpShortFlag && !cmd._findOption(cmd._helpShortFlag);
+ const showLongHelpFlag = cmd._hasHelpOption && !cmd._findOption(cmd._helpLongFlag);
+ if (showShortHelpFlag || showLongHelpFlag) {
+ let helpOption;
+ if (!showShortHelpFlag) {
+ helpOption = cmd.createOption(cmd._helpLongFlag, cmd._helpDescription);
+ } else if (!showLongHelpFlag) {
+ helpOption = cmd.createOption(cmd._helpShortFlag, cmd._helpDescription);
+ } else {
+ helpOption = cmd.createOption(cmd._helpFlags, cmd._helpDescription);
+ }
+ visibleOptions.push(helpOption);
+ }
+ if (this.sortOptions) {
+ const getSortKey = (option) => {
+ // WYSIWYG for order displayed in help with short before long, no special handling for negated.
+ return option.short ? option.short.replace(/^-/, '') : option.long.replace(/^--/, '');
+ };
+ visibleOptions.sort((a, b) => {
+ return getSortKey(a).localeCompare(getSortKey(b));
+ });
+ }
+ return visibleOptions;
+ }
+
+ /**
+ * Get an array of the arguments which have descriptions.
+ *
+ * @param {Command} cmd
+ * @returns {{ term: string, description:string }[]}
+ */
+
+ visibleArguments(cmd) {
+ if (cmd._argsDescription && cmd._args.length) {
+ return cmd._args.map((argument) => {
+ return { term: argument.name, description: cmd._argsDescription[argument.name] || '' };
+ }, 0);
+ }
+ return [];
+ }
+
+ /**
+ * Get the command term to show in the list of subcommands.
+ *
+ * @param {Command} cmd
+ * @returns {string}
+ */
+
+ subcommandTerm(cmd) {
+ // Legacy. Ignores custom usage string, and nested commands.
+ const args = cmd._args.map(arg => humanReadableArgName(arg)).join(' ');
+ return cmd._name +
+ (cmd._aliases[0] ? '|' + cmd._aliases[0] : '') +
+ (cmd.options.length ? ' [options]' : '') + // simplistic check for non-help option
+ (args ? ' ' + args : '');
+ }
+
+ /**
+ * Get the option term to show in the list of options.
+ *
+ * @param {Option} option
+ * @returns {string}
+ */
+
+ optionTerm(option) {
+ return option.flags;
+ }
+
+ /**
+ * Get the longest command term length.
+ *
+ * @param {Command} cmd
+ * @param {Help} helper
+ * @returns {number}
+ */
+
+ longestSubcommandTermLength(cmd, helper) {
+ return helper.visibleCommands(cmd).reduce((max, command) => {
+ return Math.max(max, helper.subcommandTerm(command).length);
+ }, 0);
+ };
+
+ /**
+ * Get the longest option term length.
+ *
+ * @param {Command} cmd
+ * @param {Help} helper
+ * @returns {number}
+ */
+
+ longestOptionTermLength(cmd, helper) {
+ return helper.visibleOptions(cmd).reduce((max, option) => {
+ return Math.max(max, helper.optionTerm(option).length);
+ }, 0);
+ };
+
+ /**
+ * Get the longest argument term length.
+ *
+ * @param {Command} cmd
+ * @param {Help} helper
+ * @returns {number}
+ */
+
+ longestArgumentTermLength(cmd, helper) {
+ return helper.visibleArguments(cmd).reduce((max, argument) => {
+ return Math.max(max, argument.term.length);
+ }, 0);
+ };
+
+ /**
+ * Get the command usage to be displayed at the top of the built-in help.
+ *
+ * @param {Command} cmd
+ * @returns {string}
+ */
+
+ commandUsage(cmd) {
+ // Usage
+ let cmdName = cmd._name;
+ if (cmd._aliases[0]) {
+ cmdName = cmdName + '|' + cmd._aliases[0];
+ }
+ let parentCmdNames = '';
+ for (let parentCmd = cmd.parent; parentCmd; parentCmd = parentCmd.parent) {
+ parentCmdNames = parentCmd.name() + ' ' + parentCmdNames;
+ }
+ return parentCmdNames + cmdName + ' ' + cmd.usage();
+ }
+
+ /**
+ * Get the description for the command.
+ *
+ * @param {Command} cmd
+ * @returns {string}
+ */
+
+ commandDescription(cmd) {
+ // @ts-ignore: overloaded return type
+ return cmd.description();
+ }
+
+ /**
+ * Get the command description to show in the list of subcommands.
+ *
+ * @param {Command} cmd
+ * @returns {string}
+ */
+
+ subcommandDescription(cmd) {
+ // @ts-ignore: overloaded return type
+ return cmd.description();
+ }
+
+ /**
+ * Get the option description to show in the list of options.
+ *
+ * @param {Option} option
+ * @return {string}
+ */
+
+ optionDescription(option) {
+ if (option.negate) {
+ return option.description;
+ }
+ const extraInfo = [];
+ if (option.argChoices) {
+ extraInfo.push(
+ // use stringify to match the display of the default value
+ `choices: ${option.argChoices.map((choice) => JSON.stringify(choice)).join(', ')}`);
+ }
+ if (option.defaultValue !== undefined) {
+ extraInfo.push(`default: ${option.defaultValueDescription || JSON.stringify(option.defaultValue)}`);
+ }
+ if (extraInfo.length > 0) {
+ return `${option.description} (${extraInfo.join(', ')})`;
+ }
+ return option.description;
+ };
+
+ /**
+ * Generate the built-in help text.
+ *
+ * @param {Command} cmd
+ * @param {Help} helper
+ * @returns {string}
+ */
+
+ formatHelp(cmd, helper) {
+ const termWidth = helper.padWidth(cmd, helper);
+ const helpWidth = helper.helpWidth || 80;
+ const itemIndentWidth = 2;
+ const itemSeparatorWidth = 2; // between term and description
+ function formatItem(term, description) {
+ if (description) {
+ const fullText = `${term.padEnd(termWidth + itemSeparatorWidth)}${description}`;
+ return helper.wrap(fullText, helpWidth - itemIndentWidth, termWidth + itemSeparatorWidth);
+ }
+ return term;
+ };
+ function formatList(textArray) {
+ return textArray.join('\n').replace(/^/gm, ' '.repeat(itemIndentWidth));
+ }
+
+ // Usage
+ let output = [`Usage: ${helper.commandUsage(cmd)}`, ''];
+
+ // Description
+ const commandDescription = helper.commandDescription(cmd);
+ if (commandDescription.length > 0) {
+ output = output.concat([commandDescription, '']);
+ }
+
+ // Arguments
+ const argumentList = helper.visibleArguments(cmd).map((argument) => {
+ return formatItem(argument.term, argument.description);
+ });
+ if (argumentList.length > 0) {
+ output = output.concat(['Arguments:', formatList(argumentList), '']);
+ }
+
+ // Options
+ const optionList = helper.visibleOptions(cmd).map((option) => {
+ return formatItem(helper.optionTerm(option), helper.optionDescription(option));
+ });
+ if (optionList.length > 0) {
+ output = output.concat(['Options:', formatList(optionList), '']);
+ }
+
+ // Commands
+ const commandList = helper.visibleCommands(cmd).map((cmd) => {
+ return formatItem(helper.subcommandTerm(cmd), helper.subcommandDescription(cmd));
+ });
+ if (commandList.length > 0) {
+ output = output.concat(['Commands:', formatList(commandList), '']);
+ }
+
+ return output.join('\n');
+ }
+
+ /**
+ * Calculate the pad width from the maximum term length.
+ *
+ * @param {Command} cmd
+ * @param {Help} helper
+ * @returns {number}
+ */
+
+ padWidth(cmd, helper) {
+ return Math.max(
+ helper.longestOptionTermLength(cmd, helper),
+ helper.longestSubcommandTermLength(cmd, helper),
+ helper.longestArgumentTermLength(cmd, helper)
+ );
+ };
+
+ /**
+ * Wrap the given string to width characters per line, with lines after the first indented.
+ * Do not wrap if insufficient room for wrapping (minColumnWidth), or string is manually formatted.
+ *
+ * @param {string} str
+ * @param {number} width
+ * @param {number} indent
+ * @param {number} [minColumnWidth=40]
+ * @return {string}
+ *
+ */
+
+ wrap(str, width, indent, minColumnWidth = 40) {
+ // Detect manually wrapped and indented strings by searching for line breaks
+ // followed by multiple spaces/tabs.
+ if (str.match(/[\n]\s+/)) return str;
+ // Do not wrap if not enough room for a wrapped column of text (as could end up with a word per line).
+ const columnWidth = width - indent;
+ if (columnWidth < minColumnWidth) return str;
+
+ const leadingStr = str.substr(0, indent);
+ const columnText = str.substr(indent);
+
+ const indentString = ' '.repeat(indent);
+ const regex = new RegExp('.{1,' + (columnWidth - 1) + '}([\\s\u200B]|$)|[^\\s\u200B]+?([\\s\u200B]|$)', 'g');
+ const lines = columnText.match(regex) || [];
+ return leadingStr + lines.map((line, i) => {
+ if (line.slice(-1) === '\n') {
+ line = line.slice(0, line.length - 1);
+ }
+ return ((i > 0) ? indentString : '') + line.trimRight();
+ }).join('\n');
+ }
+}
+
+class Option {
+ /**
+ * Initialize a new `Option` with the given `flags` and `description`.
+ *
+ * @param {string} flags
+ * @param {string} [description]
+ */
+
+ constructor(flags, description) {
+ this.flags = flags;
+ this.description = description || '';
+
+ this.required = flags.includes('<'); // A value must be supplied when the option is specified.
+ this.optional = flags.includes('['); // A value is optional when the option is specified.
+ // variadic test ignores <value,...> et al which might be used to describe custom splitting of single argument
+ this.variadic = /\w\.\.\.[>\]]$/.test(flags); // The option can take multiple values.
+ this.mandatory = false; // The option must have a value after parsing, which usually means it must be specified on command line.
+ const optionFlags = _parseOptionFlags(flags);
+ this.short = optionFlags.shortFlag;
+ this.long = optionFlags.longFlag;
+ this.negate = false;
+ if (this.long) {
+ this.negate = this.long.startsWith('--no-');
+ }
+ this.defaultValue = undefined;
+ this.defaultValueDescription = undefined;
+ this.parseArg = undefined;
+ this.hidden = false;
+ this.argChoices = undefined;
+ }
+
+ /**
+ * Set the default value, and optionally supply the description to be displayed in the help.
+ *
+ * @param {any} value
+ * @param {string} [description]
+ * @return {Option}
+ */
+
+ default(value, description) {
+ this.defaultValue = value;
+ this.defaultValueDescription = description;
+ return this;
+ };
+
+ /**
+ * Set the custom handler for processing CLI option arguments into option values.
+ *
+ * @param {Function} [fn]
+ * @return {Option}
+ */
+
+ argParser(fn) {
+ this.parseArg = fn;
+ return this;
+ };
+
+ /**
+ * Whether the option is mandatory and must have a value after parsing.
+ *
+ * @param {boolean} [mandatory=true]
+ * @return {Option}
+ */
+
+ makeOptionMandatory(mandatory = true) {
+ this.mandatory = !!mandatory;
+ return this;
+ };
+
+ /**
+ * Hide option in help.
+ *
+ * @param {boolean} [hide=true]
+ * @return {Option}
+ */
+
+ hideHelp(hide = true) {
+ this.hidden = !!hide;
+ return this;
+ };
+
+ /**
+ * @api private
+ */
+
+ _concatValue(value, previous) {
+ if (previous === this.defaultValue || !Array.isArray(previous)) {
+ return [value];
+ }
+
+ return previous.concat(value);
+ }
+
+ /**
+ * Only allow option value to be one of choices.
+ *
+ * @param {string[]} values
+ * @return {Option}
+ */
+
+ choices(values) {
+ this.argChoices = values;
+ this.parseArg = (arg, previous) => {
+ if (!values.includes(arg)) {
+ throw new InvalidOptionArgumentError(`Allowed choices are ${values.join(', ')}.`);
+ }
+ if (this.variadic) {
+ return this._concatValue(arg, previous);
+ }
+ return arg;
+ };
+ return this;
+ };
+
+ /**
+ * Return option name.
+ *
+ * @return {string}
+ */
+
+ name() {
+ if (this.long) {
+ return this.long.replace(/^--/, '');
+ }
+ return this.short.replace(/^-/, '');
+ };
+
+ /**
+ * Return option name, in a camelcase format that can be used
+ * as a object attribute key.
+ *
+ * @return {string}
+ * @api private
+ */
+
+ attributeName() {
+ return camelcase(this.name().replace(/^no-/, ''));
+ };
+
+ /**
+ * Check if `arg` matches the short or long flag.
+ *
+ * @param {string} arg
+ * @return {boolean}
+ * @api private
+ */
+
+ is(arg) {
+ return this.short === arg || this.long === arg;
+ };
+}
+
+/**
+ * CommanderError class
+ * @class
+ */
+class CommanderError extends Error {
+ /**
+ * Constructs the CommanderError class
+ * @param {number} exitCode suggested exit code which could be used with process.exit
+ * @param {string} code an id string representing the error
+ * @param {string} message human-readable description of the error
+ * @constructor
+ */
+ constructor(exitCode, code, message) {
+ super(message);
+ // properly capture stack trace in Node.js
+ Error.captureStackTrace(this, this.constructor);
+ this.name = this.constructor.name;
+ this.code = code;
+ this.exitCode = exitCode;
+ this.nestedError = undefined;
+ }
+}
+
+/**
+ * InvalidOptionArgumentError class
+ * @class
+ */
+class InvalidOptionArgumentError extends CommanderError {
+ /**
+ * Constructs the InvalidOptionArgumentError class
+ * @param {string} [message] explanation of why argument is invalid
+ * @constructor
+ */
+ constructor(message) {
+ super(1, 'commander.invalidOptionArgument', message);
+ // properly capture stack trace in Node.js
+ Error.captureStackTrace(this, this.constructor);
+ this.name = this.constructor.name;
+ }
+}
+
+class Command extends EventEmitter {
+ /**
+ * Initialize a new `Command`.
+ *
+ * @param {string} [name]
+ */
+
+ constructor(name) {
+ super();
+ this.commands = [];
+ this.options = [];
+ this.parent = null;
+ this._allowUnknownOption = false;
+ this._allowExcessArguments = true;
+ this._args = [];
+ this.rawArgs = null;
+ this._scriptPath = null;
+ this._name = name || '';
+ this._optionValues = {};
+ this._storeOptionsAsProperties = false;
+ this._actionResults = [];
+ this._actionHandler = null;
+ this._executableHandler = false;
+ this._executableFile = null; // custom name for executable
+ this._defaultCommandName = null;
+ this._exitCallback = null;
+ this._aliases = [];
+ this._combineFlagAndOptionalValue = true;
+ this._description = '';
+ this._argsDescription = undefined;
+ this._enablePositionalOptions = false;
+ this._passThroughOptions = false;
+
+ // see .configureOutput() for docs
+ this._outputConfiguration = {
+ writeOut: (str) => process.stdout.write(str),
+ writeErr: (str) => process.stderr.write(str),
+ getOutHelpWidth: () => process.stdout.isTTY ? process.stdout.columns : undefined,
+ getErrHelpWidth: () => process.stderr.isTTY ? process.stderr.columns : undefined,
+ outputError: (str, write) => write(str)
+ };
+
+ this._hidden = false;
+ this._hasHelpOption = true;
+ this._helpFlags = '-h, --help';
+ this._helpDescription = 'display help for command';
+ this._helpShortFlag = '-h';
+ this._helpLongFlag = '--help';
+ this._addImplicitHelpCommand = undefined; // Deliberately undefined, not decided whether true or false
+ this._helpCommandName = 'help';
+ this._helpCommandnameAndArgs = 'help [command]';
+ this._helpCommandDescription = 'display help for command';
+ this._helpConfiguration = {};
+ }
+
+ /**
+ * Define a command.
+ *
+ * There are two styles of command: pay attention to where to put the description.
+ *
+ * Examples:
+ *
+ * // Command implemented using action handler (description is supplied separately to `.command`)
+ * program
+ * .command('clone <source> [destination]')
+ * .description('clone a repository into a newly created directory')
+ * .action((source, destination) => {
+ * console.log('clone command called');
+ * });
+ *
+ * // Command implemented using separate executable file (description is second parameter to `.command`)
+ * program
+ * .command('start <service>', 'start named service')
+ * .command('stop [service]', 'stop named service, or all if no name supplied');
+ *
+ * @param {string} nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`
+ * @param {Object|string} [actionOptsOrExecDesc] - configuration options (for action), or description (for executable)
+ * @param {Object} [execOpts] - configuration options (for executable)
+ * @return {Command} returns new command for action handler, or `this` for executable command
+ */
+
+ command(nameAndArgs, actionOptsOrExecDesc, execOpts) {
+ let desc = actionOptsOrExecDesc;
+ let opts = execOpts;
+ if (typeof desc === 'object' && desc !== null) {
+ opts = desc;
+ desc = null;
+ }
+ opts = opts || {};
+ const args = nameAndArgs.split(/ +/);
+ const cmd = this.createCommand(args.shift());
+
+ if (desc) {
+ cmd.description(desc);
+ cmd._executableHandler = true;
+ }
+ if (opts.isDefault) this._defaultCommandName = cmd._name;
+
+ cmd._outputConfiguration = this._outputConfiguration;
+
+ cmd._hidden = !!(opts.noHelp || opts.hidden); // noHelp is deprecated old name for hidden
+ cmd._hasHelpOption = this._hasHelpOption;
+ cmd._helpFlags = this._helpFlags;
+ cmd._helpDescription = this._helpDescription;
+ cmd._helpShortFlag = this._helpShortFlag;
+ cmd._helpLongFlag = this._helpLongFlag;
+ cmd._helpCommandName = this._helpCommandName;
+ cmd._helpCommandnameAndArgs = this._helpCommandnameAndArgs;
+ cmd._helpCommandDescription = this._helpCommandDescription;
+ cmd._helpConfiguration = this._helpConfiguration;
+ cmd._exitCallback = this._exitCallback;
+ cmd._storeOptionsAsProperties = this._storeOptionsAsProperties;
+ cmd._combineFlagAndOptionalValue = this._combineFlagAndOptionalValue;
+ cmd._allowExcessArguments = this._allowExcessArguments;
+ cmd._enablePositionalOptions = this._enablePositionalOptions;
+
+ cmd._executableFile = opts.executableFile || null; // Custom name for executable file, set missing to null to match constructor
+ this.commands.push(cmd);
+ cmd._parseExpectedArgs(args);
+ cmd.parent = this;
+
+ if (desc) return this;
+ return cmd;
+ };
+
+ /**
+ * Factory routine to create a new unattached command.
+ *
+ * See .command() for creating an attached subcommand, which uses this routine to
+ * create the command. You can override createCommand to customise subcommands.
+ *
+ * @param {string} [name]
+ * @return {Command} new command
+ */
+
+ createCommand(name) {
+ return new Command(name);
+ };
+
+ /**
+ * You can customise the help with a subclass of Help by overriding createHelp,
+ * or by overriding Help properties using configureHelp().
+ *
+ * @return {Help}
+ */
+
+ createHelp() {
+ return Object.assign(new Help(), this.configureHelp());
+ };
+
+ /**
+ * You can customise the help by overriding Help properties using configureHelp(),
+ * or with a subclass of Help by overriding createHelp().
+ *
+ * @param {Object} [configuration] - configuration options
+ * @return {Command|Object} `this` command for chaining, or stored configuration
+ */
+
+ configureHelp(configuration) {
+ if (configuration === undefined) return this._helpConfiguration;
+
+ this._helpConfiguration = configuration;
+ return this;
+ }
+
+ /**
+ * The default output goes to stdout and stderr. You can customise this for special
+ * applications. You can also customise the display of errors by overriding outputError.
+ *
+ * The configuration properties are all functions:
+ *
+ * // functions to change where being written, stdout and stderr
+ * writeOut(str)
+ * writeErr(str)
+ * // matching functions to specify width for wrapping help
+ * getOutHelpWidth()
+ * getErrHelpWidth()
+ * // functions based on what is being written out
+ * outputError(str, write) // used for displaying errors, and not used for displaying help
+ *
+ * @param {Object} [configuration] - configuration options
+ * @return {Command|Object} `this` command for chaining, or stored configuration
+ */
+
+ configureOutput(configuration) {
+ if (configuration === undefined) return this._outputConfiguration;
+
+ Object.assign(this._outputConfiguration, configuration);
+ return this;
+ }
+
+ /**
+ * Add a prepared subcommand.
+ *
+ * See .command() for creating an attached subcommand which inherits settings from its parent.
+ *
+ * @param {Command} cmd - new subcommand
+ * @param {Object} [opts] - configuration options
+ * @return {Command} `this` command for chaining
+ */
+
+ addCommand(cmd, opts) {
+ if (!cmd._name) throw new Error('Command passed to .addCommand() must have a name');
+
+ // To keep things simple, block automatic name generation for deeply nested executables.
+ // Fail fast and detect when adding rather than later when parsing.
+ function checkExplicitNames(commandArray) {
+ commandArray.forEach((cmd) => {
+ if (cmd._executableHandler && !cmd._executableFile) {
+ throw new Error(`Must specify executableFile for deeply nested executable: ${cmd.name()}`);
+ }
+ checkExplicitNames(cmd.commands);
+ });
+ }
+ checkExplicitNames(cmd.commands);
+
+ opts = opts || {};
+ if (opts.isDefault) this._defaultCommandName = cmd._name;
+ if (opts.noHelp || opts.hidden) cmd._hidden = true; // modifying passed command due to existing implementation
+
+ this.commands.push(cmd);
+ cmd.parent = this;
+ return this;
+ };
+
+ /**
+ * Define argument syntax for the command.
+ */
+
+ arguments(desc) {
+ return this._parseExpectedArgs(desc.split(/ +/));
+ };
+
+ /**
+ * Override default decision whether to add implicit help command.
+ *
+ * addHelpCommand() // force on
+ * addHelpCommand(false); // force off
+ * addHelpCommand('help [cmd]', 'display help for [cmd]'); // force on with custom details
+ *
+ * @return {Command} `this` command for chaining
+ */
+
+ addHelpCommand(enableOrNameAndArgs, description) {
+ if (enableOrNameAndArgs === false) {
+ this._addImplicitHelpCommand = false;
+ } else {
+ this._addImplicitHelpCommand = true;
+ if (typeof enableOrNameAndArgs === 'string') {
+ this._helpCommandName = enableOrNameAndArgs.split(' ')[0];
+ this._helpCommandnameAndArgs = enableOrNameAndArgs;
+ }
+ this._helpCommandDescription = description || this._helpCommandDescription;
+ }
+ return this;
+ };
+
+ /**
+ * @return {boolean}
+ * @api private
+ */
+
+ _hasImplicitHelpCommand() {
+ if (this._addImplicitHelpCommand === undefined) {
+ return this.commands.length && !this._actionHandler && !this._findCommand('help');
+ }
+ return this._addImplicitHelpCommand;
+ };
+
+ /**
+ * Parse expected `args`.
+ *
+ * For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`.
+ *
+ * @param {Array} args
+ * @return {Command} `this` command for chaining
+ * @api private
+ */
+
+ _parseExpectedArgs(args) {
+ if (!args.length) return;
+ args.forEach((arg) => {
+ const argDetails = {
+ required: false,
+ name: '',
+ variadic: false
+ };
+
+ switch (arg[0]) {
+ case '<':
+ argDetails.required = true;
+ argDetails.name = arg.slice(1, -1);
+ break;
+ case '[':
+ argDetails.name = arg.slice(1, -1);
+ break;
+ }
+
+ if (argDetails.name.length > 3 && argDetails.name.slice(-3) === '...') {
+ argDetails.variadic = true;
+ argDetails.name = argDetails.name.slice(0, -3);
+ }
+ if (argDetails.name) {
+ this._args.push(argDetails);
+ }
+ });
+ this._args.forEach((arg, i) => {
+ if (arg.variadic && i < this._args.length - 1) {
+ throw new Error(`only the last argument can be variadic '${arg.name}'`);
+ }
+ });
+ return this;
+ };
+
+ /**
+ * Register callback to use as replacement for calling process.exit.
+ *
+ * @param {Function} [fn] optional callback which will be passed a CommanderError, defaults to throwing
+ * @return {Command} `this` command for chaining
+ */
+
+ exitOverride(fn) {
+ if (fn) {
+ this._exitCallback = fn;
+ } else {
+ this._exitCallback = (err) => {
+ if (err.code !== 'commander.executeSubCommandAsync') {
+ throw err;
+ } else {
+ // Async callback from spawn events, not useful to throw.
+ }
+ };
+ }
+ return this;
+ };
+
+ /**
+ * Call process.exit, and _exitCallback if defined.
+ *
+ * @param {number} exitCode exit code for using with process.exit
+ * @param {string} code an id string representing the error
+ * @param {string} message human-readable description of the error
+ * @return never
+ * @api private
+ */
+
+ _exit(exitCode, code, message) {
+ if (this._exitCallback) {
+ this._exitCallback(new CommanderError(exitCode, code, message));
+ // Expecting this line is not reached.
+ }
+ process.exit(exitCode);
+ };
+
+ /**
+ * Register callback `fn` for the command.
+ *
+ * Examples:
+ *
+ * program
+ * .command('help')
+ * .description('display verbose help')
+ * .action(function() {
+ * // output help here
+ * });
+ *
+ * @param {Function} fn
+ * @return {Command} `this` command for chaining
+ */
+
+ action(fn) {
+ const listener = (args) => {
+ // The .action callback takes an extra parameter which is the command or options.
+ const expectedArgsCount = this._args.length;
+ const actionArgs = args.slice(0, expectedArgsCount);
+ if (this._storeOptionsAsProperties) {
+ actionArgs[expectedArgsCount] = this; // backwards compatible "options"
+ } else {
+ actionArgs[expectedArgsCount] = this.opts();
+ }
+ actionArgs.push(this);
+
+ const actionResult = fn.apply(this, actionArgs);
+ // Remember result in case it is async. Assume parseAsync getting called on root.
+ let rootCommand = this;
+ while (rootCommand.parent) {
+ rootCommand = rootCommand.parent;
+ }
+ rootCommand._actionResults.push(actionResult);
+ };
+ this._actionHandler = listener;
+ return this;
+ };
+
+ /**
+ * Factory routine to create a new unattached option.
+ *
+ * See .option() for creating an attached option, which uses this routine to
+ * create the option. You can override createOption to return a custom option.
+ *
+ * @param {string} flags
+ * @param {string} [description]
+ * @return {Option} new option
+ */
+
+ createOption(flags, description) {
+ return new Option(flags, description);
+ };
+
+ /**
+ * Add an option.
+ *
+ * @param {Option} option
+ * @return {Command} `this` command for chaining
+ */
+ addOption(option) {
+ const oname = option.name();
+ const name = option.attributeName();
+
+ let defaultValue = option.defaultValue;
+
+ // preassign default value for --no-*, [optional], <required>, or plain flag if boolean value
+ if (option.negate || option.optional || option.required || typeof defaultValue === 'boolean') {
+ // when --no-foo we make sure default is true, unless a --foo option is already defined
+ if (option.negate) {
+ const positiveLongFlag = option.long.replace(/^--no-/, '--');
+ defaultValue = this._findOption(positiveLongFlag) ? this._getOptionValue(name) : true;
+ }
+ // preassign only if we have a default
+ if (defaultValue !== undefined) {
+ this._setOptionValue(name, defaultValue);
+ }
+ }
+
+ // register the option
+ this.options.push(option);
+
+ // when it's passed assign the value
+ // and conditionally invoke the callback
+ this.on('option:' + oname, (val) => {
+ const oldValue = this._getOptionValue(name);
+
+ // custom processing
+ if (val !== null && option.parseArg) {
+ try {
+ val = option.parseArg(val, oldValue === undefined ? defaultValue : oldValue);
+ } catch (err) {
+ if (err.code === 'commander.invalidOptionArgument') {
+ const message = `error: option '${option.flags}' argument '${val}' is invalid. ${err.message}`;
+ this._displayError(err.exitCode, err.code, message);
+ }
+ throw err;
+ }
+ } else if (val !== null && option.variadic) {
+ val = option._concatValue(val, oldValue);
+ }
+
+ // unassigned or boolean value
+ if (typeof oldValue === 'boolean' || typeof oldValue === 'undefined') {
+ // if no value, negate false, and we have a default, then use it!
+ if (val == null) {
+ this._setOptionValue(name, option.negate
+ ? false
+ : defaultValue || true);
+ } else {
+ this._setOptionValue(name, val);
+ }
+ } else if (val !== null) {
+ // reassign
+ this._setOptionValue(name, option.negate ? false : val);
+ }
+ });
+
+ return this;
+ }
+
+ /**
+ * Internal implementation shared by .option() and .requiredOption()
+ *
+ * @api private
+ */
+ _optionEx(config, flags, description, fn, defaultValue) {
+ const option = this.createOption(flags, description);
+ option.makeOptionMandatory(!!config.mandatory);
+ if (typeof fn === 'function') {
+ option.default(defaultValue).argParser(fn);
+ } else if (fn instanceof RegExp) {
+ // deprecated
+ const regex = fn;
+ fn = (val, def) => {
+ const m = regex.exec(val);
+ return m ? m[0] : def;
+ };
+ option.default(defaultValue).argParser(fn);
+ } else {
+ option.default(fn);
+ }
+
+ return this.addOption(option);
+ }
+
+ /**
+ * Define option with `flags`, `description` and optional
+ * coercion `fn`.
+ *
+ * The `flags` string contains the short and/or long flags,
+ * separated by comma, a pipe or space. The following are all valid
+ * all will output this way when `--help` is used.
+ *
+ * "-p, --pepper"
+ * "-p|--pepper"
+ * "-p --pepper"
+ *
+ * Examples:
+ *
+ * // simple boolean defaulting to undefined
+ * program.option('-p, --pepper', 'add pepper');
+ *
+ * program.pepper
+ * // => undefined
+ *
+ * --pepper
+ * program.pepper
+ * // => true
+ *
+ * // simple boolean defaulting to true (unless non-negated option is also defined)
+ * program.option('-C, --no-cheese', 'remove cheese');
+ *
+ * program.cheese
+ * // => true
+ *
+ * --no-cheese
+ * program.cheese
+ * // => false
+ *
+ * // required argument
+ * program.option('-C, --chdir <path>', 'change the working directory');
+ *
+ * --chdir /tmp
+ * program.chdir
+ * // => "/tmp"
+ *
+ * // optional argument
+ * program.option('-c, --cheese [type]', 'add cheese [marble]');
+ *
+ * @param {string} flags
+ * @param {string} [description]
+ * @param {Function|*} [fn] - custom option processing function or default value
+ * @param {*} [defaultValue]
+ * @return {Command} `this` command for chaining
+ */
+
+ option(flags, description, fn, defaultValue) {
+ return this._optionEx({}, flags, description, fn, defaultValue);
+ };
+
+ /**
+ * Add a required option which must have a value after parsing. This usually means
+ * the option must be specified on the command line. (Otherwise the same as .option().)
+ *
+ * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space.
+ *
+ * @param {string} flags
+ * @param {string} [description]
+ * @param {Function|*} [fn] - custom option processing function or default value
+ * @param {*} [defaultValue]
+ * @return {Command} `this` command for chaining
+ */
+
+ requiredOption(flags, description, fn, defaultValue) {
+ return this._optionEx({ mandatory: true }, flags, description, fn, defaultValue);
+ };
+
+ /**
+ * Alter parsing of short flags with optional values.
+ *
+ * Examples:
+ *
+ * // for `.option('-f,--flag [value]'):
+ * .combineFlagAndOptionalValue(true) // `-f80` is treated like `--flag=80`, this is the default behaviour
+ * .combineFlagAndOptionalValue(false) // `-fb` is treated like `-f -b`
+ *
+ * @param {Boolean} [combine=true] - if `true` or omitted, an optional value can be specified directly after the flag.
+ */
+ combineFlagAndOptionalValue(combine = true) {
+ this._combineFlagAndOptionalValue = !!combine;
+ return this;
+ };
+
+ /**
+ * Allow unknown options on the command line.
+ *
+ * @param {Boolean} [allowUnknown=true] - if `true` or omitted, no error will be thrown
+ * for unknown options.
+ */
+ allowUnknownOption(allowUnknown = true) {
+ this._allowUnknownOption = !!allowUnknown;
+ return this;
+ };
+
+ /**
+ * Allow excess command-arguments on the command line. Pass false to make excess arguments an error.
+ *
+ * @param {Boolean} [allowExcess=true] - if `true` or omitted, no error will be thrown
+ * for excess arguments.
+ */
+ allowExcessArguments(allowExcess = true) {
+ this._allowExcessArguments = !!allowExcess;
+ return this;
+ };
+
+ /**
+ * Enable positional options. Positional means global options are specified before subcommands which lets
+ * subcommands reuse the same option names, and also enables subcommands to turn on passThroughOptions.
+ * The default behaviour is non-positional and global options may appear anywhere on the command line.
+ *
+ * @param {Boolean} [positional=true]
+ */
+ enablePositionalOptions(positional = true) {
+ this._enablePositionalOptions = !!positional;
+ return this;
+ };
+
+ /**
+ * Pass through options that come after command-arguments rather than treat them as command-options,
+ * so actual command-options come before command-arguments. Turning this on for a subcommand requires
+ * positional options to have been enabled on the program (parent commands).
+ * The default behaviour is non-positional and options may appear before or after command-arguments.
+ *
+ * @param {Boolean} [passThrough=true]
+ * for unknown options.
+ */
+ passThroughOptions(passThrough = true) {
+ this._passThroughOptions = !!passThrough;
+ if (!!this.parent && passThrough && !this.parent._enablePositionalOptions) {
+ throw new Error('passThroughOptions can not be used without turning on enablePositionalOptions for parent command(s)');
+ }
+ return this;
+ };
+
+ /**
+ * Whether to store option values as properties on command object,
+ * or store separately (specify false). In both cases the option values can be accessed using .opts().
+ *
+ * @param {boolean} [storeAsProperties=true]
+ * @return {Command} `this` command for chaining
+ */
+
+ storeOptionsAsProperties(storeAsProperties = true) {
+ this._storeOptionsAsProperties = !!storeAsProperties;
+ if (this.options.length) {
+ throw new Error('call .storeOptionsAsProperties() before adding options');
+ }
+ return this;
+ };
+
+ /**
+ * Store option value
+ *
+ * @param {string} key
+ * @param {Object} value
+ * @api private
+ */
+
+ _setOptionValue(key, value) {
+ if (this._storeOptionsAsProperties) {
+ this[key] = value;
+ } else {
+ this._optionValues[key] = value;
+ }
+ };
+
+ /**
+ * Retrieve option value
+ *
+ * @param {string} key
+ * @return {Object} value
+ * @api private
+ */
+
+ _getOptionValue(key) {
+ if (this._storeOptionsAsProperties) {
+ return this[key];
+ }
+ return this._optionValues[key];
+ };
+
+ /**
+ * Parse `argv`, setting options and invoking commands when defined.
+ *
+ * The default expectation is that the arguments are from node and have the application as argv[0]
+ * and the script being run in argv[1], with user parameters after that.
+ *
+ * Examples:
+ *
+ * program.parse(process.argv);
+ * program.parse(); // implicitly use process.argv and auto-detect node vs electron conventions
+ * program.parse(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]
+ *
+ * @param {string[]} [argv] - optional, defaults to process.argv
+ * @param {Object} [parseOptions] - optionally specify style of options with from: node/user/electron
+ * @param {string} [parseOptions.from] - where the args are from: 'node', 'user', 'electron'
+ * @return {Command} `this` command for chaining
+ */
+
+ parse(argv, parseOptions) {
+ if (argv !== undefined && !Array.isArray(argv)) {
+ throw new Error('first parameter to parse must be array or undefined');
+ }
+ parseOptions = parseOptions || {};
+
+ // Default to using process.argv
+ if (argv === undefined) {
+ argv = process.argv;
+ // @ts-ignore: unknown property
+ if (process.versions && process.versions.electron) {
+ parseOptions.from = 'electron';
+ }
+ }
+ this.rawArgs = argv.slice();
+
+ // make it a little easier for callers by supporting various argv conventions
+ let userArgs;
+ switch (parseOptions.from) {
+ case undefined:
+ case 'node':
+ this._scriptPath = argv[1];
+ userArgs = argv.slice(2);
+ break;
+ case 'electron':
+ // @ts-ignore: unknown property
+ if (process.defaultApp) {
+ this._scriptPath = argv[1];
+ userArgs = argv.slice(2);
+ } else {
+ userArgs = argv.slice(1);
+ }
+ break;
+ case 'user':
+ userArgs = argv.slice(0);
+ break;
+ default:
+ throw new Error(`unexpected parse option { from: '${parseOptions.from}' }`);
+ }
+ if (!this._scriptPath && require.main) {
+ this._scriptPath = require.main.filename;
+ }
+
+ // Guess name, used in usage in help.
+ this._name = this._name || (this._scriptPath && path.basename(this._scriptPath, path.extname(this._scriptPath)));
+
+ // Let's go!
+ this._parseCommand([], userArgs);
+
+ return this;
+ };
+
+ /**
+ * Parse `argv`, setting options and invoking commands when defined.
+ *
+ * Use parseAsync instead of parse if any of your action handlers are async. Returns a Promise.
+ *
+ * The default expectation is that the arguments are from node and have the application as argv[0]
+ * and the script being run in argv[1], with user parameters after that.
+ *
+ * Examples:
+ *
+ * program.parseAsync(process.argv);
+ * program.parseAsync(); // implicitly use process.argv and auto-detect node vs electron conventions
+ * program.parseAsync(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]
+ *
+ * @param {string[]} [argv]
+ * @param {Object} [parseOptions]
+ * @param {string} parseOptions.from - where the args are from: 'node', 'user', 'electron'
+ * @return {Promise}
+ */
+
+ parseAsync(argv, parseOptions) {
+ this.parse(argv, parseOptions);
+ return Promise.all(this._actionResults).then(() => this);
+ };
+
+ /**
+ * Execute a sub-command executable.
+ *
+ * @api private
+ */
+
+ _executeSubCommand(subcommand, args) {
+ args = args.slice();
+ let launchWithNode = false; // Use node for source targets so do not need to get permissions correct, and on Windows.
+ const sourceExt = ['.js', '.ts', '.tsx', '.mjs', '.cjs'];
+
+ // Not checking for help first. Unlikely to have mandatory and executable, and can't robustly test for help flags in external command.
+ this._checkForMissingMandatoryOptions();
+
+ // Want the entry script as the reference for command name and directory for searching for other files.
+ let scriptPath = this._scriptPath;
+ // Fallback in case not set, due to how Command created or called.
+ if (!scriptPath && require.main) {
+ scriptPath = require.main.filename;
+ }
+
+ let baseDir;
+ try {
+ const resolvedLink = fs.realpathSync(scriptPath);
+ baseDir = path.dirname(resolvedLink);
+ } catch (e) {
+ baseDir = '.'; // dummy, probably not going to find executable!
+ }
+
+ // name of the subcommand, like `pm-install`
+ let bin = path.basename(scriptPath, path.extname(scriptPath)) + '-' + subcommand._name;
+ if (subcommand._executableFile) {
+ bin = subcommand._executableFile;
+ }
+
+ const localBin = path.join(baseDir, bin);
+ if (fs.existsSync(localBin)) {
+ // prefer local `./<bin>` to bin in the $PATH
+ bin = localBin;
+ } else {
+ // Look for source files.
+ sourceExt.forEach((ext) => {
+ if (fs.existsSync(`${localBin}${ext}`)) {
+ bin = `${localBin}${ext}`;
+ }
+ });
+ }
+ launchWithNode = sourceExt.includes(path.extname(bin));
+
+ let proc;
+ if (process.platform !== 'win32') {
+ if (launchWithNode) {
+ args.unshift(bin);
+ // add executable arguments to spawn
+ args = incrementNodeInspectorPort(process.execArgv).concat(args);
+
+ proc = childProcess.spawn(process.argv[0], args, { stdio: 'inherit' });
+ } else {
+ proc = childProcess.spawn(bin, args, { stdio: 'inherit' });
+ }
+ } else {
+ args.unshift(bin);
+ // add executable arguments to spawn
+ args = incrementNodeInspectorPort(process.execArgv).concat(args);
+ proc = childProcess.spawn(process.execPath, args, { stdio: 'inherit' });
+ }
+
+ const signals = ['SIGUSR1', 'SIGUSR2', 'SIGTERM', 'SIGINT', 'SIGHUP'];
+ signals.forEach((signal) => {
+ // @ts-ignore
+ process.on(signal, () => {
+ if (proc.killed === false && proc.exitCode === null) {
+ proc.kill(signal);
+ }
+ });
+ });
+
+ // By default terminate process when spawned process terminates.
+ // Suppressing the exit if exitCallback defined is a bit messy and of limited use, but does allow process to stay running!
+ const exitCallback = this._exitCallback;
+ if (!exitCallback) {
+ proc.on('close', process.exit.bind(process));
+ } else {
+ proc.on('close', () => {
+ exitCallback(new CommanderError(process.exitCode || 0, 'commander.executeSubCommandAsync', '(close)'));
+ });
+ }
+ proc.on('error', (err) => {
+ // @ts-ignore
+ if (err.code === 'ENOENT') {
+ const executableMissing = `'${bin}' does not exist
+ - if '${subcommand._name}' is not meant to be an executable command, remove description parameter from '.command()' and use '.description()' instead
+ - if the default executable name is not suitable, use the executableFile option to supply a custom name`;
+ throw new Error(executableMissing);
+ // @ts-ignore
+ } else if (err.code === 'EACCES') {
+ throw new Error(`'${bin}' not executable`);
+ }
+ if (!exitCallback) {
+ process.exit(1);
+ } else {
+ const wrappedError = new CommanderError(1, 'commander.executeSubCommandAsync', '(error)');
+ wrappedError.nestedError = err;
+ exitCallback(wrappedError);
+ }
+ });
+
+ // Store the reference to the child process
+ this.runningCommand = proc;
+ };
+
+ /**
+ * @api private
+ */
+ _dispatchSubcommand(commandName, operands, unknown) {
+ const subCommand = this._findCommand(commandName);
+ if (!subCommand) this.help({ error: true });
+
+ if (subCommand._executableHandler) {
+ this._executeSubCommand(subCommand, operands.concat(unknown));
+ } else {
+ subCommand._parseCommand(operands, unknown);
+ }
+ };
+
+ /**
+ * Process arguments in context of this command.
+ *
+ * @api private
+ */
+
+ _parseCommand(operands, unknown) {
+ const parsed = this.parseOptions(unknown);
+ operands = operands.concat(parsed.operands);
+ unknown = parsed.unknown;
+ this.args = operands.concat(unknown);
+
+ if (operands && this._findCommand(operands[0])) {
+ this._dispatchSubcommand(operands[0], operands.slice(1), unknown);
+ } else if (this._hasImplicitHelpCommand() && operands[0] === this._helpCommandName) {
+ if (operands.length === 1) {
+ this.help();
+ } else {
+ this._dispatchSubcommand(operands[1], [], [this._helpLongFlag]);
+ }
+ } else if (this._defaultCommandName) {
+ outputHelpIfRequested(this, unknown); // Run the help for default command from parent rather than passing to default command
+ this._dispatchSubcommand(this._defaultCommandName, operands, unknown);
+ } else {
+ if (this.commands.length && this.args.length === 0 && !this._actionHandler && !this._defaultCommandName) {
+ // probably missing subcommand and no handler, user needs help
+ this.help({ error: true });
+ }
+
+ outputHelpIfRequested(this, parsed.unknown);
+ this._checkForMissingMandatoryOptions();
+
+ // We do not always call this check to avoid masking a "better" error, like unknown command.
+ const checkForUnknownOptions = () => {
+ if (parsed.unknown.length > 0) {
+ this.unknownOption(parsed.unknown[0]);
+ }
+ };
+
+ const commandEvent = `command:${this.name()}`;
+ if (this._actionHandler) {
+ checkForUnknownOptions();
+ // Check expected arguments and collect variadic together.
+ const args = this.args.slice();
+ this._args.forEach((arg, i) => {
+ if (arg.required && args[i] == null) {
+ this.missingArgument(arg.name);
+ } else if (arg.variadic) {
+ args[i] = args.splice(i);
+ args.length = Math.min(i + 1, args.length);
+ }
+ });
+ if (args.length > this._args.length) {
+ this._excessArguments(args);
+ }
+
+ this._actionHandler(args);
+ if (this.parent) this.parent.emit(commandEvent, operands, unknown); // legacy
+ } else if (this.parent && this.parent.listenerCount(commandEvent)) {
+ checkForUnknownOptions();
+ this.parent.emit(commandEvent, operands, unknown); // legacy
+ } else if (operands.length) {
+ if (this._findCommand('*')) { // legacy default command
+ this._dispatchSubcommand('*', operands, unknown);
+ } else if (this.listenerCount('command:*')) {
+ // skip option check, emit event for possible misspelling suggestion
+ this.emit('command:*', operands, unknown);
+ } else if (this.commands.length) {
+ this.unknownCommand();
+ } else {
+ checkForUnknownOptions();
+ }
+ } else if (this.commands.length) {
+ // This command has subcommands and nothing hooked up at this level, so display help.
+ this.help({ error: true });
+ } else {
+ checkForUnknownOptions();
+ // fall through for caller to handle after calling .parse()
+ }
+ }
+ };
+
+ /**
+ * Find matching command.
+ *
+ * @api private
+ */
+ _findCommand(name) {
+ if (!name) return undefined;
+ return this.commands.find(cmd => cmd._name === name || cmd._aliases.includes(name));
+ };
+
+ /**
+ * Return an option matching `arg` if any.
+ *
+ * @param {string} arg
+ * @return {Option}
+ * @api private
+ */
+
+ _findOption(arg) {
+ return this.options.find(option => option.is(arg));
+ };
+
+ /**
+ * Display an error message if a mandatory option does not have a value.
+ * Lazy calling after checking for help flags from leaf subcommand.
+ *
+ * @api private
+ */
+
+ _checkForMissingMandatoryOptions() {
+ // Walk up hierarchy so can call in subcommand after checking for displaying help.
+ for (let cmd = this; cmd; cmd = cmd.parent) {
+ cmd.options.forEach((anOption) => {
+ if (anOption.mandatory && (cmd._getOptionValue(anOption.attributeName()) === undefined)) {
+ cmd.missingMandatoryOptionValue(anOption);
+ }
+ });
+ }
+ };
+
+ /**
+ * Parse options from `argv` removing known options,
+ * and return argv split into operands and unknown arguments.
+ *
+ * Examples:
+ *
+ * argv => operands, unknown
+ * --known kkk op => [op], []
+ * op --known kkk => [op], []
+ * sub --unknown uuu op => [sub], [--unknown uuu op]
+ * sub -- --unknown uuu op => [sub --unknown uuu op], []
+ *
+ * @param {String[]} argv
+ * @return {{operands: String[], unknown: String[]}}
+ */
+
+ parseOptions(argv) {
+ const operands = []; // operands, not options or values
+ const unknown = []; // first unknown option and remaining unknown args
+ let dest = operands;
+ const args = argv.slice();
+
+ function maybeOption(arg) {
+ return arg.length > 1 && arg[0] === '-';
+ }
+
+ // parse options
+ let activeVariadicOption = null;
+ while (args.length) {
+ const arg = args.shift();
+
+ // literal
+ if (arg === '--') {
+ if (dest === unknown) dest.push(arg);
+ dest.push(...args);
+ break;
+ }
+
+ if (activeVariadicOption && !maybeOption(arg)) {
+ this.emit(`option:${activeVariadicOption.name()}`, arg);
+ continue;
+ }
+ activeVariadicOption = null;
+
+ if (maybeOption(arg)) {
+ const option = this._findOption(arg);
+ // recognised option, call listener to assign value with possible custom processing
+ if (option) {
+ if (option.required) {
+ const value = args.shift();
+ if (value === undefined) this.optionMissingArgument(option);
+ this.emit(`option:${option.name()}`, value);
+ } else if (option.optional) {
+ let value = null;
+ // historical behaviour is optional value is following arg unless an option
+ if (args.length > 0 && !maybeOption(args[0])) {
+ value = args.shift();
+ }
+ this.emit(`option:${option.name()}`, value);
+ } else { // boolean flag
+ this.emit(`option:${option.name()}`);
+ }
+ activeVariadicOption = option.variadic ? option : null;
+ continue;
+ }
+ }
+
+ // Look for combo options following single dash, eat first one if known.
+ if (arg.length > 2 && arg[0] === '-' && arg[1] !== '-') {
+ const option = this._findOption(`-${arg[1]}`);
+ if (option) {
+ if (option.required || (option.optional && this._combineFlagAndOptionalValue)) {
+ // option with value following in same argument
+ this.emit(`option:${option.name()}`, arg.slice(2));
+ } else {
+ // boolean option, emit and put back remainder of arg for further processing
+ this.emit(`option:${option.name()}`);
+ args.unshift(`-${arg.slice(2)}`);
+ }
+ continue;
+ }
+ }
+
+ // Look for known long flag with value, like --foo=bar
+ if (/^--[^=]+=/.test(arg)) {
+ const index = arg.indexOf('=');
+ const option = this._findOption(arg.slice(0, index));
+ if (option && (option.required || option.optional)) {
+ this.emit(`option:${option.name()}`, arg.slice(index + 1));
+ continue;
+ }
+ }
+
+ // Not a recognised option by this command.
+ // Might be a command-argument, or subcommand option, or unknown option, or help command or option.
+
+ // An unknown option means further arguments also classified as unknown so can be reprocessed by subcommands.
+ if (maybeOption(arg)) {
+ dest = unknown;
+ }
+
+ // If using positionalOptions, stop processing our options at subcommand.
+ if ((this._enablePositionalOptions || this._passThroughOptions) && operands.length === 0 && unknown.length === 0) {
+ if (this._findCommand(arg)) {
+ operands.push(arg);
+ if (args.length > 0) unknown.push(...args);
+ break;
+ } else if (arg === this._helpCommandName && this._hasImplicitHelpCommand()) {
+ operands.push(arg);
+ if (args.length > 0) operands.push(...args);
+ break;
+ } else if (this._defaultCommandName) {
+ unknown.push(arg);
+ if (args.length > 0) unknown.push(...args);
+ break;
+ }
+ }
+
+ // If using passThroughOptions, stop processing options at first command-argument.
+ if (this._passThroughOptions) {
+ dest.push(arg);
+ if (args.length > 0) dest.push(...args);
+ break;
+ }
+
+ // add arg
+ dest.push(arg);
+ }
+
+ return { operands, unknown };
+ };
+
+ /**
+ * Return an object containing options as key-value pairs
+ *
+ * @return {Object}
+ */
+ opts() {
+ if (this._storeOptionsAsProperties) {
+ // Preserve original behaviour so backwards compatible when still using properties
+ const result = {};
+ const len = this.options.length;
+
+ for (let i = 0; i < len; i++) {
+ const key = this.options[i].attributeName();
+ result[key] = key === this._versionOptionName ? this._version : this[key];
+ }
+ return result;
+ }
+
+ return this._optionValues;
+ };
+
+ /**
+ * Internal bottleneck for handling of parsing errors.
+ *
+ * @api private
+ */
+ _displayError(exitCode, code, message) {
+ this._outputConfiguration.outputError(`${message}\n`, this._outputConfiguration.writeErr);
+ this._exit(exitCode, code, message);
+ }
+
+ /**
+ * Argument `name` is missing.
+ *
+ * @param {string} name
+ * @api private
+ */
+
+ missingArgument(name) {
+ const message = `error: missing required argument '${name}'`;
+ this._displayError(1, 'commander.missingArgument', message);
+ };
+
+ /**
+ * `Option` is missing an argument.
+ *
+ * @param {Option} option
+ * @api private
+ */
+
+ optionMissingArgument(option) {
+ const message = `error: option '${option.flags}' argument missing`;
+ this._displayError(1, 'commander.optionMissingArgument', message);
+ };
+
+ /**
+ * `Option` does not have a value, and is a mandatory option.
+ *
+ * @param {Option} option
+ * @api private
+ */
+
+ missingMandatoryOptionValue(option) {
+ const message = `error: required option '${option.flags}' not specified`;
+ this._displayError(1, 'commander.missingMandatoryOptionValue', message);
+ };
+
+ /**
+ * Unknown option `flag`.
+ *
+ * @param {string} flag
+ * @api private
+ */
+
+ unknownOption(flag) {
+ if (this._allowUnknownOption) return;
+ const message = `error: unknown option '${flag}'`;
+ this._displayError(1, 'commander.unknownOption', message);
+ };
+
+ /**
+ * Excess arguments, more than expected.
+ *
+ * @param {string[]} receivedArgs
+ * @api private
+ */
+
+ _excessArguments(receivedArgs) {
+ if (this._allowExcessArguments) return;
+
+ const expected = this._args.length;
+ const s = (expected === 1) ? '' : 's';
+ const forSubcommand = this.parent ? ` for '${this.name()}'` : '';
+ const message = `error: too many arguments${forSubcommand}. Expected ${expected} argument${s} but got ${receivedArgs.length}.`;
+ this._displayError(1, 'commander.excessArguments', message);
+ };
+
+ /**
+ * Unknown command.
+ *
+ * @api private
+ */
+
+ unknownCommand() {
+ const partCommands = [this.name()];
+ for (let parentCmd = this.parent; parentCmd; parentCmd = parentCmd.parent) {
+ partCommands.unshift(parentCmd.name());
+ }
+ const fullCommand = partCommands.join(' ');
+ const message = `error: unknown command '${this.args[0]}'.` +
+ (this._hasHelpOption ? ` See '${fullCommand} ${this._helpLongFlag}'.` : '');
+ this._displayError(1, 'commander.unknownCommand', message);
+ };
+
+ /**
+ * Set the program version to `str`.
+ *
+ * This method auto-registers the "-V, --version" flag
+ * which will print the version number when passed.
+ *
+ * You can optionally supply the flags and description to override the defaults.
+ *
+ * @param {string} str
+ * @param {string} [flags]
+ * @param {string} [description]
+ * @return {this | string} `this` command for chaining, or version string if no arguments
+ */
+
+ version(str, flags, description) {
+ if (str === undefined) return this._version;
+ this._version = str;
+ flags = flags || '-V, --version';
+ description = description || 'output the version number';
+ const versionOption = this.createOption(flags, description);
+ this._versionOptionName = versionOption.attributeName();
+ this.options.push(versionOption);
+ this.on('option:' + versionOption.name(), () => {
+ this._outputConfiguration.writeOut(`${str}\n`);
+ this._exit(0, 'commander.version', str);
+ });
+ return this;
+ };
+
+ /**
+ * Set the description to `str`.
+ *
+ * @param {string} [str]
+ * @param {Object} [argsDescription]
+ * @return {string|Command}
+ */
+ description(str, argsDescription) {
+ if (str === undefined && argsDescription === undefined) return this._description;
+ this._description = str;
+ this._argsDescription = argsDescription;
+ return this;
+ };
+
+ /**
+ * Set an alias for the command.
+ *
+ * You may call more than once to add multiple aliases. Only the first alias is shown in the auto-generated help.
+ *
+ * @param {string} [alias]
+ * @return {string|Command}
+ */
+
+ alias(alias) {
+ if (alias === undefined) return this._aliases[0]; // just return first, for backwards compatibility
+
+ let command = this;
+ if (this.commands.length !== 0 && this.commands[this.commands.length - 1]._executableHandler) {
+ // assume adding alias for last added executable subcommand, rather than this
+ command = this.commands[this.commands.length - 1];
+ }
+
+ if (alias === command._name) throw new Error('Command alias can\'t be the same as its name');
+
+ command._aliases.push(alias);
+ return this;
+ };
+
+ /**
+ * Set aliases for the command.
+ *
+ * Only the first alias is shown in the auto-generated help.
+ *
+ * @param {string[]} [aliases]
+ * @return {string[]|Command}
+ */
+
+ aliases(aliases) {
+ // Getter for the array of aliases is the main reason for having aliases() in addition to alias().
+ if (aliases === undefined) return this._aliases;
+
+ aliases.forEach((alias) => this.alias(alias));
+ return this;
+ };
+
+ /**
+ * Set / get the command usage `str`.
+ *
+ * @param {string} [str]
+ * @return {String|Command}
+ */
+
+ usage(str) {
+ if (str === undefined) {
+ if (this._usage) return this._usage;
+
+ const args = this._args.map((arg) => {
+ return humanReadableArgName(arg);
+ });
+ return [].concat(
+ (this.options.length || this._hasHelpOption ? '[options]' : []),
+ (this.commands.length ? '[command]' : []),
+ (this._args.length ? args : [])
+ ).join(' ');
+ }
+
+ this._usage = str;
+ return this;
+ };
+
+ /**
+ * Get or set the name of the command
+ *
+ * @param {string} [str]
+ * @return {string|Command}
+ */
+
+ name(str) {
+ if (str === undefined) return this._name;
+ this._name = str;
+ return this;
+ };
+
+ /**
+ * Return program help documentation.
+ *
+ * @param {{ error: boolean }} [contextOptions] - pass {error:true} to wrap for stderr instead of stdout
+ * @return {string}
+ */
+
+ helpInformation(contextOptions) {
+ const helper = this.createHelp();
+ if (helper.helpWidth === undefined) {
+ helper.helpWidth = (contextOptions && contextOptions.error) ? this._outputConfiguration.getErrHelpWidth() : this._outputConfiguration.getOutHelpWidth();
+ }
+ return helper.formatHelp(this, helper);
+ };
+
+ /**
+ * @api private
+ */
+
+ _getHelpContext(contextOptions) {
+ contextOptions = contextOptions || {};
+ const context = { error: !!contextOptions.error };
+ let write;
+ if (context.error) {
+ write = (arg) => this._outputConfiguration.writeErr(arg);
+ } else {
+ write = (arg) => this._outputConfiguration.writeOut(arg);
+ }
+ context.write = contextOptions.write || write;
+ context.command = this;
+ return context;
+ }
+
+ /**
+ * Output help information for this command.
+ *
+ * Outputs built-in help, and custom text added using `.addHelpText()`.
+ *
+ * @param {{ error: boolean } | Function} [contextOptions] - pass {error:true} to write to stderr instead of stdout
+ */
+
+ outputHelp(contextOptions) {
+ let deprecatedCallback;
+ if (typeof contextOptions === 'function') {
+ deprecatedCallback = contextOptions;
+ contextOptions = undefined;
+ }
+ const context = this._getHelpContext(contextOptions);
+
+ const groupListeners = [];
+ let command = this;
+ while (command) {
+ groupListeners.push(command); // ordered from current command to root
+ command = command.parent;
+ }
+
+ groupListeners.slice().reverse().forEach(command => command.emit('beforeAllHelp', context));
+ this.emit('beforeHelp', context);
+
+ let helpInformation = this.helpInformation(context);
+ if (deprecatedCallback) {
+ helpInformation = deprecatedCallback(helpInformation);
+ if (typeof helpInformation !== 'string' && !Buffer.isBuffer(helpInformation)) {
+ throw new Error('outputHelp callback must return a string or a Buffer');
+ }
+ }
+ context.write(helpInformation);
+
+ this.emit(this._helpLongFlag); // deprecated
+ this.emit('afterHelp', context);
+ groupListeners.forEach(command => command.emit('afterAllHelp', context));
+ };
+
+ /**
+ * You can pass in flags and a description to override the help
+ * flags and help description for your command. Pass in false to
+ * disable the built-in help option.
+ *
+ * @param {string | boolean} [flags]
+ * @param {string} [description]
+ * @return {Command} `this` command for chaining
+ */
+
+ helpOption(flags, description) {
+ if (typeof flags === 'boolean') {
+ this._hasHelpOption = flags;
+ return this;
+ }
+ this._helpFlags = flags || this._helpFlags;
+ this._helpDescription = description || this._helpDescription;
+
+ const helpFlags = _parseOptionFlags(this._helpFlags);
+ this._helpShortFlag = helpFlags.shortFlag;
+ this._helpLongFlag = helpFlags.longFlag;
+
+ return this;
+ };
+
+ /**
+ * Output help information and exit.
+ *
+ * Outputs built-in help, and custom text added using `.addHelpText()`.
+ *
+ * @param {{ error: boolean }} [contextOptions] - pass {error:true} to write to stderr instead of stdout
+ */
+
+ help(contextOptions) {
+ this.outputHelp(contextOptions);
+ let exitCode = process.exitCode || 0;
+ if (exitCode === 0 && contextOptions && typeof contextOptions !== 'function' && contextOptions.error) {
+ exitCode = 1;
+ }
+ // message: do not have all displayed text available so only passing placeholder.
+ this._exit(exitCode, 'commander.help', '(outputHelp)');
+ };
+
+ /**
+ * Add additional text to be displayed with the built-in help.
+ *
+ * Position is 'before' or 'after' to affect just this command,
+ * and 'beforeAll' or 'afterAll' to affect this command and all its subcommands.
+ *
+ * @param {string} position - before or after built-in help
+ * @param {string | Function} text - string to add, or a function returning a string
+ * @return {Command} `this` command for chaining
+ */
+ addHelpText(position, text) {
+ const allowedValues = ['beforeAll', 'before', 'after', 'afterAll'];
+ if (!allowedValues.includes(position)) {
+ throw new Error(`Unexpected value for position to addHelpText.
+Expecting one of '${allowedValues.join("', '")}'`);
+ }
+ const helpEvent = `${position}Help`;
+ this.on(helpEvent, (context) => {
+ let helpStr;
+ if (typeof text === 'function') {
+ helpStr = text({ error: context.error, command: context.command });
+ } else {
+ helpStr = text;
+ }
+ // Ignore falsy value when nothing to output.
+ if (helpStr) {
+ context.write(`${helpStr}\n`);
+ }
+ });
+ return this;
+ }
+};
+
+/**
+ * Expose the root command.
+ */
+
+exports = module.exports = new Command();
+exports.program = exports; // More explicit access to global command.
+
+/**
+ * Expose classes
+ */
+
+exports.Command = Command;
+exports.Option = Option;
+exports.CommanderError = CommanderError;
+exports.InvalidOptionArgumentError = InvalidOptionArgumentError;
+exports.Help = Help;
+
+/**
+ * Camel-case the given `flag`
+ *
+ * @param {string} flag
+ * @return {string}
+ * @api private
+ */
+
+function camelcase(flag) {
+ return flag.split('-').reduce((str, word) => {
+ return str + word[0].toUpperCase() + word.slice(1);
+ });
+}
+
+/**
+ * Output help information if help flags specified
+ *
+ * @param {Command} cmd - command to output help for
+ * @param {Array} args - array of options to search for help flags
+ * @api private
+ */
+
+function outputHelpIfRequested(cmd, args) {
+ const helpOption = cmd._hasHelpOption && args.find(arg => arg === cmd._helpLongFlag || arg === cmd._helpShortFlag);
+ if (helpOption) {
+ cmd.outputHelp();
+ // (Do not have all displayed text available so only passing placeholder.)
+ cmd._exit(0, 'commander.helpDisplayed', '(outputHelp)');
+ }
+}
+
+/**
+ * Takes an argument and returns its human readable equivalent for help usage.
+ *
+ * @param {Object} arg
+ * @return {string}
+ * @api private
+ */
+
+function humanReadableArgName(arg) {
+ const nameOutput = arg.name + (arg.variadic === true ? '...' : '');
+
+ return arg.required
+ ? '<' + nameOutput + '>'
+ : '[' + nameOutput + ']';
+}
+
+/**
+ * Parse the short and long flag out of something like '-m,--mixed <value>'
+ *
+ * @api private
+ */
+
+function _parseOptionFlags(flags) {
+ let shortFlag;
+ let longFlag;
+ // Use original very loose parsing to maintain backwards compatibility for now,
+ // which allowed for example unintended `-sw, --short-word` [sic].
+ const flagParts = flags.split(/[ |,]+/);
+ if (flagParts.length > 1 && !/^[[<]/.test(flagParts[1])) shortFlag = flagParts.shift();
+ longFlag = flagParts.shift();
+ // Add support for lone short flag without significantly changing parsing!
+ if (!shortFlag && /^-[^-]$/.test(longFlag)) {
+ shortFlag = longFlag;
+ longFlag = undefined;
+ }
+ return { shortFlag, longFlag };
+}
+
+/**
+ * Scan arguments and increment port number for inspect calls (to avoid conflicts when spawning new command).
+ *
+ * @param {string[]} args - array of arguments from node.execArgv
+ * @returns {string[]}
+ * @api private
+ */
+
+function incrementNodeInspectorPort(args) {
+ // Testing for these options:
+ // --inspect[=[host:]port]
+ // --inspect-brk[=[host:]port]
+ // --inspect-port=[host:]port
+ return args.map((arg) => {
+ if (!arg.startsWith('--inspect')) {
+ return arg;
+ }
+ let debugOption;
+ let debugHost = '127.0.0.1';
+ let debugPort = '9229';
+ let match;
+ if ((match = arg.match(/^(--inspect(-brk)?)$/)) !== null) {
+ // e.g. --inspect
+ debugOption = match[1];
+ } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+)$/)) !== null) {
+ debugOption = match[1];
+ if (/^\d+$/.test(match[3])) {
+ // e.g. --inspect=1234
+ debugPort = match[3];
+ } else {
+ // e.g. --inspect=localhost
+ debugHost = match[3];
+ }
+ } else if ((match = arg.match(/^(--inspect(-brk|-port)?)=([^:]+):(\d+)$/)) !== null) {
+ // e.g. --inspect=localhost:1234
+ debugOption = match[1];
+ debugHost = match[3];
+ debugPort = match[4];
+ }
+
+ if (debugOption && debugPort !== '0') {
+ return `${debugOption}=${debugHost}:${parseInt(debugPort) + 1}`;
+ }
+ return arg;
+ });
+}
diff --git a/node_modules/commander/package-support.json b/node_modules/svgo/node_modules/commander/package-support.json
index 4eabb970..4eabb970 100644
--- a/node_modules/commander/package-support.json
+++ b/node_modules/svgo/node_modules/commander/package-support.json
diff --git a/node_modules/svgo/node_modules/commander/package.json b/node_modules/svgo/node_modules/commander/package.json
new file mode 100644
index 00000000..ca153e59
--- /dev/null
+++ b/node_modules/svgo/node_modules/commander/package.json
@@ -0,0 +1,68 @@
+{
+ "name": "commander",
+ "version": "7.2.0",
+ "description": "the complete solution for node.js command-line programs",
+ "keywords": [
+ "commander",
+ "command",
+ "option",
+ "parser",
+ "cli",
+ "argument",
+ "args",
+ "argv"
+ ],
+ "author": "TJ Holowaychuk <tj@vision-media.ca>",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/tj/commander.js.git"
+ },
+ "scripts": {
+ "lint": "eslint index.js esm.mjs \"tests/**/*.js\"",
+ "typescript-lint": "eslint typings/*.ts tests/*.ts",
+ "test": "jest && npm run test-typings",
+ "test-esm": "node --experimental-modules ./tests/esm-imports-test.mjs",
+ "test-typings": "tsd",
+ "typescript-checkJS": "tsc --allowJS --checkJS index.js --noEmit",
+ "test-all": "npm run test && npm run lint && npm run typescript-lint && npm run typescript-checkJS && npm run test-esm"
+ },
+ "main": "./index.js",
+ "files": [
+ "index.js",
+ "esm.mjs",
+ "typings/index.d.ts",
+ "package-support.json"
+ ],
+ "type": "commonjs",
+ "dependencies": {},
+ "devDependencies": {
+ "@types/jest": "^26.0.20",
+ "@types/node": "^14.14.20",
+ "@typescript-eslint/eslint-plugin": "^4.12.0",
+ "@typescript-eslint/parser": "^4.12.0",
+ "eslint": "^7.17.0",
+ "eslint-config-standard": "^16.0.2",
+ "eslint-plugin-jest": "^24.1.3",
+ "jest": "^26.6.3",
+ "standard": "^16.0.3",
+ "ts-jest": "^26.5.1",
+ "tsd": "^0.14.0",
+ "typescript": "^4.1.2"
+ },
+ "types": "typings/index.d.ts",
+ "jest": {
+ "testEnvironment": "node",
+ "collectCoverage": true,
+ "transform": {
+ "^.+\\.tsx?$": "ts-jest"
+ },
+ "testPathIgnorePatterns": [
+ "/node_modules/"
+ ]
+ },
+ "engines": {
+ "node": ">= 10"
+ },
+ "support": true
+}
diff --git a/node_modules/svgo/node_modules/commander/typings/index.d.ts b/node_modules/svgo/node_modules/commander/typings/index.d.ts
new file mode 100644
index 00000000..ee40d899
--- /dev/null
+++ b/node_modules/svgo/node_modules/commander/typings/index.d.ts
@@ -0,0 +1,627 @@
+// Type definitions for commander
+// Original definitions by: Alan Agius <https://github.com/alan-agius4>, Marcelo Dezem <https://github.com/mdezem>, vvakame <https://github.com/vvakame>, Jules Randolph <https://github.com/sveinburne>
+
+// Using method rather than property for method-signature-style, to document method overloads separately. Allow either.
+/* eslint-disable @typescript-eslint/method-signature-style */
+/* eslint-disable @typescript-eslint/no-explicit-any */
+
+declare namespace commander {
+
+ interface CommanderError extends Error {
+ code: string;
+ exitCode: number;
+ message: string;
+ nestedError?: string;
+ }
+ type CommanderErrorConstructor = new (exitCode: number, code: string, message: string) => CommanderError;
+
+ // eslint-disable-next-line @typescript-eslint/no-empty-interface
+ interface InvalidOptionArgumentError extends CommanderError {
+ }
+ type InvalidOptionArgumentErrorConstructor = new (message: string) => InvalidOptionArgumentError;
+
+ interface Option {
+ flags: string;
+ description: string;
+
+ required: boolean; // A value must be supplied when the option is specified.
+ optional: boolean; // A value is optional when the option is specified.
+ variadic: boolean;
+ mandatory: boolean; // The option must have a value after parsing, which usually means it must be specified on command line.
+ optionFlags: string;
+ short?: string;
+ long?: string;
+ negate: boolean;
+ defaultValue?: any;
+ defaultValueDescription?: string;
+ parseArg?: <T>(value: string, previous: T) => T;
+ hidden: boolean;
+ argChoices?: string[];
+
+ /**
+ * Set the default value, and optionally supply the description to be displayed in the help.
+ */
+ default(value: any, description?: string): this;
+
+ /**
+ * Calculate the full description, including defaultValue etc.
+ */
+ fullDescription(): string;
+
+ /**
+ * Set the custom handler for processing CLI option arguments into option values.
+ */
+ argParser<T>(fn: (value: string, previous: T) => T): this;
+
+ /**
+ * Whether the option is mandatory and must have a value after parsing.
+ */
+ makeOptionMandatory(mandatory?: boolean): this;
+
+ /**
+ * Hide option in help.
+ */
+ hideHelp(hide?: boolean): this;
+
+ /**
+ * Validation of option argument failed.
+ * Intended for use from custom argument processing functions.
+ */
+ argumentRejected(messsage: string): never;
+
+ /**
+ * Only allow option value to be one of choices.
+ */
+ choices(values: string[]): this;
+
+ /**
+ * Return option name.
+ */
+ name(): string;
+
+ /**
+ * Return option name, in a camelcase format that can be used
+ * as a object attribute key.
+ */
+ attributeName(): string;
+ }
+ type OptionConstructor = new (flags: string, description?: string) => Option;
+
+ interface Help {
+ /** output helpWidth, long lines are wrapped to fit */
+ helpWidth?: number;
+ sortSubcommands: boolean;
+ sortOptions: boolean;
+
+ /** Get the command term to show in the list of subcommands. */
+ subcommandTerm(cmd: Command): string;
+ /** Get the command description to show in the list of subcommands. */
+ subcommandDescription(cmd: Command): string;
+ /** Get the option term to show in the list of options. */
+ optionTerm(option: Option): string;
+ /** Get the option description to show in the list of options. */
+ optionDescription(option: Option): string;
+
+ /** Get the command usage to be displayed at the top of the built-in help. */
+ commandUsage(cmd: Command): string;
+ /** Get the description for the command. */
+ commandDescription(cmd: Command): string;
+
+ /** Get an array of the visible subcommands. Includes a placeholder for the implicit help command, if there is one. */
+ visibleCommands(cmd: Command): Command[];
+ /** Get an array of the visible options. Includes a placeholder for the implicit help option, if there is one. */
+ visibleOptions(cmd: Command): Option[];
+ /** Get an array of the arguments which have descriptions. */
+ visibleArguments(cmd: Command): Array<{ term: string; description: string}>;
+
+ /** Get the longest command term length. */
+ longestSubcommandTermLength(cmd: Command, helper: Help): number;
+ /** Get the longest option term length. */
+ longestOptionTermLength(cmd: Command, helper: Help): number;
+ /** Get the longest argument term length. */
+ longestArgumentTermLength(cmd: Command, helper: Help): number;
+ /** Calculate the pad width from the maximum term length. */
+ padWidth(cmd: Command, helper: Help): number;
+
+ /**
+ * Wrap the given string to width characters per line, with lines after the first indented.
+ * Do not wrap if insufficient room for wrapping (minColumnWidth), or string is manually formatted.
+ */
+ wrap(str: string, width: number, indent: number, minColumnWidth?: number): string;
+
+ /** Generate the built-in help text. */
+ formatHelp(cmd: Command, helper: Help): string;
+ }
+ type HelpConstructor = new () => Help;
+ type HelpConfiguration = Partial<Help>;
+
+ interface ParseOptions {
+ from: 'node' | 'electron' | 'user';
+ }
+ interface HelpContext { // optional parameter for .help() and .outputHelp()
+ error: boolean;
+ }
+ interface AddHelpTextContext { // passed to text function used with .addHelpText()
+ error: boolean;
+ command: Command;
+ }
+ interface OutputConfiguration {
+ writeOut?(str: string): void;
+ writeErr?(str: string): void;
+ getOutHelpWidth?(): number;
+ getErrHelpWidth?(): number;
+ outputError?(str: string, write: (str: string) => void): void;
+
+ }
+
+ type AddHelpTextPosition = 'beforeAll' | 'before' | 'after' | 'afterAll';
+
+ interface OptionValues {
+ [key: string]: any;
+ }
+
+ interface Command {
+ args: string[];
+ commands: Command[];
+ parent: Command | null;
+
+ /**
+ * Set the program version to `str`.
+ *
+ * This method auto-registers the "-V, --version" flag
+ * which will print the version number when passed.
+ *
+ * You can optionally supply the flags and description to override the defaults.
+ */
+ version(str: string, flags?: string, description?: string): this;
+
+ /**
+ * Define a command, implemented using an action handler.
+ *
+ * @remarks
+ * The command description is supplied using `.description`, not as a parameter to `.command`.
+ *
+ * @example
+ * ```ts
+ * program
+ * .command('clone <source> [destination]')
+ * .description('clone a repository into a newly created directory')
+ * .action((source, destination) => {
+ * console.log('clone command called');
+ * });
+ * ```
+ *
+ * @param nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`
+ * @param opts - configuration options
+ * @returns new command
+ */
+ command(nameAndArgs: string, opts?: CommandOptions): ReturnType<this['createCommand']>;
+ /**
+ * Define a command, implemented in a separate executable file.
+ *
+ * @remarks
+ * The command description is supplied as the second parameter to `.command`.
+ *
+ * @example
+ * ```ts
+ * program
+ * .command('start <service>', 'start named service')
+ * .command('stop [service]', 'stop named service, or all if no name supplied');
+ * ```
+ *
+ * @param nameAndArgs - command name and arguments, args are `<required>` or `[optional]` and last may also be `variadic...`
+ * @param description - description of executable command
+ * @param opts - configuration options
+ * @returns `this` command for chaining
+ */
+ command(nameAndArgs: string, description: string, opts?: commander.ExecutableCommandOptions): this;
+
+ /**
+ * Factory routine to create a new unattached command.
+ *
+ * See .command() for creating an attached subcommand, which uses this routine to
+ * create the command. You can override createCommand to customise subcommands.
+ */
+ createCommand(name?: string): Command;
+
+ /**
+ * Add a prepared subcommand.
+ *
+ * See .command() for creating an attached subcommand which inherits settings from its parent.
+ *
+ * @returns `this` command for chaining
+ */
+ addCommand(cmd: Command, opts?: CommandOptions): this;
+
+ /**
+ * Define argument syntax for command.
+ *
+ * @returns `this` command for chaining
+ */
+ arguments(desc: string): this;
+
+ /**
+ * Override default decision whether to add implicit help command.
+ *
+ * addHelpCommand() // force on
+ * addHelpCommand(false); // force off
+ * addHelpCommand('help [cmd]', 'display help for [cmd]'); // force on with custom details
+ *
+ * @returns `this` command for chaining
+ */
+ addHelpCommand(enableOrNameAndArgs?: string | boolean, description?: string): this;
+
+ /**
+ * Register callback to use as replacement for calling process.exit.
+ */
+ exitOverride(callback?: (err: CommanderError) => never|void): this;
+
+ /**
+ * You can customise the help with a subclass of Help by overriding createHelp,
+ * or by overriding Help properties using configureHelp().
+ */
+ createHelp(): Help;
+
+ /**
+ * You can customise the help by overriding Help properties using configureHelp(),
+ * or with a subclass of Help by overriding createHelp().
+ */
+ configureHelp(configuration: HelpConfiguration): this;
+ /** Get configuration */
+ configureHelp(): HelpConfiguration;
+
+ /**
+ * The default output goes to stdout and stderr. You can customise this for special
+ * applications. You can also customise the display of errors by overriding outputError.
+ *
+ * The configuration properties are all functions:
+ *
+ * // functions to change where being written, stdout and stderr
+ * writeOut(str)
+ * writeErr(str)
+ * // matching functions to specify width for wrapping help
+ * getOutHelpWidth()
+ * getErrHelpWidth()
+ * // functions based on what is being written out
+ * outputError(str, write) // used for displaying errors, and not used for displaying help
+ */
+ configureOutput(configuration: OutputConfiguration): this;
+ /** Get configuration */
+ configureOutput(): OutputConfiguration;
+
+ /**
+ * Register callback `fn` for the command.
+ *
+ * @example
+ * program
+ * .command('help')
+ * .description('display verbose help')
+ * .action(function() {
+ * // output help here
+ * });
+ *
+ * @returns `this` command for chaining
+ */
+ action(fn: (...args: any[]) => void | Promise<void>): this;
+
+ /**
+ * Define option with `flags`, `description` and optional
+ * coercion `fn`.
+ *
+ * The `flags` string contains the short and/or long flags,
+ * separated by comma, a pipe or space. The following are all valid
+ * all will output this way when `--help` is used.
+ *
+ * "-p, --pepper"
+ * "-p|--pepper"
+ * "-p --pepper"
+ *
+ * @example
+ * // simple boolean defaulting to false
+ * program.option('-p, --pepper', 'add pepper');
+ *
+ * --pepper
+ * program.pepper
+ * // => Boolean
+ *
+ * // simple boolean defaulting to true
+ * program.option('-C, --no-cheese', 'remove cheese');
+ *
+ * program.cheese
+ * // => true
+ *
+ * --no-cheese
+ * program.cheese
+ * // => false
+ *
+ * // required argument
+ * program.option('-C, --chdir <path>', 'change the working directory');
+ *
+ * --chdir /tmp
+ * program.chdir
+ * // => "/tmp"
+ *
+ * // optional argument
+ * program.option('-c, --cheese [type]', 'add cheese [marble]');
+ *
+ * @returns `this` command for chaining
+ */
+ option(flags: string, description?: string, defaultValue?: string | boolean): this;
+ option<T>(flags: string, description: string, fn: (value: string, previous: T) => T, defaultValue?: T): this;
+ /** @deprecated since v7, instead use choices or a custom function */
+ option(flags: string, description: string, regexp: RegExp, defaultValue?: string | boolean): this;
+
+ /**
+ * Define a required option, which must have a value after parsing. This usually means
+ * the option must be specified on the command line. (Otherwise the same as .option().)
+ *
+ * The `flags` string contains the short and/or long flags, separated by comma, a pipe or space.
+ */
+ requiredOption(flags: string, description?: string, defaultValue?: string | boolean): this;
+ requiredOption<T>(flags: string, description: string, fn: (value: string, previous: T) => T, defaultValue?: T): this;
+ /** @deprecated since v7, instead use choices or a custom function */
+ requiredOption(flags: string, description: string, regexp: RegExp, defaultValue?: string | boolean): this;
+
+ /**
+ * Factory routine to create a new unattached option.
+ *
+ * See .option() for creating an attached option, which uses this routine to
+ * create the option. You can override createOption to return a custom option.
+ */
+
+ createOption(flags: string, description?: string): Option;
+
+ /**
+ * Add a prepared Option.
+ *
+ * See .option() and .requiredOption() for creating and attaching an option in a single call.
+ */
+ addOption(option: Option): this;
+
+ /**
+ * Whether to store option values as properties on command object,
+ * or store separately (specify false). In both cases the option values can be accessed using .opts().
+ *
+ * @returns `this` command for chaining
+ */
+ storeOptionsAsProperties(): this & OptionValues;
+ storeOptionsAsProperties(storeAsProperties: true): this & OptionValues;
+ storeOptionsAsProperties(storeAsProperties?: boolean): this;
+
+ /**
+ * Alter parsing of short flags with optional values.
+ *
+ * @example
+ * // for `.option('-f,--flag [value]'):
+ * .combineFlagAndOptionalValue(true) // `-f80` is treated like `--flag=80`, this is the default behaviour
+ * .combineFlagAndOptionalValue(false) // `-fb` is treated like `-f -b`
+ *
+ * @returns `this` command for chaining
+ */
+ combineFlagAndOptionalValue(combine?: boolean): this;
+
+ /**
+ * Allow unknown options on the command line.
+ *
+ * @returns `this` command for chaining
+ */
+ allowUnknownOption(allowUnknown?: boolean): this;
+
+ /**
+ * Allow excess command-arguments on the command line. Pass false to make excess arguments an error.
+ *
+ * @returns `this` command for chaining
+ */
+ allowExcessArguments(allowExcess?: boolean): this;
+
+ /**
+ * Enable positional options. Positional means global options are specified before subcommands which lets
+ * subcommands reuse the same option names, and also enables subcommands to turn on passThroughOptions.
+ *
+ * The default behaviour is non-positional and global options may appear anywhere on the command line.
+ *
+ * @returns `this` command for chaining
+ */
+ enablePositionalOptions(positional?: boolean): this;
+
+ /**
+ * Pass through options that come after command-arguments rather than treat them as command-options,
+ * so actual command-options come before command-arguments. Turning this on for a subcommand requires
+ * positional options to have been enabled on the program (parent commands).
+ *
+ * The default behaviour is non-positional and options may appear before or after command-arguments.
+ *
+ * @returns `this` command for chaining
+ */
+ passThroughOptions(passThrough?: boolean): this;
+
+ /**
+ * Parse `argv`, setting options and invoking commands when defined.
+ *
+ * The default expectation is that the arguments are from node and have the application as argv[0]
+ * and the script being run in argv[1], with user parameters after that.
+ *
+ * Examples:
+ *
+ * program.parse(process.argv);
+ * program.parse(); // implicitly use process.argv and auto-detect node vs electron conventions
+ * program.parse(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]
+ *
+ * @returns `this` command for chaining
+ */
+ parse(argv?: string[], options?: ParseOptions): this;
+
+ /**
+ * Parse `argv`, setting options and invoking commands when defined.
+ *
+ * Use parseAsync instead of parse if any of your action handlers are async. Returns a Promise.
+ *
+ * The default expectation is that the arguments are from node and have the application as argv[0]
+ * and the script being run in argv[1], with user parameters after that.
+ *
+ * Examples:
+ *
+ * program.parseAsync(process.argv);
+ * program.parseAsync(); // implicitly use process.argv and auto-detect node vs electron conventions
+ * program.parseAsync(my-args, { from: 'user' }); // just user supplied arguments, nothing special about argv[0]
+ *
+ * @returns Promise
+ */
+ parseAsync(argv?: string[], options?: ParseOptions): Promise<this>;
+
+ /**
+ * Parse options from `argv` removing known options,
+ * and return argv split into operands and unknown arguments.
+ *
+ * @example
+ * argv => operands, unknown
+ * --known kkk op => [op], []
+ * op --known kkk => [op], []
+ * sub --unknown uuu op => [sub], [--unknown uuu op]
+ * sub -- --unknown uuu op => [sub --unknown uuu op], []
+ */
+ parseOptions(argv: string[]): commander.ParseOptionsResult;
+
+ /**
+ * Return an object containing options as key-value pairs
+ */
+ opts(): OptionValues;
+
+ /**
+ * Set the description.
+ *
+ * @returns `this` command for chaining
+ */
+ description(str: string, argsDescription?: {[argName: string]: string}): this;
+ /**
+ * Get the description.
+ */
+ description(): string;
+
+ /**
+ * Set an alias for the command.
+ *
+ * You may call more than once to add multiple aliases. Only the first alias is shown in the auto-generated help.
+ *
+ * @returns `this` command for chaining
+ */
+ alias(alias: string): this;
+ /**
+ * Get alias for the command.
+ */
+ alias(): string;
+
+ /**
+ * Set aliases for the command.
+ *
+ * Only the first alias is shown in the auto-generated help.
+ *
+ * @returns `this` command for chaining
+ */
+ aliases(aliases: string[]): this;
+ /**
+ * Get aliases for the command.
+ */
+ aliases(): string[];
+
+ /**
+ * Set the command usage.
+ *
+ * @returns `this` command for chaining
+ */
+ usage(str: string): this;
+ /**
+ * Get the command usage.
+ */
+ usage(): string;
+
+ /**
+ * Set the name of the command.
+ *
+ * @returns `this` command for chaining
+ */
+ name(str: string): this;
+ /**
+ * Get the name of the command.
+ */
+ name(): string;
+
+ /**
+ * Output help information for this command.
+ *
+ * Outputs built-in help, and custom text added using `.addHelpText()`.
+ *
+ */
+ outputHelp(context?: HelpContext): void;
+ /** @deprecated since v7 */
+ outputHelp(cb?: (str: string) => string): void;
+
+ /**
+ * Return command help documentation.
+ */
+ helpInformation(context?: HelpContext): string;
+
+ /**
+ * You can pass in flags and a description to override the help
+ * flags and help description for your command. Pass in false
+ * to disable the built-in help option.
+ */
+ helpOption(flags?: string | boolean, description?: string): this;
+
+ /**
+ * Output help information and exit.
+ *
+ * Outputs built-in help, and custom text added using `.addHelpText()`.
+ */
+ help(context?: HelpContext): never;
+ /** @deprecated since v7 */
+ help(cb?: (str: string) => string): never;
+
+ /**
+ * Add additional text to be displayed with the built-in help.
+ *
+ * Position is 'before' or 'after' to affect just this command,
+ * and 'beforeAll' or 'afterAll' to affect this command and all its subcommands.
+ */
+ addHelpText(position: AddHelpTextPosition, text: string): this;
+ addHelpText(position: AddHelpTextPosition, text: (context: AddHelpTextContext) => string | undefined): this;
+
+ /**
+ * Add a listener (callback) for when events occur. (Implemented using EventEmitter.)
+ */
+ on(event: string | symbol, listener: (...args: any[]) => void): this;
+ }
+ type CommandConstructor = new (name?: string) => Command;
+
+ interface CommandOptions {
+ hidden?: boolean;
+ isDefault?: boolean;
+ /** @deprecated since v7, replaced by hidden */
+ noHelp?: boolean;
+ }
+ interface ExecutableCommandOptions extends CommandOptions {
+ executableFile?: string;
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ interface ParseOptionsResult {
+ operands: string[];
+ unknown: string[];
+ }
+
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
+ interface CommanderStatic extends Command {
+ program: Command;
+ Command: CommandConstructor;
+ Option: OptionConstructor;
+ CommanderError: CommanderErrorConstructor;
+ InvalidOptionArgumentError: InvalidOptionArgumentErrorConstructor;
+ Help: HelpConstructor;
+ }
+
+}
+
+// Declaring namespace AND global
+// eslint-disable-next-line @typescript-eslint/no-redeclare
+declare const commander: commander.CommanderStatic;
+export = commander;
diff --git a/node_modules/update-browserslist-db/node_modules/.bin/browserslist b/node_modules/update-browserslist-db/node_modules/.bin/browserslist
new file mode 120000
index 00000000..c4cc06e3
--- /dev/null
+++ b/node_modules/update-browserslist-db/node_modules/.bin/browserslist
@@ -0,0 +1 @@
+../../../browserslist/cli.js \ No newline at end of file
diff --git a/node_modules/ansi-styles/index.d.ts b/node_modules/wrap-ansi/node_modules/ansi-styles/index.d.ts
index 44a907e5..44a907e5 100644
--- a/node_modules/ansi-styles/index.d.ts
+++ b/node_modules/wrap-ansi/node_modules/ansi-styles/index.d.ts
diff --git a/node_modules/wrap-ansi/node_modules/ansi-styles/index.js b/node_modules/wrap-ansi/node_modules/ansi-styles/index.js
new file mode 100644
index 00000000..5d82581a
--- /dev/null
+++ b/node_modules/wrap-ansi/node_modules/ansi-styles/index.js
@@ -0,0 +1,163 @@
+'use strict';
+
+const wrapAnsi16 = (fn, offset) => (...args) => {
+ const code = fn(...args);
+ return `\u001B[${code + offset}m`;
+};
+
+const wrapAnsi256 = (fn, offset) => (...args) => {
+ const code = fn(...args);
+ return `\u001B[${38 + offset};5;${code}m`;
+};
+
+const wrapAnsi16m = (fn, offset) => (...args) => {
+ const rgb = fn(...args);
+ return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
+};
+
+const ansi2ansi = n => n;
+const rgb2rgb = (r, g, b) => [r, g, b];
+
+const setLazyProperty = (object, property, get) => {
+ Object.defineProperty(object, property, {
+ get: () => {
+ const value = get();
+
+ Object.defineProperty(object, property, {
+ value,
+ enumerable: true,
+ configurable: true
+ });
+
+ return value;
+ },
+ enumerable: true,
+ configurable: true
+ });
+};
+
+/** @type {typeof import('color-convert')} */
+let colorConvert;
+const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => {
+ if (colorConvert === undefined) {
+ colorConvert = require('color-convert');
+ }
+
+ const offset = isBackground ? 10 : 0;
+ const styles = {};
+
+ for (const [sourceSpace, suite] of Object.entries(colorConvert)) {
+ const name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace;
+ if (sourceSpace === targetSpace) {
+ styles[name] = wrap(identity, offset);
+ } else if (typeof suite === 'object') {
+ styles[name] = wrap(suite[targetSpace], offset);
+ }
+ }
+
+ return styles;
+};
+
+function assembleStyles() {
+ const codes = new Map();
+ const styles = {
+ modifier: {
+ reset: [0, 0],
+ // 21 isn't widely supported and 22 does the same thing
+ bold: [1, 22],
+ dim: [2, 22],
+ italic: [3, 23],
+ underline: [4, 24],
+ inverse: [7, 27],
+ hidden: [8, 28],
+ strikethrough: [9, 29]
+ },
+ color: {
+ black: [30, 39],
+ red: [31, 39],
+ green: [32, 39],
+ yellow: [33, 39],
+ blue: [34, 39],
+ magenta: [35, 39],
+ cyan: [36, 39],
+ white: [37, 39],
+
+ // Bright color
+ blackBright: [90, 39],
+ redBright: [91, 39],
+ greenBright: [92, 39],
+ yellowBright: [93, 39],
+ blueBright: [94, 39],
+ magentaBright: [95, 39],
+ cyanBright: [96, 39],
+ whiteBright: [97, 39]
+ },
+ bgColor: {
+ bgBlack: [40, 49],
+ bgRed: [41, 49],
+ bgGreen: [42, 49],
+ bgYellow: [43, 49],
+ bgBlue: [44, 49],
+ bgMagenta: [45, 49],
+ bgCyan: [46, 49],
+ bgWhite: [47, 49],
+
+ // Bright color
+ bgBlackBright: [100, 49],
+ bgRedBright: [101, 49],
+ bgGreenBright: [102, 49],
+ bgYellowBright: [103, 49],
+ bgBlueBright: [104, 49],
+ bgMagentaBright: [105, 49],
+ bgCyanBright: [106, 49],
+ bgWhiteBright: [107, 49]
+ }
+ };
+
+ // Alias bright black as gray (and grey)
+ styles.color.gray = styles.color.blackBright;
+ styles.bgColor.bgGray = styles.bgColor.bgBlackBright;
+ styles.color.grey = styles.color.blackBright;
+ styles.bgColor.bgGrey = styles.bgColor.bgBlackBright;
+
+ for (const [groupName, group] of Object.entries(styles)) {
+ for (const [styleName, style] of Object.entries(group)) {
+ styles[styleName] = {
+ open: `\u001B[${style[0]}m`,
+ close: `\u001B[${style[1]}m`
+ };
+
+ group[styleName] = styles[styleName];
+
+ codes.set(style[0], style[1]);
+ }
+
+ Object.defineProperty(styles, groupName, {
+ value: group,
+ enumerable: false
+ });
+ }
+
+ Object.defineProperty(styles, 'codes', {
+ value: codes,
+ enumerable: false
+ });
+
+ styles.color.close = '\u001B[39m';
+ styles.bgColor.close = '\u001B[49m';
+
+ setLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false));
+ setLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false));
+ setLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false));
+ setLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true));
+ setLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true));
+ setLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true));
+
+ return styles;
+}
+
+// Make the export immutable
+Object.defineProperty(module, 'exports', {
+ enumerable: true,
+ get: assembleStyles
+});
diff --git a/node_modules/chalk/node_modules/ansi-styles/license b/node_modules/wrap-ansi/node_modules/ansi-styles/license
index e7af2f77..e7af2f77 100644
--- a/node_modules/chalk/node_modules/ansi-styles/license
+++ b/node_modules/wrap-ansi/node_modules/ansi-styles/license
diff --git a/node_modules/chalk/node_modules/ansi-styles/package.json b/node_modules/wrap-ansi/node_modules/ansi-styles/package.json
index 65edb48c..75393284 100644
--- a/node_modules/chalk/node_modules/ansi-styles/package.json
+++ b/node_modules/wrap-ansi/node_modules/ansi-styles/package.json
@@ -1,23 +1,25 @@
{
"name": "ansi-styles",
- "version": "3.2.1",
+ "version": "4.3.0",
"description": "ANSI escape codes for styling strings in the terminal",
"license": "MIT",
"repository": "chalk/ansi-styles",
+ "funding": "https://github.com/chalk/ansi-styles?sponsor=1",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
"url": "sindresorhus.com"
},
"engines": {
- "node": ">=4"
+ "node": ">=8"
},
"scripts": {
- "test": "xo && ava",
+ "test": "xo && ava && tsd",
"screenshot": "svg-term --command='node screenshot' --out=screenshot.svg --padding=3 --width=55 --height=3 --at=1000 --no-cursor"
},
"files": [
- "index.js"
+ "index.js",
+ "index.d.ts"
],
"keywords": [
"ansi",
@@ -42,15 +44,13 @@
"text"
],
"dependencies": {
- "color-convert": "^1.9.0"
+ "color-convert": "^2.0.1"
},
"devDependencies": {
- "ava": "*",
- "babel-polyfill": "^6.23.0",
+ "@types/color-convert": "^1.9.0",
+ "ava": "^2.3.0",
"svg-term-cli": "^2.1.1",
- "xo": "*"
- },
- "ava": {
- "require": "babel-polyfill"
+ "tsd": "^0.11.0",
+ "xo": "^0.25.3"
}
}
diff --git a/node_modules/chalk/node_modules/ansi-styles/readme.md b/node_modules/wrap-ansi/node_modules/ansi-styles/readme.md
index 3158e2df..24883de8 100644
--- a/node_modules/chalk/node_modules/ansi-styles/readme.md
+++ b/node_modules/wrap-ansi/node_modules/ansi-styles/readme.md
@@ -1,11 +1,10 @@
# ansi-styles [![Build Status](https://travis-ci.org/chalk/ansi-styles.svg?branch=master)](https://travis-ci.org/chalk/ansi-styles)
-> [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal
+> [ANSI escape codes](https://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal
You probably want the higher-level [chalk](https://github.com/chalk/chalk) module for styling your strings.
-<img src="https://cdn.rawgit.com/chalk/ansi-styles/8261697c95bf34b6c7767e2cbe9941a851d59385/screenshot.svg" width="900">
-
+<img src="screenshot.svg" width="900">
## Install
@@ -13,7 +12,6 @@ You probably want the higher-level [chalk](https://github.com/chalk/chalk) modul
$ npm install ansi-styles
```
-
## Usage
```js
@@ -29,14 +27,13 @@ console.log(`${style.green.open}Hello world!${style.green.close}`);
// original color.
console.log(style.bgColor.ansi.hsl(120, 80, 72) + 'Hello world!' + style.bgColor.close);
console.log(style.color.ansi256.rgb(199, 20, 250) + 'Hello world!' + style.color.close);
-console.log(style.color.ansi16m.hex('#ABCDEF') + 'Hello world!' + style.color.close);
+console.log(style.color.ansi16m.hex('#abcdef') + 'Hello world!' + style.color.close);
```
## API
Each style has an `open` and `close` property.
-
## Styles
### Modifiers
@@ -60,7 +57,7 @@ Each style has an `open` and `close` property.
- `magenta`
- `cyan`
- `white`
-- `gray` ("bright black")
+- `blackBright` (alias: `gray`, `grey`)
- `redBright`
- `greenBright`
- `yellowBright`
@@ -79,7 +76,7 @@ Each style has an `open` and `close` property.
- `bgMagenta`
- `bgCyan`
- `bgWhite`
-- `bgBlackBright`
+- `bgBlackBright` (alias: `bgGray`, `bgGrey`)
- `bgRedBright`
- `bgGreenBright`
- `bgYellowBright`
@@ -88,7 +85,6 @@ Each style has an `open` and `close` property.
- `bgCyanBright`
- `bgWhiteBright`
-
## Advanced usage
By default, you get a map of styles, but the styles are also available as groups. They are non-enumerable so they don't show up unless you access them explicitly. This makes it easier to expose only a subset in a higher-level module.
@@ -112,11 +108,21 @@ console.log(style.codes.get(36));
//=> 39
```
-
## [256 / 16 million (TrueColor) support](https://gist.github.com/XVilka/8346728)
`ansi-styles` uses the [`color-convert`](https://github.com/Qix-/color-convert) package to allow for converting between various colors and ANSI escapes, with support for 256 and 16 million colors.
+The following color spaces from `color-convert` are supported:
+
+- `rgb`
+- `hex`
+- `keyword`
+- `hsl`
+- `hsv`
+- `hwb`
+- `ansi`
+- `ansi256`
+
To use these, call the associated conversion function with the intended output, for example:
```js
@@ -130,18 +136,17 @@ style.color.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color foreground
style.bgColor.ansi16m.hex('#C0FFEE'); // Hex (RGB) to 16 million color background code
```
-
## Related
- [ansi-escapes](https://github.com/sindresorhus/ansi-escapes) - ANSI escape codes for manipulating the terminal
-
## Maintainers
- [Sindre Sorhus](https://github.com/sindresorhus)
- [Josh Junon](https://github.com/qix-)
+## For enterprise
-## License
+Available as part of the Tidelift Subscription.
-MIT
+The maintainers of `ansi-styles` and thousands of other packages are working with Tidelift to deliver commercial support and maintenance for the open source dependencies you use to build your applications. Save time, reduce risk, and improve code health, while paying the maintainers of the exact dependencies you use. [Learn more.](https://tidelift.com/subscription/pkg/npm-ansi-styles?utm_source=npm-ansi-styles&utm_medium=referral&utm_campaign=enterprise&utm_term=repo)
diff --git a/node_modules/chalk/node_modules/color-convert/CHANGELOG.md b/node_modules/wrap-ansi/node_modules/color-convert/CHANGELOG.md
index 0a7bce4f..0a7bce4f 100644
--- a/node_modules/chalk/node_modules/color-convert/CHANGELOG.md
+++ b/node_modules/wrap-ansi/node_modules/color-convert/CHANGELOG.md
diff --git a/node_modules/chalk/node_modules/color-convert/LICENSE b/node_modules/wrap-ansi/node_modules/color-convert/LICENSE
index 5b4c386f..5b4c386f 100644
--- a/node_modules/chalk/node_modules/color-convert/LICENSE
+++ b/node_modules/wrap-ansi/node_modules/color-convert/LICENSE
diff --git a/node_modules/chalk/node_modules/color-convert/README.md b/node_modules/wrap-ansi/node_modules/color-convert/README.md
index d4b08fc3..d4b08fc3 100644
--- a/node_modules/chalk/node_modules/color-convert/README.md
+++ b/node_modules/wrap-ansi/node_modules/color-convert/README.md
diff --git a/node_modules/chalk/node_modules/color-convert/conversions.js b/node_modules/wrap-ansi/node_modules/color-convert/conversions.js
index 32172007..2657f265 100644
--- a/node_modules/chalk/node_modules/color-convert/conversions.js
+++ b/node_modules/wrap-ansi/node_modules/color-convert/conversions.js
@@ -1,18 +1,17 @@
/* MIT license */
-var cssKeywords = require('color-name');
+/* eslint-disable no-mixed-operators */
+const cssKeywords = require('color-name');
// NOTE: conversions should only return primitive values (i.e. arrays, or
// values that give correct `typeof` results).
// do not use box values types (i.e. Number(), String(), etc.)
-var reverseKeywords = {};
-for (var key in cssKeywords) {
- if (cssKeywords.hasOwnProperty(key)) {
- reverseKeywords[cssKeywords[key]] = key;
- }
+const reverseKeywords = {};
+for (const key of Object.keys(cssKeywords)) {
+ reverseKeywords[cssKeywords[key]] = key;
}
-var convert = module.exports = {
+const convert = {
rgb: {channels: 3, labels: 'rgb'},
hsl: {channels: 3, labels: 'hsl'},
hsv: {channels: 3, labels: 'hsv'},
@@ -30,40 +29,38 @@ var convert = module.exports = {
gray: {channels: 1, labels: ['gray']}
};
-// hide .channels and .labels properties
-for (var model in convert) {
- if (convert.hasOwnProperty(model)) {
- if (!('channels' in convert[model])) {
- throw new Error('missing channels property: ' + model);
- }
+module.exports = convert;
- if (!('labels' in convert[model])) {
- throw new Error('missing channel labels property: ' + model);
- }
+// Hide .channels and .labels properties
+for (const model of Object.keys(convert)) {
+ if (!('channels' in convert[model])) {
+ throw new Error('missing channels property: ' + model);
+ }
- if (convert[model].labels.length !== convert[model].channels) {
- throw new Error('channel and label counts mismatch: ' + model);
- }
+ if (!('labels' in convert[model])) {
+ throw new Error('missing channel labels property: ' + model);
+ }
- var channels = convert[model].channels;
- var labels = convert[model].labels;
- delete convert[model].channels;
- delete convert[model].labels;
- Object.defineProperty(convert[model], 'channels', {value: channels});
- Object.defineProperty(convert[model], 'labels', {value: labels});
+ if (convert[model].labels.length !== convert[model].channels) {
+ throw new Error('channel and label counts mismatch: ' + model);
}
+
+ const {channels, labels} = convert[model];
+ delete convert[model].channels;
+ delete convert[model].labels;
+ Object.defineProperty(convert[model], 'channels', {value: channels});
+ Object.defineProperty(convert[model], 'labels', {value: labels});
}
convert.rgb.hsl = function (rgb) {
- var r = rgb[0] / 255;
- var g = rgb[1] / 255;
- var b = rgb[2] / 255;
- var min = Math.min(r, g, b);
- var max = Math.max(r, g, b);
- var delta = max - min;
- var h;
- var s;
- var l;
+ const r = rgb[0] / 255;
+ const g = rgb[1] / 255;
+ const b = rgb[2] / 255;
+ const min = Math.min(r, g, b);
+ const max = Math.max(r, g, b);
+ const delta = max - min;
+ let h;
+ let s;
if (max === min) {
h = 0;
@@ -81,7 +78,7 @@ convert.rgb.hsl = function (rgb) {
h += 360;
}
- l = (min + max) / 2;
+ const l = (min + max) / 2;
if (max === min) {
s = 0;
@@ -95,23 +92,24 @@ convert.rgb.hsl = function (rgb) {
};
convert.rgb.hsv = function (rgb) {
- var rdif;
- var gdif;
- var bdif;
- var h;
- var s;
-
- var r = rgb[0] / 255;
- var g = rgb[1] / 255;
- var b = rgb[2] / 255;
- var v = Math.max(r, g, b);
- var diff = v - Math.min(r, g, b);
- var diffc = function (c) {
+ let rdif;
+ let gdif;
+ let bdif;
+ let h;
+ let s;
+
+ const r = rgb[0] / 255;
+ const g = rgb[1] / 255;
+ const b = rgb[2] / 255;
+ const v = Math.max(r, g, b);
+ const diff = v - Math.min(r, g, b);
+ const diffc = function (c) {
return (v - c) / 6 / diff + 1 / 2;
};
if (diff === 0) {
- h = s = 0;
+ h = 0;
+ s = 0;
} else {
s = diff / v;
rdif = diffc(r);
@@ -125,6 +123,7 @@ convert.rgb.hsv = function (rgb) {
} else if (b === v) {
h = (2 / 3) + gdif - rdif;
}
+
if (h < 0) {
h += 1;
} else if (h > 1) {
@@ -140,11 +139,11 @@ convert.rgb.hsv = function (rgb) {
};
convert.rgb.hwb = function (rgb) {
- var r = rgb[0];
- var g = rgb[1];
- var b = rgb[2];
- var h = convert.rgb.hsl(rgb)[0];
- var w = 1 / 255 * Math.min(r, Math.min(g, b));
+ const r = rgb[0];
+ const g = rgb[1];
+ let b = rgb[2];
+ const h = convert.rgb.hsl(rgb)[0];
+ const w = 1 / 255 * Math.min(r, Math.min(g, b));
b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));
@@ -152,54 +151,48 @@ convert.rgb.hwb = function (rgb) {
};
convert.rgb.cmyk = function (rgb) {
- var r = rgb[0] / 255;
- var g = rgb[1] / 255;
- var b = rgb[2] / 255;
- var c;
- var m;
- var y;
- var k;
-
- k = Math.min(1 - r, 1 - g, 1 - b);
- c = (1 - r - k) / (1 - k) || 0;
- m = (1 - g - k) / (1 - k) || 0;
- y = (1 - b - k) / (1 - k) || 0;
+ const r = rgb[0] / 255;
+ const g = rgb[1] / 255;
+ const b = rgb[2] / 255;
+
+ const k = Math.min(1 - r, 1 - g, 1 - b);
+ const c = (1 - r - k) / (1 - k) || 0;
+ const m = (1 - g - k) / (1 - k) || 0;
+ const y = (1 - b - k) / (1 - k) || 0;
return [c * 100, m * 100, y * 100, k * 100];
};
-/**
- * See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance
- * */
function comparativeDistance(x, y) {
+ /*
+ See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance
+ */
return (
- Math.pow(x[0] - y[0], 2) +
- Math.pow(x[1] - y[1], 2) +
- Math.pow(x[2] - y[2], 2)
+ ((x[0] - y[0]) ** 2) +
+ ((x[1] - y[1]) ** 2) +
+ ((x[2] - y[2]) ** 2)
);
}
convert.rgb.keyword = function (rgb) {
- var reversed = reverseKeywords[rgb];
+ const reversed = reverseKeywords[rgb];
if (reversed) {
return reversed;
}
- var currentClosestDistance = Infinity;
- var currentClosestKeyword;
+ let currentClosestDistance = Infinity;
+ let currentClosestKeyword;
- for (var keyword in cssKeywords) {
- if (cssKeywords.hasOwnProperty(keyword)) {
- var value = cssKeywords[keyword];
+ for (const keyword of Object.keys(cssKeywords)) {
+ const value = cssKeywords[keyword];
- // Compute comparative distance
- var distance = comparativeDistance(rgb, value);
+ // Compute comparative distance
+ const distance = comparativeDistance(rgb, value);
- // Check if its less, if so set as closest
- if (distance < currentClosestDistance) {
- currentClosestDistance = distance;
- currentClosestKeyword = keyword;
- }
+ // Check if its less, if so set as closest
+ if (distance < currentClosestDistance) {
+ currentClosestDistance = distance;
+ currentClosestKeyword = keyword;
}
}
@@ -211,55 +204,50 @@ convert.keyword.rgb = function (keyword) {
};
convert.rgb.xyz = function (rgb) {
- var r = rgb[0] / 255;
- var g = rgb[1] / 255;
- var b = rgb[2] / 255;
+ let r = rgb[0] / 255;
+ let g = rgb[1] / 255;
+ let b = rgb[2] / 255;
- // assume sRGB
- r = r > 0.04045 ? Math.pow(((r + 0.055) / 1.055), 2.4) : (r / 12.92);
- g = g > 0.04045 ? Math.pow(((g + 0.055) / 1.055), 2.4) : (g / 12.92);
- b = b > 0.04045 ? Math.pow(((b + 0.055) / 1.055), 2.4) : (b / 12.92);
+ // Assume sRGB
+ r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);
+ g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);
+ b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);
- var x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);
- var y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);
- var z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);
+ const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);
+ const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);
+ const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);
return [x * 100, y * 100, z * 100];
};
convert.rgb.lab = function (rgb) {
- var xyz = convert.rgb.xyz(rgb);
- var x = xyz[0];
- var y = xyz[1];
- var z = xyz[2];
- var l;
- var a;
- var b;
+ const xyz = convert.rgb.xyz(rgb);
+ let x = xyz[0];
+ let y = xyz[1];
+ let z = xyz[2];
x /= 95.047;
y /= 100;
z /= 108.883;
- x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);
- y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);
- z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);
+ x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);
+ y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);
+ z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);
- l = (116 * y) - 16;
- a = 500 * (x - y);
- b = 200 * (y - z);
+ const l = (116 * y) - 16;
+ const a = 500 * (x - y);
+ const b = 200 * (y - z);
return [l, a, b];
};
convert.hsl.rgb = function (hsl) {
- var h = hsl[0] / 360;
- var s = hsl[1] / 100;
- var l = hsl[2] / 100;
- var t1;
- var t2;
- var t3;
- var rgb;
- var val;
+ const h = hsl[0] / 360;
+ const s = hsl[1] / 100;
+ const l = hsl[2] / 100;
+ let t2;
+ let t3;
+ let val;
if (s === 0) {
val = l * 255;
@@ -272,14 +260,15 @@ convert.hsl.rgb = function (hsl) {
t2 = l + s - l * s;
}
- t1 = 2 * l - t2;
+ const t1 = 2 * l - t2;
- rgb = [0, 0, 0];
- for (var i = 0; i < 3; i++) {
+ const rgb = [0, 0, 0];
+ for (let i = 0; i < 3; i++) {
t3 = h + 1 / 3 * -(i - 1);
if (t3 < 0) {
t3++;
}
+
if (t3 > 1) {
t3--;
}
@@ -301,33 +290,31 @@ convert.hsl.rgb = function (hsl) {
};
convert.hsl.hsv = function (hsl) {
- var h = hsl[0];
- var s = hsl[1] / 100;
- var l = hsl[2] / 100;
- var smin = s;
- var lmin = Math.max(l, 0.01);
- var sv;
- var v;
+ const h = hsl[0];
+ let s = hsl[1] / 100;
+ let l = hsl[2] / 100;
+ let smin = s;
+ const lmin = Math.max(l, 0.01);
l *= 2;
s *= (l <= 1) ? l : 2 - l;
smin *= lmin <= 1 ? lmin : 2 - lmin;
- v = (l + s) / 2;
- sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);
+ const v = (l + s) / 2;
+ const sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);
return [h, sv * 100, v * 100];
};
convert.hsv.rgb = function (hsv) {
- var h = hsv[0] / 60;
- var s = hsv[1] / 100;
- var v = hsv[2] / 100;
- var hi = Math.floor(h) % 6;
-
- var f = h - Math.floor(h);
- var p = 255 * v * (1 - s);
- var q = 255 * v * (1 - (s * f));
- var t = 255 * v * (1 - (s * (1 - f)));
+ const h = hsv[0] / 60;
+ const s = hsv[1] / 100;
+ let v = hsv[2] / 100;
+ const hi = Math.floor(h) % 6;
+
+ const f = h - Math.floor(h);
+ const p = 255 * v * (1 - s);
+ const q = 255 * v * (1 - (s * f));
+ const t = 255 * v * (1 - (s * (1 - f)));
v *= 255;
switch (hi) {
@@ -347,16 +334,15 @@ convert.hsv.rgb = function (hsv) {
};
convert.hsv.hsl = function (hsv) {
- var h = hsv[0];
- var s = hsv[1] / 100;
- var v = hsv[2] / 100;
- var vmin = Math.max(v, 0.01);
- var lmin;
- var sl;
- var l;
+ const h = hsv[0];
+ const s = hsv[1] / 100;
+ const v = hsv[2] / 100;
+ const vmin = Math.max(v, 0.01);
+ let sl;
+ let l;
l = (2 - s) * v;
- lmin = (2 - s) * vmin;
+ const lmin = (2 - s) * vmin;
sl = s * vmin;
sl /= (lmin <= 1) ? lmin : 2 - lmin;
sl = sl || 0;
@@ -367,87 +353,83 @@ convert.hsv.hsl = function (hsv) {
// http://dev.w3.org/csswg/css-color/#hwb-to-rgb
convert.hwb.rgb = function (hwb) {
- var h = hwb[0] / 360;
- var wh = hwb[1] / 100;
- var bl = hwb[2] / 100;
- var ratio = wh + bl;
- var i;
- var v;
- var f;
- var n;
-
- // wh + bl cant be > 1
+ const h = hwb[0] / 360;
+ let wh = hwb[1] / 100;
+ let bl = hwb[2] / 100;
+ const ratio = wh + bl;
+ let f;
+
+ // Wh + bl cant be > 1
if (ratio > 1) {
wh /= ratio;
bl /= ratio;
}
- i = Math.floor(6 * h);
- v = 1 - bl;
+ const i = Math.floor(6 * h);
+ const v = 1 - bl;
f = 6 * h - i;
if ((i & 0x01) !== 0) {
f = 1 - f;
}
- n = wh + f * (v - wh); // linear interpolation
+ const n = wh + f * (v - wh); // Linear interpolation
- var r;
- var g;
- var b;
+ let r;
+ let g;
+ let b;
+ /* eslint-disable max-statements-per-line,no-multi-spaces */
switch (i) {
default:
case 6:
- case 0: r = v; g = n; b = wh; break;
- case 1: r = n; g = v; b = wh; break;
- case 2: r = wh; g = v; b = n; break;
- case 3: r = wh; g = n; b = v; break;
- case 4: r = n; g = wh; b = v; break;
- case 5: r = v; g = wh; b = n; break;
+ case 0: r = v; g = n; b = wh; break;
+ case 1: r = n; g = v; b = wh; break;
+ case 2: r = wh; g = v; b = n; break;
+ case 3: r = wh; g = n; b = v; break;
+ case 4: r = n; g = wh; b = v; break;
+ case 5: r = v; g = wh; b = n; break;
}
+ /* eslint-enable max-statements-per-line,no-multi-spaces */
return [r * 255, g * 255, b * 255];
};
convert.cmyk.rgb = function (cmyk) {
- var c = cmyk[0] / 100;
- var m = cmyk[1] / 100;
- var y = cmyk[2] / 100;
- var k = cmyk[3] / 100;
- var r;
- var g;
- var b;
-
- r = 1 - Math.min(1, c * (1 - k) + k);
- g = 1 - Math.min(1, m * (1 - k) + k);
- b = 1 - Math.min(1, y * (1 - k) + k);
+ const c = cmyk[0] / 100;
+ const m = cmyk[1] / 100;
+ const y = cmyk[2] / 100;
+ const k = cmyk[3] / 100;
+
+ const r = 1 - Math.min(1, c * (1 - k) + k);
+ const g = 1 - Math.min(1, m * (1 - k) + k);
+ const b = 1 - Math.min(1, y * (1 - k) + k);
return [r * 255, g * 255, b * 255];
};
convert.xyz.rgb = function (xyz) {
- var x = xyz[0] / 100;
- var y = xyz[1] / 100;
- var z = xyz[2] / 100;
- var r;
- var g;
- var b;
+ const x = xyz[0] / 100;
+ const y = xyz[1] / 100;
+ const z = xyz[2] / 100;
+ let r;
+ let g;
+ let b;
r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);
g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);
b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);
- // assume sRGB
+ // Assume sRGB
r = r > 0.0031308
- ? ((1.055 * Math.pow(r, 1.0 / 2.4)) - 0.055)
+ ? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)
: r * 12.92;
g = g > 0.0031308
- ? ((1.055 * Math.pow(g, 1.0 / 2.4)) - 0.055)
+ ? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)
: g * 12.92;
b = b > 0.0031308
- ? ((1.055 * Math.pow(b, 1.0 / 2.4)) - 0.055)
+ ? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)
: b * 12.92;
r = Math.min(Math.max(0, r), 1);
@@ -458,43 +440,40 @@ convert.xyz.rgb = function (xyz) {
};
convert.xyz.lab = function (xyz) {
- var x = xyz[0];
- var y = xyz[1];
- var z = xyz[2];
- var l;
- var a;
- var b;
+ let x = xyz[0];
+ let y = xyz[1];
+ let z = xyz[2];
x /= 95.047;
y /= 100;
z /= 108.883;
- x = x > 0.008856 ? Math.pow(x, 1 / 3) : (7.787 * x) + (16 / 116);
- y = y > 0.008856 ? Math.pow(y, 1 / 3) : (7.787 * y) + (16 / 116);
- z = z > 0.008856 ? Math.pow(z, 1 / 3) : (7.787 * z) + (16 / 116);
+ x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);
+ y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);
+ z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);
- l = (116 * y) - 16;
- a = 500 * (x - y);
- b = 200 * (y - z);
+ const l = (116 * y) - 16;
+ const a = 500 * (x - y);
+ const b = 200 * (y - z);
return [l, a, b];
};
convert.lab.xyz = function (lab) {
- var l = lab[0];
- var a = lab[1];
- var b = lab[2];
- var x;
- var y;
- var z;
+ const l = lab[0];
+ const a = lab[1];
+ const b = lab[2];
+ let x;
+ let y;
+ let z;
y = (l + 16) / 116;
x = a / 500 + y;
z = y - b / 200;
- var y2 = Math.pow(y, 3);
- var x2 = Math.pow(x, 3);
- var z2 = Math.pow(z, 3);
+ const y2 = y ** 3;
+ const x2 = x ** 3;
+ const z2 = z ** 3;
y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;
x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;
z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;
@@ -507,45 +486,38 @@ convert.lab.xyz = function (lab) {
};
convert.lab.lch = function (lab) {
- var l = lab[0];
- var a = lab[1];
- var b = lab[2];
- var hr;
- var h;
- var c;
-
- hr = Math.atan2(b, a);
+ const l = lab[0];
+ const a = lab[1];
+ const b = lab[2];
+ let h;
+
+ const hr = Math.atan2(b, a);
h = hr * 360 / 2 / Math.PI;
if (h < 0) {
h += 360;
}
- c = Math.sqrt(a * a + b * b);
+ const c = Math.sqrt(a * a + b * b);
return [l, c, h];
};
convert.lch.lab = function (lch) {
- var l = lch[0];
- var c = lch[1];
- var h = lch[2];
- var a;
- var b;
- var hr;
+ const l = lch[0];
+ const c = lch[1];
+ const h = lch[2];
- hr = h / 360 * 2 * Math.PI;
- a = c * Math.cos(hr);
- b = c * Math.sin(hr);
+ const hr = h / 360 * 2 * Math.PI;
+ const a = c * Math.cos(hr);
+ const b = c * Math.sin(hr);
return [l, a, b];
};
-convert.rgb.ansi16 = function (args) {
- var r = args[0];
- var g = args[1];
- var b = args[2];
- var value = 1 in arguments ? arguments[1] : convert.rgb.hsv(args)[2]; // hsv -> ansi16 optimization
+convert.rgb.ansi16 = function (args, saturation = null) {
+ const [r, g, b] = args;
+ let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization
value = Math.round(value / 50);
@@ -553,7 +525,7 @@ convert.rgb.ansi16 = function (args) {
return 30;
}
- var ansi = 30
+ let ansi = 30
+ ((Math.round(b / 255) << 2)
| (Math.round(g / 255) << 1)
| Math.round(r / 255));
@@ -566,17 +538,17 @@ convert.rgb.ansi16 = function (args) {
};
convert.hsv.ansi16 = function (args) {
- // optimization here; we already know the value and don't need to get
+ // Optimization here; we already know the value and don't need to get
// it converted for us.
return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);
};
convert.rgb.ansi256 = function (args) {
- var r = args[0];
- var g = args[1];
- var b = args[2];
+ const r = args[0];
+ const g = args[1];
+ const b = args[2];
- // we use the extended greyscale palette here, with the exception of
+ // We use the extended greyscale palette here, with the exception of
// black and white. normal palette only has 4 greyscale shades.
if (r === g && g === b) {
if (r < 8) {
@@ -590,7 +562,7 @@ convert.rgb.ansi256 = function (args) {
return Math.round(((r - 8) / 247) * 24) + 232;
}
- var ansi = 16
+ const ansi = 16
+ (36 * Math.round(r / 255 * 5))
+ (6 * Math.round(g / 255 * 5))
+ Math.round(b / 255 * 5);
@@ -599,9 +571,9 @@ convert.rgb.ansi256 = function (args) {
};
convert.ansi16.rgb = function (args) {
- var color = args % 10;
+ let color = args % 10;
- // handle greyscale
+ // Handle greyscale
if (color === 0 || color === 7) {
if (args > 50) {
color += 3.5;
@@ -612,71 +584,71 @@ convert.ansi16.rgb = function (args) {
return [color, color, color];
}
- var mult = (~~(args > 50) + 1) * 0.5;
- var r = ((color & 1) * mult) * 255;
- var g = (((color >> 1) & 1) * mult) * 255;
- var b = (((color >> 2) & 1) * mult) * 255;
+ const mult = (~~(args > 50) + 1) * 0.5;
+ const r = ((color & 1) * mult) * 255;
+ const g = (((color >> 1) & 1) * mult) * 255;
+ const b = (((color >> 2) & 1) * mult) * 255;
return [r, g, b];
};
convert.ansi256.rgb = function (args) {
- // handle greyscale
+ // Handle greyscale
if (args >= 232) {
- var c = (args - 232) * 10 + 8;
+ const c = (args - 232) * 10 + 8;
return [c, c, c];
}
args -= 16;
- var rem;
- var r = Math.floor(args / 36) / 5 * 255;
- var g = Math.floor((rem = args % 36) / 6) / 5 * 255;
- var b = (rem % 6) / 5 * 255;
+ let rem;
+ const r = Math.floor(args / 36) / 5 * 255;
+ const g = Math.floor((rem = args % 36) / 6) / 5 * 255;
+ const b = (rem % 6) / 5 * 255;
return [r, g, b];
};
convert.rgb.hex = function (args) {
- var integer = ((Math.round(args[0]) & 0xFF) << 16)
+ const integer = ((Math.round(args[0]) & 0xFF) << 16)
+ ((Math.round(args[1]) & 0xFF) << 8)
+ (Math.round(args[2]) & 0xFF);
- var string = integer.toString(16).toUpperCase();
+ const string = integer.toString(16).toUpperCase();
return '000000'.substring(string.length) + string;
};
convert.hex.rgb = function (args) {
- var match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);
+ const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);
if (!match) {
return [0, 0, 0];
}
- var colorString = match[0];
+ let colorString = match[0];
if (match[0].length === 3) {
- colorString = colorString.split('').map(function (char) {
+ colorString = colorString.split('').map(char => {
return char + char;
}).join('');
}
- var integer = parseInt(colorString, 16);
- var r = (integer >> 16) & 0xFF;
- var g = (integer >> 8) & 0xFF;
- var b = integer & 0xFF;
+ const integer = parseInt(colorString, 16);
+ const r = (integer >> 16) & 0xFF;
+ const g = (integer >> 8) & 0xFF;
+ const b = integer & 0xFF;
return [r, g, b];
};
convert.rgb.hcg = function (rgb) {
- var r = rgb[0] / 255;
- var g = rgb[1] / 255;
- var b = rgb[2] / 255;
- var max = Math.max(Math.max(r, g), b);
- var min = Math.min(Math.min(r, g), b);
- var chroma = (max - min);
- var grayscale;
- var hue;
+ const r = rgb[0] / 255;
+ const g = rgb[1] / 255;
+ const b = rgb[2] / 255;
+ const max = Math.max(Math.max(r, g), b);
+ const min = Math.min(Math.min(r, g), b);
+ const chroma = (max - min);
+ let grayscale;
+ let hue;
if (chroma < 1) {
grayscale = min / (1 - chroma);
@@ -693,7 +665,7 @@ convert.rgb.hcg = function (rgb) {
if (max === g) {
hue = 2 + (b - r) / chroma;
} else {
- hue = 4 + (r - g) / chroma + 4;
+ hue = 4 + (r - g) / chroma;
}
hue /= 6;
@@ -703,17 +675,12 @@ convert.rgb.hcg = function (rgb) {
};
convert.hsl.hcg = function (hsl) {
- var s = hsl[1] / 100;
- var l = hsl[2] / 100;
- var c = 1;
- var f = 0;
+ const s = hsl[1] / 100;
+ const l = hsl[2] / 100;
- if (l < 0.5) {
- c = 2.0 * s * l;
- } else {
- c = 2.0 * s * (1.0 - l);
- }
+ const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));
+ let f = 0;
if (c < 1.0) {
f = (l - 0.5 * c) / (1.0 - c);
}
@@ -722,11 +689,11 @@ convert.hsl.hcg = function (hsl) {
};
convert.hsv.hcg = function (hsv) {
- var s = hsv[1] / 100;
- var v = hsv[2] / 100;
+ const s = hsv[1] / 100;
+ const v = hsv[2] / 100;
- var c = s * v;
- var f = 0;
+ const c = s * v;
+ let f = 0;
if (c < 1.0) {
f = (v - c) / (1 - c);
@@ -736,20 +703,21 @@ convert.hsv.hcg = function (hsv) {
};
convert.hcg.rgb = function (hcg) {
- var h = hcg[0] / 360;
- var c = hcg[1] / 100;
- var g = hcg[2] / 100;
+ const h = hcg[0] / 360;
+ const c = hcg[1] / 100;
+ const g = hcg[2] / 100;
if (c === 0.0) {
return [g * 255, g * 255, g * 255];
}
- var pure = [0, 0, 0];
- var hi = (h % 1) * 6;
- var v = hi % 1;
- var w = 1 - v;
- var mg = 0;
+ const pure = [0, 0, 0];
+ const hi = (h % 1) * 6;
+ const v = hi % 1;
+ const w = 1 - v;
+ let mg = 0;
+ /* eslint-disable max-statements-per-line */
switch (Math.floor(hi)) {
case 0:
pure[0] = 1; pure[1] = v; pure[2] = 0; break;
@@ -764,6 +732,7 @@ convert.hcg.rgb = function (hcg) {
default:
pure[0] = 1; pure[1] = 0; pure[2] = w;
}
+ /* eslint-enable max-statements-per-line */
mg = (1.0 - c) * g;
@@ -775,11 +744,11 @@ convert.hcg.rgb = function (hcg) {
};
convert.hcg.hsv = function (hcg) {
- var c = hcg[1] / 100;
- var g = hcg[2] / 100;
+ const c = hcg[1] / 100;
+ const g = hcg[2] / 100;
- var v = c + g * (1.0 - c);
- var f = 0;
+ const v = c + g * (1.0 - c);
+ let f = 0;
if (v > 0.0) {
f = c / v;
@@ -789,11 +758,11 @@ convert.hcg.hsv = function (hcg) {
};
convert.hcg.hsl = function (hcg) {
- var c = hcg[1] / 100;
- var g = hcg[2] / 100;
+ const c = hcg[1] / 100;
+ const g = hcg[2] / 100;
- var l = g * (1.0 - c) + 0.5 * c;
- var s = 0;
+ const l = g * (1.0 - c) + 0.5 * c;
+ let s = 0;
if (l > 0.0 && l < 0.5) {
s = c / (2 * l);
@@ -806,18 +775,18 @@ convert.hcg.hsl = function (hcg) {
};
convert.hcg.hwb = function (hcg) {
- var c = hcg[1] / 100;
- var g = hcg[2] / 100;
- var v = c + g * (1.0 - c);
+ const c = hcg[1] / 100;
+ const g = hcg[2] / 100;
+ const v = c + g * (1.0 - c);
return [hcg[0], (v - c) * 100, (1 - v) * 100];
};
convert.hwb.hcg = function (hwb) {
- var w = hwb[1] / 100;
- var b = hwb[2] / 100;
- var v = 1 - b;
- var c = v - w;
- var g = 0;
+ const w = hwb[1] / 100;
+ const b = hwb[2] / 100;
+ const v = 1 - b;
+ const c = v - w;
+ let g = 0;
if (c < 1) {
g = (v - c) / (1 - c);
@@ -838,10 +807,12 @@ convert.gray.rgb = function (args) {
return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];
};
-convert.gray.hsl = convert.gray.hsv = function (args) {
+convert.gray.hsl = function (args) {
return [0, 0, args[0]];
};
+convert.gray.hsv = convert.gray.hsl;
+
convert.gray.hwb = function (gray) {
return [0, 100, gray[0]];
};
@@ -855,14 +826,14 @@ convert.gray.lab = function (gray) {
};
convert.gray.hex = function (gray) {
- var val = Math.round(gray[0] / 100 * 255) & 0xFF;
- var integer = (val << 16) + (val << 8) + val;
+ const val = Math.round(gray[0] / 100 * 255) & 0xFF;
+ const integer = (val << 16) + (val << 8) + val;
- var string = integer.toString(16).toUpperCase();
+ const string = integer.toString(16).toUpperCase();
return '000000'.substring(string.length) + string;
};
convert.rgb.gray = function (rgb) {
- var val = (rgb[0] + rgb[1] + rgb[2]) / 3;
+ const val = (rgb[0] + rgb[1] + rgb[2]) / 3;
return [val / 255 * 100];
};
diff --git a/node_modules/wrap-ansi/node_modules/color-convert/index.js b/node_modules/wrap-ansi/node_modules/color-convert/index.js
new file mode 100644
index 00000000..b648e573
--- /dev/null
+++ b/node_modules/wrap-ansi/node_modules/color-convert/index.js
@@ -0,0 +1,81 @@
+const conversions = require('./conversions');
+const route = require('./route');
+
+const convert = {};
+
+const models = Object.keys(conversions);
+
+function wrapRaw(fn) {
+ const wrappedFn = function (...args) {
+ const arg0 = args[0];
+ if (arg0 === undefined || arg0 === null) {
+ return arg0;
+ }
+
+ if (arg0.length > 1) {
+ args = arg0;
+ }
+
+ return fn(args);
+ };
+
+ // Preserve .conversion property if there is one
+ if ('conversion' in fn) {
+ wrappedFn.conversion = fn.conversion;
+ }
+
+ return wrappedFn;
+}
+
+function wrapRounded(fn) {
+ const wrappedFn = function (...args) {
+ const arg0 = args[0];
+
+ if (arg0 === undefined || arg0 === null) {
+ return arg0;
+ }
+
+ if (arg0.length > 1) {
+ args = arg0;
+ }
+
+ const result = fn(args);
+
+ // We're assuming the result is an array here.
+ // see notice in conversions.js; don't use box types
+ // in conversion functions.
+ if (typeof result === 'object') {
+ for (let len = result.length, i = 0; i < len; i++) {
+ result[i] = Math.round(result[i]);
+ }
+ }
+
+ return result;
+ };
+
+ // Preserve .conversion property if there is one
+ if ('conversion' in fn) {
+ wrappedFn.conversion = fn.conversion;
+ }
+
+ return wrappedFn;
+}
+
+models.forEach(fromModel => {
+ convert[fromModel] = {};
+
+ Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});
+ Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});
+
+ const routes = route(fromModel);
+ const routeModels = Object.keys(routes);
+
+ routeModels.forEach(toModel => {
+ const fn = routes[toModel];
+
+ convert[fromModel][toModel] = wrapRounded(fn);
+ convert[fromModel][toModel].raw = wrapRaw(fn);
+ });
+});
+
+module.exports = convert;
diff --git a/node_modules/chalk/node_modules/color-convert/package.json b/node_modules/wrap-ansi/node_modules/color-convert/package.json
index dfbc4714..6e48000c 100644
--- a/node_modules/chalk/node_modules/color-convert/package.json
+++ b/node_modules/wrap-ansi/node_modules/color-convert/package.json
@@ -1,7 +1,7 @@
{
"name": "color-convert",
"description": "Plain color conversion functions",
- "version": "1.9.3",
+ "version": "2.0.1",
"author": "Heather Arthur <fayearthur@gmail.com>",
"license": "MIT",
"repository": "Qix-/color-convert",
@@ -9,6 +9,9 @@
"pretest": "xo",
"test": "node test/basic.js"
},
+ "engines": {
+ "node": ">=7.0.0"
+ },
"keywords": [
"color",
"colour",
@@ -26,7 +29,6 @@
"files": [
"index.js",
"conversions.js",
- "css-keywords.js",
"route.js"
],
"xo": {
@@ -37,10 +39,10 @@
}
},
"devDependencies": {
- "chalk": "1.1.1",
- "xo": "0.11.2"
+ "chalk": "^2.4.2",
+ "xo": "^0.24.0"
},
"dependencies": {
- "color-name": "1.1.3"
+ "color-name": "~1.1.4"
}
}
diff --git a/node_modules/chalk/node_modules/color-convert/route.js b/node_modules/wrap-ansi/node_modules/color-convert/route.js
index 0a1fdea6..1a08521b 100644
--- a/node_modules/chalk/node_modules/color-convert/route.js
+++ b/node_modules/wrap-ansi/node_modules/color-convert/route.js
@@ -1,7 +1,7 @@
-var conversions = require('./conversions');
+const conversions = require('./conversions');
/*
- this function routes a model to all other models.
+ This function routes a model to all other models.
all functions that are routed have a property `.conversion` attached
to the returned synthetic function. This property is an array
@@ -12,11 +12,11 @@ var conversions = require('./conversions');
*/
function buildGraph() {
- var graph = {};
+ const graph = {};
// https://jsperf.com/object-keys-vs-for-in-with-closure/3
- var models = Object.keys(conversions);
+ const models = Object.keys(conversions);
- for (var len = models.length, i = 0; i < len; i++) {
+ for (let len = models.length, i = 0; i < len; i++) {
graph[models[i]] = {
// http://jsperf.com/1-vs-infinity
// micro-opt, but this is simple.
@@ -30,18 +30,18 @@ function buildGraph() {
// https://en.wikipedia.org/wiki/Breadth-first_search
function deriveBFS(fromModel) {
- var graph = buildGraph();
- var queue = [fromModel]; // unshift -> queue -> pop
+ const graph = buildGraph();
+ const queue = [fromModel]; // Unshift -> queue -> pop
graph[fromModel].distance = 0;
while (queue.length) {
- var current = queue.pop();
- var adjacents = Object.keys(conversions[current]);
+ const current = queue.pop();
+ const adjacents = Object.keys(conversions[current]);
- for (var len = adjacents.length, i = 0; i < len; i++) {
- var adjacent = adjacents[i];
- var node = graph[adjacent];
+ for (let len = adjacents.length, i = 0; i < len; i++) {
+ const adjacent = adjacents[i];
+ const node = graph[adjacent];
if (node.distance === -1) {
node.distance = graph[current].distance + 1;
@@ -61,10 +61,10 @@ function link(from, to) {
}
function wrapConversion(toModel, graph) {
- var path = [graph[toModel].parent, toModel];
- var fn = conversions[graph[toModel].parent][toModel];
+ const path = [graph[toModel].parent, toModel];
+ let fn = conversions[graph[toModel].parent][toModel];
- var cur = graph[toModel].parent;
+ let cur = graph[toModel].parent;
while (graph[cur].parent) {
path.unshift(graph[cur].parent);
fn = link(conversions[graph[cur].parent][cur], fn);
@@ -76,16 +76,16 @@ function wrapConversion(toModel, graph) {
}
module.exports = function (fromModel) {
- var graph = deriveBFS(fromModel);
- var conversion = {};
+ const graph = deriveBFS(fromModel);
+ const conversion = {};
- var models = Object.keys(graph);
- for (var len = models.length, i = 0; i < len; i++) {
- var toModel = models[i];
- var node = graph[toModel];
+ const models = Object.keys(graph);
+ for (let len = models.length, i = 0; i < len; i++) {
+ const toModel = models[i];
+ const node = graph[toModel];
if (node.parent === null) {
- // no possible conversion, or this node is the source model.
+ // No possible conversion, or this node is the source model.
continue;
}
diff --git a/node_modules/chalk/node_modules/color-name/LICENSE b/node_modules/wrap-ansi/node_modules/color-name/LICENSE
index c6b10012..c6b10012 100644
--- a/node_modules/chalk/node_modules/color-name/LICENSE
+++ b/node_modules/wrap-ansi/node_modules/color-name/LICENSE
diff --git a/node_modules/chalk/node_modules/color-name/README.md b/node_modules/wrap-ansi/node_modules/color-name/README.md
index 932b9791..932b9791 100644
--- a/node_modules/chalk/node_modules/color-name/README.md
+++ b/node_modules/wrap-ansi/node_modules/color-name/README.md
diff --git a/node_modules/chalk/node_modules/color-name/index.js b/node_modules/wrap-ansi/node_modules/color-name/index.js
index b7c198a6..b7c198a6 100644
--- a/node_modules/chalk/node_modules/color-name/index.js
+++ b/node_modules/wrap-ansi/node_modules/color-name/index.js
diff --git a/node_modules/chalk/node_modules/color-name/package.json b/node_modules/wrap-ansi/node_modules/color-name/package.json
index d061123e..782dd828 100644
--- a/node_modules/chalk/node_modules/color-name/package.json
+++ b/node_modules/wrap-ansi/node_modules/color-name/package.json
@@ -1,25 +1,28 @@
-{
- "name": "color-name",
- "version": "1.1.3",
- "description": "A list of color names and its values",
- "main": "index.js",
- "scripts": {
- "test": "node test.js"
- },
- "repository": {
- "type": "git",
- "url": "git@github.com:dfcreative/color-name.git"
- },
- "keywords": [
- "color-name",
- "color",
- "color-keyword",
- "keyword"
- ],
- "author": "DY <dfcreative@gmail.com>",
- "license": "MIT",
- "bugs": {
- "url": "https://github.com/dfcreative/color-name/issues"
- },
- "homepage": "https://github.com/dfcreative/color-name"
-}
+{
+ "name": "color-name",
+ "version": "1.1.4",
+ "description": "A list of color names and its values",
+ "main": "index.js",
+ "files": [
+ "index.js"
+ ],
+ "scripts": {
+ "test": "node test.js"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git@github.com:colorjs/color-name.git"
+ },
+ "keywords": [
+ "color-name",
+ "color",
+ "color-keyword",
+ "keyword"
+ ],
+ "author": "DY <dfcreative@gmail.com>",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/colorjs/color-name/issues"
+ },
+ "homepage": "https://github.com/colorjs/color-name"
+}