Fixes to NPM...

modified:   node_modules/.package-lock.json
	deleted:    node_modules/array-union/index.d.ts
	deleted:    node_modules/array-union/index.js
	deleted:    node_modules/array-union/license
	deleted:    node_modules/array-union/package.json
	deleted:    node_modules/array-union/readme.md
	modified:   node_modules/cliui/CHANGELOG.md
	modified:   node_modules/cliui/package.json
	modified:   node_modules/fast-glob/out/index.d.ts
	modified:   node_modules/fast-glob/out/index.js
	modified:   node_modules/fast-glob/out/managers/patterns.d.ts
	modified:   node_modules/fast-glob/out/managers/patterns.js
	modified:   node_modules/fast-glob/out/managers/tasks.d.ts
	modified:   node_modules/fast-glob/out/managers/tasks.js
	modified:   node_modules/fast-glob/out/providers/async.d.ts
	modified:   node_modules/fast-glob/out/providers/async.js
	modified:   node_modules/fast-glob/out/providers/filters/deep.d.ts
	modified:   node_modules/fast-glob/out/providers/filters/deep.js
	modified:   node_modules/fast-glob/out/providers/filters/entry.d.ts
	modified:   node_modules/fast-glob/out/providers/filters/entry.js
	modified:   node_modules/fast-glob/out/providers/filters/error.d.ts
	modified:   node_modules/fast-glob/out/providers/filters/error.js
	modified:   node_modules/fast-glob/out/providers/matchers/matcher.d.ts
	modified:   node_modules/fast-glob/out/providers/matchers/matcher.js
	modified:   node_modules/fast-glob/out/providers/matchers/partial.d.ts
	modified:   node_modules/fast-glob/out/providers/matchers/partial.js
	modified:   node_modules/fast-glob/out/providers/provider.d.ts
	modified:   node_modules/fast-glob/out/providers/provider.js
	modified:   node_modules/fast-glob/out/providers/stream.d.ts
	modified:   node_modules/fast-glob/out/providers/stream.js
	modified:   node_modules/fast-glob/out/providers/sync.d.ts
	modified:   node_modules/fast-glob/out/providers/sync.js
	modified:   node_modules/fast-glob/out/providers/transformers/entry.d.ts
	modified:   node_modules/fast-glob/out/providers/transformers/entry.js
	modified:   node_modules/fast-glob/out/readers/reader.d.ts
	modified:   node_modules/fast-glob/out/readers/reader.js
	modified:   node_modules/fast-glob/out/readers/stream.d.ts
	modified:   node_modules/fast-glob/out/readers/stream.js
	modified:   node_modules/fast-glob/out/readers/sync.d.ts
	modified:   node_modules/fast-glob/out/readers/sync.js
	modified:   node_modules/fast-glob/out/settings.d.ts
	modified:   node_modules/fast-glob/out/settings.js
	modified:   node_modules/fast-glob/out/types/index.d.ts
	modified:   node_modules/fast-glob/out/types/index.js
	modified:   node_modules/fast-glob/out/utils/array.d.ts
	modified:   node_modules/fast-glob/out/utils/array.js
	modified:   node_modules/fast-glob/out/utils/errno.d.ts
	modified:   node_modules/fast-glob/out/utils/errno.js
	modified:   node_modules/fast-glob/out/utils/fs.d.ts
	modified:   node_modules/fast-glob/out/utils/fs.js
	modified:   node_modules/fast-glob/out/utils/index.d.ts
	modified:   node_modules/fast-glob/out/utils/index.js
	modified:   node_modules/fast-glob/out/utils/path.d.ts
	modified:   node_modules/fast-glob/out/utils/path.js
	modified:   node_modules/fast-glob/out/utils/pattern.d.ts
	modified:   node_modules/fast-glob/out/utils/pattern.js
	modified:   node_modules/fast-glob/out/utils/stream.d.ts
	modified:   node_modules/fast-glob/out/utils/stream.js
	modified:   node_modules/fast-glob/out/utils/string.d.ts
	modified:   node_modules/fast-glob/out/utils/string.js
	modified:   node_modules/fast-glob/package.json
	modified:   node_modules/fastq/README.md
	modified:   node_modules/fastq/index.d.ts
	modified:   node_modules/fastq/package.json
	modified:   node_modules/fastq/queue.js
	modified:   node_modules/fastq/test/promise.js
	deleted:    node_modules/fs-extra/CHANGELOG.md
	modified:   node_modules/fs-extra/README.md
	deleted:    node_modules/fs-extra/lib/copy-sync/copy-sync.js
	deleted:    node_modules/fs-extra/lib/copy-sync/index.js
	modified:   node_modules/fs-extra/lib/copy/copy.js
	modified:   node_modules/fs-extra/lib/copy/index.js
	modified:   node_modules/fs-extra/lib/ensure/index.js
	modified:   node_modules/fs-extra/lib/fs/index.js
	modified:   node_modules/fs-extra/lib/index.js
	modified:   node_modules/fs-extra/lib/json/output-json-sync.js
	modified:   node_modules/fs-extra/lib/json/output-json.js
	deleted:    node_modules/fs-extra/lib/move-sync/index.js
	deleted:    node_modules/fs-extra/lib/move-sync/move-sync.js
	modified:   node_modules/fs-extra/lib/move/index.js
	modified:   node_modules/fs-extra/lib/move/move.js
	deleted:    node_modules/fs-extra/lib/output/index.js
	modified:   node_modules/fs-extra/lib/remove/index.js
	deleted:    node_modules/fs-extra/lib/remove/rimraf.js
	modified:   node_modules/fs-extra/package.json
	deleted:    node_modules/globby/gitignore.js
	modified:   node_modules/globby/index.d.ts
	modified:   node_modules/globby/index.js
	modified:   node_modules/globby/package.json
	modified:   node_modules/globby/readme.md
	deleted:    node_modules/globby/stream-utils.js
	deleted:    node_modules/globby/to-path.js
	modified:   node_modules/graceful-fs/LICENSE
	modified:   node_modules/graceful-fs/graceful-fs.js
	modified:   node_modules/graceful-fs/package.json
	modified:   node_modules/graceful-fs/polyfills.js
	modified:   node_modules/ignore/README.md
	modified:   node_modules/ignore/index.js
	modified:   node_modules/ignore/legacy.js
	modified:   node_modules/ignore/package.json
	modified:   node_modules/lilconfig/dist/index.js
	modified:   node_modules/lilconfig/package.json
	modified:   node_modules/lilconfig/readme.md
	deleted:    node_modules/micromatch/CHANGELOG.md
	modified:   node_modules/micromatch/README.md
	modified:   node_modules/micromatch/index.js
	modified:   node_modules/micromatch/package.json
	modified:   node_modules/nanoid/bin/nanoid.cjs
	modified:   node_modules/nanoid/index.browser.cjs
	modified:   node_modules/nanoid/index.browser.js
	deleted:    node_modules/nanoid/index.dev.js
	deleted:    node_modules/nanoid/index.prod.js
	modified:   node_modules/nanoid/nanoid.js
	modified:   node_modules/nanoid/package.json
	modified:   node_modules/postcss-cli/index.js
	modified:   node_modules/postcss-cli/package.json
	modified:   node_modules/postcss-load-config/README.md
	modified:   node_modules/postcss-load-config/package.json
	modified:   node_modules/postcss-load-config/src/index.d.ts
	modified:   node_modules/postcss-load-config/src/index.js
	modified:   node_modules/postcss-load-config/src/req.js
	modified:   node_modules/postcss/README.md
	modified:   node_modules/postcss/lib/at-rule.d.ts
	modified:   node_modules/postcss/lib/comment.d.ts
	modified:   node_modules/postcss/lib/container.d.ts
	modified:   node_modules/postcss/lib/container.js
	modified:   node_modules/postcss/lib/css-syntax-error.d.ts
	modified:   node_modules/postcss/lib/declaration.d.ts
	modified:   node_modules/postcss/lib/document.d.ts
	modified:   node_modules/postcss/lib/fromJSON.d.ts
	modified:   node_modules/postcss/lib/input.d.ts
	modified:   node_modules/postcss/lib/input.js
	modified:   node_modules/postcss/lib/lazy-result.d.ts
	modified:   node_modules/postcss/lib/list.d.ts
	modified:   node_modules/postcss/lib/list.js
	modified:   node_modules/postcss/lib/map-generator.js
	modified:   node_modules/postcss/lib/no-work-result.d.ts
	modified:   node_modules/postcss/lib/node.d.ts
	modified:   node_modules/postcss/lib/parse.d.ts
	modified:   node_modules/postcss/lib/parser.js
	modified:   node_modules/postcss/lib/postcss.d.ts
	modified:   node_modules/postcss/lib/postcss.js
	modified:   node_modules/postcss/lib/previous-map.d.ts
	modified:   node_modules/postcss/lib/processor.d.ts
	modified:   node_modules/postcss/lib/processor.js
	modified:   node_modules/postcss/lib/result.d.ts
	modified:   node_modules/postcss/lib/root.d.ts
	modified:   node_modules/postcss/lib/root.js
	modified:   node_modules/postcss/lib/rule.d.ts
	modified:   node_modules/postcss/lib/stringifier.d.ts
	modified:   node_modules/postcss/lib/stringify.d.ts
	modified:   node_modules/postcss/lib/warning.d.ts
	modified:   node_modules/postcss/package.json
	modified:   node_modules/slash/index.d.ts
	modified:   node_modules/slash/index.js
	modified:   node_modules/slash/package.json
	modified:   node_modules/slash/readme.md
	modified:   node_modules/yaml/LICENSE
	modified:   node_modules/yaml/README.md
	deleted:    node_modules/yaml/browser/dist/PlainValue-b8036b75.js
	deleted:    node_modules/yaml/browser/dist/Schema-e94716c8.js
	modified:   node_modules/yaml/browser/dist/index.js
	deleted:    node_modules/yaml/browser/dist/legacy-exports.js
	deleted:    node_modules/yaml/browser/dist/package.json
	deleted:    node_modules/yaml/browser/dist/parse-cst.js
	deleted:    node_modules/yaml/browser/dist/resolveSeq-492ab440.js
	deleted:    node_modules/yaml/browser/dist/types.js
	modified:   node_modules/yaml/browser/dist/util.js
	deleted:    node_modules/yaml/browser/dist/warnings-df54cb69.js
	modified:   node_modules/yaml/browser/index.js
	deleted:    node_modules/yaml/browser/map.js
	deleted:    node_modules/yaml/browser/pair.js
	deleted:    node_modules/yaml/browser/parse-cst.js
	deleted:    node_modules/yaml/browser/scalar.js
	deleted:    node_modules/yaml/browser/schema.js
	deleted:    node_modules/yaml/browser/seq.js
	deleted:    node_modules/yaml/browser/types.js
	deleted:    node_modules/yaml/browser/types/binary.js
	deleted:    node_modules/yaml/browser/types/omap.js
	deleted:    node_modules/yaml/browser/types/pairs.js
	deleted:    node_modules/yaml/browser/types/set.js
	deleted:    node_modules/yaml/browser/types/timestamp.js
	deleted:    node_modules/yaml/browser/util.js
	deleted:    node_modules/yaml/dist/Document-9b4560a1.js
	deleted:    node_modules/yaml/dist/PlainValue-ec8e588e.js
	deleted:    node_modules/yaml/dist/Schema-88e323a7.js
	modified:   node_modules/yaml/dist/index.js
	deleted:    node_modules/yaml/dist/legacy-exports.js
	deleted:    node_modules/yaml/dist/parse-cst.js
	deleted:    node_modules/yaml/dist/resolveSeq-d03cb037.js
	modified:   node_modules/yaml/dist/test-events.js
	deleted:    node_modules/yaml/dist/types.js
	modified:   node_modules/yaml/dist/util.js
	deleted:    node_modules/yaml/dist/warnings-1000a372.js
	deleted:    node_modules/yaml/index.d.ts
	deleted:    node_modules/yaml/index.js
	deleted:    node_modules/yaml/map.js
	modified:   node_modules/yaml/package.json
	deleted:    node_modules/yaml/pair.js
	deleted:    node_modules/yaml/parse-cst.d.ts
	deleted:    node_modules/yaml/parse-cst.js
	deleted:    node_modules/yaml/scalar.js
	deleted:    node_modules/yaml/schema.js
	deleted:    node_modules/yaml/seq.js
	deleted:    node_modules/yaml/types.d.ts
	deleted:    node_modules/yaml/types.js
	deleted:    node_modules/yaml/types.mjs
	deleted:    node_modules/yaml/types/binary.js
	deleted:    node_modules/yaml/types/omap.js
	deleted:    node_modules/yaml/types/pairs.js
	deleted:    node_modules/yaml/types/set.js
	deleted:    node_modules/yaml/types/timestamp.js
	modified:   node_modules/yaml/util.d.ts
	modified:   node_modules/yaml/util.js
	deleted:    node_modules/yaml/util.mjs
	modified:   node_modules/yargs-parser/CHANGELOG.md
	modified:   node_modules/yargs-parser/build/index.cjs
	modified:   node_modules/yargs-parser/build/lib/index.js
	modified:   node_modules/yargs-parser/build/lib/yargs-parser.js
	modified:   node_modules/yargs-parser/package.json
	modified:   node_modules/yargs/build/index.cjs
	modified:   node_modules/yargs/build/lib/command.js
	modified:   node_modules/yargs/build/lib/completion-templates.js
	modified:   node_modules/yargs/build/lib/completion.js
	modified:   node_modules/yargs/build/lib/usage.js
	modified:   node_modules/yargs/build/lib/validation.js
	modified:   node_modules/yargs/build/lib/yargs-factory.js
	modified:   node_modules/yargs/build/lib/yerror.js
	modified:   node_modules/yargs/lib/platform-shims/esm.mjs
	modified:   node_modules/yargs/locales/en.json
	modified:   node_modules/yargs/locales/fi.json
	modified:   node_modules/yargs/locales/ru.json
	modified:   node_modules/yargs/package.json
	modified:   package-lock.json
	modified:   package.json
	modified:   public/about/index.html
	modified:   public/access/index.html
	modified:   public/blog/index.html
	modified:   public/categories/index.html
	modified:   public/index.html
	modified:   public/manifesto/index.html
	modified:   public/posts/apple-breaks-privacy/index.html
	modified:   public/posts/index.html
	modified:   public/posts/main_street_against_big_tech/index.html
	modified:   public/posts/what_is_done_with_personal_data/index.html
	modified:   public/projects/index.html
	modified:   public/tags/index.html

	.hugo_build.lock
	go.mod
	go.sum
	node_modules/.bin/autoprefixer
	node_modules/.bin/browserslist
	node_modules/.bin/update-browserslist-db
	node_modules/autoprefixer/
	node_modules/browserslist/
	node_modules/caniuse-lite/
	node_modules/cliui/build/index.d.cts
	node_modules/electron-to-chromium/
	node_modules/fast-glob/out/readers/async.d.ts
	node_modules/fast-glob/out/readers/async.js
	node_modules/fraction.js/
	node_modules/fs-extra/lib/copy/copy-sync.js
	node_modules/fs-extra/lib/esm.mjs
	node_modules/fs-extra/lib/move/move-sync.js
	node_modules/fs-extra/lib/output-file/
	node_modules/globby/ignore.js
	node_modules/globby/node_modules/
	node_modules/globby/utilities.js
	node_modules/lilconfig/LICENSE
	node_modules/node-releases/
	node_modules/normalize-range/
	node_modules/postcss-value-parser/
	node_modules/postcss/lib/postcss.d.mts
	node_modules/update-browserslist-db/
	node_modules/yaml/browser/dist/compose/
	node_modules/yaml/browser/dist/doc/
	node_modules/yaml/browser/dist/errors.js
	node_modules/yaml/browser/dist/log.js
	node_modules/yaml/browser/dist/node_modules/
	node_modules/yaml/browser/dist/nodes/
	node_modules/yaml/browser/dist/parse/
	node_modules/yaml/browser/dist/public-api.js
	node_modules/yaml/browser/dist/schema/
	node_modules/yaml/browser/dist/stringify/
	node_modules/yaml/browser/dist/visit.js
	node_modules/yaml/browser/package.json
	node_modules/yaml/dist/compose/
	node_modules/yaml/dist/doc/
	node_modules/yaml/dist/errors.d.ts
	node_modules/yaml/dist/errors.js
	node_modules/yaml/dist/index.d.ts
	node_modules/yaml/dist/log.d.ts
	node_modules/yaml/dist/log.js
	node_modules/yaml/dist/nodes/
	node_modules/yaml/dist/options.d.ts
	node_modules/yaml/dist/parse/
	node_modules/yaml/dist/public-api.d.ts
	node_modules/yaml/dist/public-api.js
	node_modules/yaml/dist/schema/
	node_modules/yaml/dist/stringify/
	node_modules/yaml/dist/test-events.d.ts
	node_modules/yaml/dist/util.d.ts
	node_modules/yaml/dist/visit.d.ts
	node_modules/yaml/dist/visit.js
	node_modules/yargs/browser.d.ts
	node_modules/yargs/locales/cs.json
	node_modules/yargs/yargs.mjs
	public/css/main.min.c5514d3530979d291f3497facc20da1cec870028dbc2a3630b64bab8721bbe49.css
	resources/_gen/assets/sass/sass/style.sass_4d6f00452a35742ddbb489cb3703195e.content
	resources/_gen/assets/sass/sass/style.sass_4d6f00452a35742ddbb489cb3703195e.json
	resources/_gen/assets/sass/sass/style.sass_c87a2fc9dae9a546a3e3f1548c147175.content
	resources/_gen/assets/sass/sass/style.sass_c87a2fc9dae9a546a3e3f1548c147175.json
This commit is contained in:
david@federated.company 2023-04-21 10:12:50 -06:00
parent 07b93bfcab
commit d975cc371d
247 changed files with 4890 additions and 21260 deletions

421
node_modules/.package-lock.json generated vendored
View File

@ -1,12 +1,13 @@
{ {
"name": "federated", "name": "www.federated.computer",
"lockfileVersion": 2, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"node_modules/@nodelib/fs.scandir": { "node_modules/@nodelib/fs.scandir": {
"version": "2.1.5", "version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
"dev": true,
"dependencies": { "dependencies": {
"@nodelib/fs.stat": "2.0.5", "@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9" "run-parallel": "^1.1.9"
@ -19,6 +20,7 @@
"version": "2.0.5", "version": "2.0.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
"dev": true,
"engines": { "engines": {
"node": ">= 8" "node": ">= 8"
} }
@ -27,6 +29,7 @@
"version": "1.2.8", "version": "1.2.8",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
"dev": true,
"dependencies": { "dependencies": {
"@nodelib/fs.scandir": "2.1.5", "@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0" "fastq": "^1.6.0"
@ -39,6 +42,7 @@
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
"integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
"dev": true,
"engines": { "engines": {
"node": ">=8" "node": ">=8"
} }
@ -47,6 +51,7 @@
"version": "4.3.0", "version": "4.3.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
"integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
"dev": true,
"dependencies": { "dependencies": {
"color-convert": "^2.0.1" "color-convert": "^2.0.1"
}, },
@ -61,6 +66,7 @@
"version": "3.1.2", "version": "3.1.2",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
"integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
"dev": true,
"dependencies": { "dependencies": {
"normalize-path": "^3.0.0", "normalize-path": "^3.0.0",
"picomatch": "^2.0.4" "picomatch": "^2.0.4"
@ -69,21 +75,44 @@
"node": ">= 8" "node": ">= 8"
} }
}, },
"node_modules/array-union": { "node_modules/autoprefixer": {
"version": "3.0.1", "version": "10.4.14",
"resolved": "https://registry.npmjs.org/array-union/-/array-union-3.0.1.tgz", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz",
"integrity": "sha512-1OvF9IbWwaeiM9VhzYXVQacMibxpXOMYVNIvMtKRyX9SImBXpKcFr8XvFDeEslCyuH/t6KRt7HEO94AlP8Iatw==", "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==",
"engines": { "dev": true,
"node": ">=12" "funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
}, },
"funding": { {
"url": "https://github.com/sponsors/sindresorhus" "type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/autoprefixer"
}
],
"dependencies": {
"browserslist": "^4.21.5",
"caniuse-lite": "^1.0.30001464",
"fraction.js": "^4.2.0",
"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/binary-extensions": { "node_modules/binary-extensions": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
"integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
"dev": true,
"engines": { "engines": {
"node": ">=8" "node": ">=8"
} }
@ -92,6 +121,7 @@
"version": "3.0.2", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"dev": true,
"dependencies": { "dependencies": {
"fill-range": "^7.0.1" "fill-range": "^7.0.1"
}, },
@ -99,10 +129,59 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/browserslist": {
"version": "4.21.5",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz",
"integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==",
"dev": true,
"funding": [
{
"type": "opencollective",
"url": "https://opencollective.com/browserslist"
},
{
"type": "tidelift",
"url": "https://tidelift.com/funding/github/npm/browserslist"
}
],
"dependencies": {
"caniuse-lite": "^1.0.30001449",
"electron-to-chromium": "^1.4.284",
"node-releases": "^2.0.8",
"update-browserslist-db": "^1.0.10"
},
"bin": {
"browserslist": "cli.js"
},
"engines": {
"node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7"
}
},
"node_modules/caniuse-lite": {
"version": "1.0.30001481",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001481.tgz",
"integrity": "sha512-KCqHwRnaa1InZBtqXzP98LPg0ajCVujMKjqKDhZEthIpAsJl/YEIa3YvXjGXPVqzZVguccuu7ga9KOE1J9rKPQ==",
"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/chokidar": { "node_modules/chokidar": {
"version": "3.5.3", "version": "3.5.3",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
"integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
"dev": true,
"funding": [ "funding": [
{ {
"type": "individual", "type": "individual",
@ -126,19 +205,24 @@
} }
}, },
"node_modules/cliui": { "node_modules/cliui": {
"version": "7.0.4", "version": "8.0.1",
"resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz",
"integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==",
"dev": true,
"dependencies": { "dependencies": {
"string-width": "^4.2.0", "string-width": "^4.2.0",
"strip-ansi": "^6.0.0", "strip-ansi": "^6.0.1",
"wrap-ansi": "^7.0.0" "wrap-ansi": "^7.0.0"
},
"engines": {
"node": ">=12"
} }
}, },
"node_modules/color-convert": { "node_modules/color-convert": {
"version": "2.0.1", "version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"dependencies": { "dependencies": {
"color-name": "~1.1.4" "color-name": "~1.1.4"
}, },
@ -149,12 +233,14 @@
"node_modules/color-name": { "node_modules/color-name": {
"version": "1.1.4", "version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
}, },
"node_modules/dependency-graph": { "node_modules/dependency-graph": {
"version": "0.11.0", "version": "0.11.0",
"resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz", "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.11.0.tgz",
"integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==", "integrity": "sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==",
"dev": true,
"engines": { "engines": {
"node": ">= 0.6.0" "node": ">= 0.6.0"
} }
@ -163,6 +249,7 @@
"version": "3.0.1", "version": "3.0.1",
"resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
"integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
"dev": true,
"dependencies": { "dependencies": {
"path-type": "^4.0.0" "path-type": "^4.0.0"
}, },
@ -170,23 +257,32 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/electron-to-chromium": {
"version": "1.4.368",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.368.tgz",
"integrity": "sha512-e2aeCAixCj9M7nJxdB/wDjO6mbYX+lJJxSJCXDzlr5YPGYVofuJwGN9nKg2o6wWInjX6XmxRinn3AeJMK81ltw==",
"dev": true
},
"node_modules/emoji-regex": { "node_modules/emoji-regex": {
"version": "8.0.0", "version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
"integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
"dev": true
}, },
"node_modules/escalade": { "node_modules/escalade": {
"version": "3.1.1", "version": "3.1.1",
"resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
"integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
"dev": true,
"engines": { "engines": {
"node": ">=6" "node": ">=6"
} }
}, },
"node_modules/fast-glob": { "node_modules/fast-glob": {
"version": "3.2.11", "version": "3.2.12",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz",
"integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==",
"dev": true,
"dependencies": { "dependencies": {
"@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3", "@nodelib/fs.walk": "^1.2.3",
@ -199,9 +295,10 @@
} }
}, },
"node_modules/fastq": { "node_modules/fastq": {
"version": "1.13.0", "version": "1.15.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
"integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
"dev": true,
"dependencies": { "dependencies": {
"reusify": "^1.0.4" "reusify": "^1.0.4"
} }
@ -210,6 +307,7 @@
"version": "7.0.1", "version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"dev": true,
"dependencies": { "dependencies": {
"to-regex-range": "^5.0.1" "to-regex-range": "^5.0.1"
}, },
@ -217,23 +315,38 @@
"node": ">=8" "node": ">=8"
} }
}, },
"node_modules/fraction.js": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz",
"integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==",
"dev": true,
"engines": {
"node": "*"
},
"funding": {
"type": "patreon",
"url": "https://www.patreon.com/infusion"
}
},
"node_modules/fs-extra": { "node_modules/fs-extra": {
"version": "10.0.0", "version": "11.1.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz",
"integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==",
"dev": true,
"dependencies": { "dependencies": {
"graceful-fs": "^4.2.0", "graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1", "jsonfile": "^6.0.1",
"universalify": "^2.0.0" "universalify": "^2.0.0"
}, },
"engines": { "engines": {
"node": ">=12" "node": ">=14.14"
} }
}, },
"node_modules/get-caller-file": { "node_modules/get-caller-file": {
"version": "2.0.5", "version": "2.0.5",
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true,
"engines": { "engines": {
"node": "6.* || 8.* || >= 10.*" "node": "6.* || 8.* || >= 10.*"
} }
@ -242,6 +355,7 @@
"version": "9.0.0", "version": "9.0.0",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz",
"integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==",
"dev": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
}, },
@ -253,6 +367,7 @@
"version": "5.1.2", "version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
"dev": true,
"dependencies": { "dependencies": {
"is-glob": "^4.0.1" "is-glob": "^4.0.1"
}, },
@ -261,14 +376,14 @@
} }
}, },
"node_modules/globby": { "node_modules/globby": {
"version": "12.2.0", "version": "13.1.4",
"resolved": "https://registry.npmjs.org/globby/-/globby-12.2.0.tgz", "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz",
"integrity": "sha512-wiSuFQLZ+urS9x2gGPl1H5drc5twabmm4m2gTR27XDFyjUHJUNsS8o/2aKyIF6IoBaR630atdher0XJ5g6OMmA==", "integrity": "sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==",
"dev": true,
"dependencies": { "dependencies": {
"array-union": "^3.0.1",
"dir-glob": "^3.0.1", "dir-glob": "^3.0.1",
"fast-glob": "^3.2.7", "fast-glob": "^3.2.11",
"ignore": "^5.1.9", "ignore": "^5.2.0",
"merge2": "^1.4.1", "merge2": "^1.4.1",
"slash": "^4.0.0" "slash": "^4.0.0"
}, },
@ -279,15 +394,29 @@
"url": "https://github.com/sponsors/sindresorhus" "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": { "node_modules/graceful-fs": {
"version": "4.2.9", "version": "4.2.11",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz",
"integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
"dev": true
}, },
"node_modules/ignore": { "node_modules/ignore": {
"version": "5.2.0", "version": "5.2.4",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz",
"integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==",
"dev": true,
"engines": { "engines": {
"node": ">= 4" "node": ">= 4"
} }
@ -296,6 +425,7 @@
"version": "2.1.0", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
"integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
"dev": true,
"dependencies": { "dependencies": {
"binary-extensions": "^2.0.0" "binary-extensions": "^2.0.0"
}, },
@ -307,6 +437,7 @@
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
"integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
"dev": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@ -315,6 +446,7 @@
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
"integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
"dev": true,
"engines": { "engines": {
"node": ">=8" "node": ">=8"
} }
@ -323,6 +455,7 @@
"version": "4.0.3", "version": "4.0.3",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
"integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
"dev": true,
"dependencies": { "dependencies": {
"is-extglob": "^2.1.1" "is-extglob": "^2.1.1"
}, },
@ -334,6 +467,7 @@
"version": "7.0.0", "version": "7.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
"integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
"dev": true,
"engines": { "engines": {
"node": ">=0.12.0" "node": ">=0.12.0"
} }
@ -342,6 +476,7 @@
"version": "6.1.0", "version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"dev": true,
"dependencies": { "dependencies": {
"universalify": "^2.0.0" "universalify": "^2.0.0"
}, },
@ -350,9 +485,10 @@
} }
}, },
"node_modules/lilconfig": { "node_modules/lilconfig": {
"version": "2.0.4", "version": "2.1.0",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
"integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
"dev": true,
"engines": { "engines": {
"node": ">=10" "node": ">=10"
} }
@ -361,27 +497,35 @@
"version": "1.4.1", "version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
"dev": true,
"engines": { "engines": {
"node": ">= 8" "node": ">= 8"
} }
}, },
"node_modules/micromatch": { "node_modules/micromatch": {
"version": "4.0.4", "version": "4.0.5",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
"integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
"dev": true,
"dependencies": { "dependencies": {
"braces": "^3.0.1", "braces": "^3.0.2",
"picomatch": "^2.2.3" "picomatch": "^2.3.1"
}, },
"engines": { "engines": {
"node": ">=8.6" "node": ">=8.6"
} }
}, },
"node_modules/nanoid": { "node_modules/nanoid": {
"version": "3.3.0", "version": "3.3.6",
"resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.0.tgz", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz",
"integrity": "sha512-JzxqqT5u/x+/KOFSd7JP15DOo9nOoHpx6DYatqIHUW2+flybkm+mdcraotSQR5WcnZr+qhGVh8Ted0KdfSMxlg==", "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==",
"peer": true, "dev": true,
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"bin": { "bin": {
"nanoid": "bin/nanoid.cjs" "nanoid": "bin/nanoid.cjs"
}, },
@ -389,10 +533,26 @@
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
} }
}, },
"node_modules/node-releases": {
"version": "2.0.10",
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz",
"integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==",
"dev": true
},
"node_modules/normalize-path": { "node_modules/normalize-path": {
"version": "3.0.0", "version": "3.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
"integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "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": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@ -401,6 +561,7 @@
"version": "4.0.0", "version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
"integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
"dev": true,
"engines": { "engines": {
"node": ">=8" "node": ">=8"
} }
@ -408,12 +569,14 @@
"node_modules/picocolors": { "node_modules/picocolors": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
"integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
"dev": true
}, },
"node_modules/picomatch": { "node_modules/picomatch": {
"version": "2.3.1", "version": "2.3.1",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
"integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
"dev": true,
"engines": { "engines": {
"node": ">=8.6" "node": ">=8.6"
}, },
@ -425,75 +588,92 @@
"version": "2.3.0", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"dev": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
}, },
"node_modules/postcss": { "node_modules/postcss": {
"version": "8.4.6", "version": "8.4.23",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.6.tgz", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz",
"integrity": "sha512-OovjwIzs9Te46vlEx7+uXB0PLijpwjXGKXjVGGPIGubGpq7uh5Xgf6D6FiJ/SzJMBosHDp6a2hiXOS97iBXcaA==", "integrity": "sha512-bQ3qMcpF6A/YjR55xtoTr0jGOlnPOKAIMdOWiv0EIT6HVPEaJiJB4NLljSbiHoC2RX7DN5Uvjtpbg1NPdwv1oA==",
"peer": true, "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": { "dependencies": {
"nanoid": "^3.2.0", "nanoid": "^3.3.6",
"picocolors": "^1.0.0", "picocolors": "^1.0.0",
"source-map-js": "^1.0.2" "source-map-js": "^1.0.2"
}, },
"engines": { "engines": {
"node": "^10 || ^12 || >=14" "node": "^10 || ^12 || >=14"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/postcss/"
} }
}, },
"node_modules/postcss-cli": { "node_modules/postcss-cli": {
"version": "9.1.0", "version": "10.1.0",
"resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-9.1.0.tgz", "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-10.1.0.tgz",
"integrity": "sha512-zvDN2ADbWfza42sAnj+O2uUWyL0eRL1V+6giM2vi4SqTR3gTYy8XzcpfwccayF2szcUif0HMmXiEaDv9iEhcpw==", "integrity": "sha512-Zu7PLORkE9YwNdvOeOVKPmWghprOtjFQU3srMUGbdz3pHJiFh7yZ4geiZFMkjMfB0mtTFR3h8RemR62rPkbOPA==",
"dev": true,
"dependencies": { "dependencies": {
"chokidar": "^3.3.0", "chokidar": "^3.3.0",
"dependency-graph": "^0.11.0", "dependency-graph": "^0.11.0",
"fs-extra": "^10.0.0", "fs-extra": "^11.0.0",
"get-stdin": "^9.0.0", "get-stdin": "^9.0.0",
"globby": "^12.0.0", "globby": "^13.0.0",
"picocolors": "^1.0.0", "picocolors": "^1.0.0",
"postcss-load-config": "^3.0.0", "postcss-load-config": "^4.0.0",
"postcss-reporter": "^7.0.0", "postcss-reporter": "^7.0.0",
"pretty-hrtime": "^1.0.3", "pretty-hrtime": "^1.0.3",
"read-cache": "^1.0.0", "read-cache": "^1.0.0",
"slash": "^4.0.0", "slash": "^5.0.0",
"yargs": "^17.0.0" "yargs": "^17.0.0"
}, },
"bin": { "bin": {
"postcss": "index.js" "postcss": "index.js"
}, },
"engines": { "engines": {
"node": ">=12" "node": ">=14"
}, },
"peerDependencies": { "peerDependencies": {
"postcss": "^8.0.0" "postcss": "^8.0.0"
} }
}, },
"node_modules/postcss-load-config": { "node_modules/postcss-load-config": {
"version": "3.1.3", "version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.3.tgz", "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz",
"integrity": "sha512-5EYgaM9auHGtO//ljHH+v/aC/TQ5LHXtL7bQajNAUBKUVKiYE8rYpFms7+V26D9FncaGe2zwCoPQsFKb5zF/Hw==", "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==",
"dev": true,
"dependencies": { "dependencies": {
"lilconfig": "^2.0.4", "lilconfig": "^2.0.5",
"yaml": "^1.10.2" "yaml": "^2.1.1"
}, },
"engines": { "engines": {
"node": ">= 10" "node": ">= 14"
}, },
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
"url": "https://opencollective.com/postcss/" "url": "https://opencollective.com/postcss/"
}, },
"peerDependencies": { "peerDependencies": {
"postcss": ">=8.0.9",
"ts-node": ">=9.0.0" "ts-node": ">=9.0.0"
}, },
"peerDependenciesMeta": { "peerDependenciesMeta": {
"postcss": {
"optional": true
},
"ts-node": { "ts-node": {
"optional": true "optional": true
} }
@ -503,6 +683,7 @@
"version": "7.0.5", "version": "7.0.5",
"resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.5.tgz", "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.5.tgz",
"integrity": "sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA==", "integrity": "sha512-glWg7VZBilooZGOFPhN9msJ3FQs19Hie7l5a/eE6WglzYqVeH3ong3ShFcp9kDWJT1g2Y/wd59cocf9XxBtkWA==",
"dev": true,
"dependencies": { "dependencies": {
"picocolors": "^1.0.0", "picocolors": "^1.0.0",
"thenby": "^1.3.4" "thenby": "^1.3.4"
@ -518,10 +699,17 @@
"postcss": "^8.1.0" "postcss": "^8.1.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/pretty-hrtime": { "node_modules/pretty-hrtime": {
"version": "1.0.3", "version": "1.0.3",
"resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
"integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
"dev": true,
"engines": { "engines": {
"node": ">= 0.8" "node": ">= 0.8"
} }
@ -530,6 +718,7 @@
"version": "1.2.3", "version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
"dev": true,
"funding": [ "funding": [
{ {
"type": "github", "type": "github",
@ -549,6 +738,7 @@
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
"integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=",
"dev": true,
"dependencies": { "dependencies": {
"pify": "^2.3.0" "pify": "^2.3.0"
} }
@ -557,6 +747,7 @@
"version": "3.6.0", "version": "3.6.0",
"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
"integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
"dev": true,
"dependencies": { "dependencies": {
"picomatch": "^2.2.1" "picomatch": "^2.2.1"
}, },
@ -567,7 +758,8 @@
"node_modules/require-directory": { "node_modules/require-directory": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
"integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==",
"dev": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@ -576,6 +768,7 @@
"version": "1.0.4", "version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
"dev": true,
"engines": { "engines": {
"iojs": ">=1.0.0", "iojs": ">=1.0.0",
"node": ">=0.10.0" "node": ">=0.10.0"
@ -585,6 +778,7 @@
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
"dev": true,
"funding": [ "funding": [
{ {
"type": "github", "type": "github",
@ -604,11 +798,12 @@
} }
}, },
"node_modules/slash": { "node_modules/slash": {
"version": "4.0.0", "version": "5.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", "resolved": "https://registry.npmjs.org/slash/-/slash-5.0.0.tgz",
"integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", "integrity": "sha512-n6KkmvKS0623igEVj3FF0OZs1gYYJ0o0Hj939yc1fyxl2xt+xYpLnzJB6xBSqOfV9ZFLEWodBBN/heZJahuIJQ==",
"dev": true,
"engines": { "engines": {
"node": ">=12" "node": ">=14.16"
}, },
"funding": { "funding": {
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
@ -618,7 +813,7 @@
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
"integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
"peer": true, "dev": true,
"engines": { "engines": {
"node": ">=0.10.0" "node": ">=0.10.0"
} }
@ -627,6 +822,7 @@
"version": "4.2.3", "version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
"dev": true,
"dependencies": { "dependencies": {
"emoji-regex": "^8.0.0", "emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0", "is-fullwidth-code-point": "^3.0.0",
@ -640,6 +836,7 @@
"version": "6.0.1", "version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
"dev": true,
"dependencies": { "dependencies": {
"ansi-regex": "^5.0.1" "ansi-regex": "^5.0.1"
}, },
@ -650,12 +847,14 @@
"node_modules/thenby": { "node_modules/thenby": {
"version": "1.3.4", "version": "1.3.4",
"resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz", "resolved": "https://registry.npmjs.org/thenby/-/thenby-1.3.4.tgz",
"integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==" "integrity": "sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==",
"dev": true
}, },
"node_modules/to-regex-range": { "node_modules/to-regex-range": {
"version": "5.0.1", "version": "5.0.1",
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
"integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
"dev": true,
"dependencies": { "dependencies": {
"is-number": "^7.0.0" "is-number": "^7.0.0"
}, },
@ -667,14 +866,46 @@
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
"dev": true,
"engines": { "engines": {
"node": ">= 10.0.0" "node": ">= 10.0.0"
} }
}, },
"node_modules/update-browserslist-db": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz",
"integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==",
"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/wrap-ansi": { "node_modules/wrap-ansi": {
"version": "7.0.0", "version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
"dev": true,
"dependencies": { "dependencies": {
"ansi-styles": "^4.0.0", "ansi-styles": "^4.0.0",
"string-width": "^4.1.0", "string-width": "^4.1.0",
@ -691,39 +922,43 @@
"version": "5.0.8", "version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
"integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==",
"dev": true,
"engines": { "engines": {
"node": ">=10" "node": ">=10"
} }
}, },
"node_modules/yaml": { "node_modules/yaml": {
"version": "1.10.2", "version": "2.2.1",
"resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.2.1.tgz",
"integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", "integrity": "sha512-e0WHiYql7+9wr4cWMx3TVQrNwejKaEe7/rHNmQmqRjazfOP5W8PB6Jpebb5o6fIapbz9o9+2ipcaTM2ZwDI6lw==",
"dev": true,
"engines": { "engines": {
"node": ">= 6" "node": ">= 14"
} }
}, },
"node_modules/yargs": { "node_modules/yargs": {
"version": "17.3.1", "version": "17.7.1",
"resolved": "https://registry.npmjs.org/yargs/-/yargs-17.3.1.tgz", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz",
"integrity": "sha512-WUANQeVgjLbNsEmGk20f+nlHgOqzRFpiGWVaBrYGYIGANIIu3lWjoyi0fNlFmJkvfhCZ6BXINe7/W2O2bV4iaA==", "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==",
"dev": true,
"dependencies": { "dependencies": {
"cliui": "^7.0.2", "cliui": "^8.0.1",
"escalade": "^3.1.1", "escalade": "^3.1.1",
"get-caller-file": "^2.0.5", "get-caller-file": "^2.0.5",
"require-directory": "^2.1.1", "require-directory": "^2.1.1",
"string-width": "^4.2.3", "string-width": "^4.2.3",
"y18n": "^5.0.5", "y18n": "^5.0.5",
"yargs-parser": "^21.0.0" "yargs-parser": "^21.1.1"
}, },
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }
}, },
"node_modules/yargs-parser": { "node_modules/yargs-parser": {
"version": "21.0.0", "version": "21.1.1",
"resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.0.tgz", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz",
"integrity": "sha512-z9kApYUOCwoeZ78rfRYYWdiU/iNL6mwwYlkkZfJoyMR1xps+NEBX5X7XmRpxkZHhXJ6+Ey00IwKxBBSW9FIjyA==", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==",
"dev": true,
"engines": { "engines": {
"node": ">=12" "node": ">=12"
} }

25
node_modules/array-union/index.d.ts generated vendored
View File

@ -1,25 +0,0 @@
/**
Create an array of unique values, in order, from the input arrays.
@example
```
import arrayUnion = require('array-union');
arrayUnion([1, 1, 2, 3], [2, 3]);
//=> [1, 2, 3]
arrayUnion(['foo', 'foo', 'bar']);
//=> ['foo', 'bar']
arrayUnion(['🐱', '🦄', '🐻'], ['🦄', '🌈']);
//=> ['🐱', '🦄', '🐻', '🌈']
arrayUnion(['🐱', '🦄'], ['🐻', '🦄'], ['🐶', '🌈', '🌈']);
//=> ['🐱', '🦄', '🐻', '🐶', '🌈']
```
*/
declare function arrayUnion<ArgumentsType extends readonly unknown[]>(
...arguments: readonly ArgumentsType[]
): ArgumentsType;
export = arrayUnion;

3
node_modules/array-union/index.js generated vendored
View File

@ -1,3 +0,0 @@
const arrayUnion = (...arguments_) => [...new Set(arguments_.flat())];
export default arrayUnion;

9
node_modules/array-union/license generated vendored
View File

@ -1,9 +0,0 @@
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.

View File

@ -1,46 +0,0 @@
{
"name": "array-union",
"version": "3.0.1",
"description": "Create an array of unique values, in order, from the input arrays",
"license": "MIT",
"repository": "sindresorhus/array-union",
"funding": "https://github.com/sponsors/sindresorhus",
"author": {
"name": "Sindre Sorhus",
"email": "sindresorhus@gmail.com",
"url": "https://sindresorhus.com"
},
"type": "module",
"exports": "./index.js",
"engines": {
"node": ">=12"
},
"scripts": {
"test": "xo && ava && tsd"
},
"files": [
"index.js",
"index.d.ts"
],
"keywords": [
"array",
"set",
"uniq",
"unique",
"duplicate",
"remove",
"union",
"combine",
"merge"
],
"devDependencies": {
"ava": "^3.15.0",
"tsd": "^0.14.0",
"xo": "^0.38.2"
},
"tsd": {
"compilerOptions": {
"esModuleInterop": true
}
}
}

39
node_modules/array-union/readme.md generated vendored
View File

@ -1,39 +0,0 @@
# array-union
> Create an array of unique values, in order, from the input arrays
## Install
```
$ npm install array-union
```
## Usage
```js
import arrayUnion from 'array-union';
arrayUnion([1, 1, 2, 3], [2, 3]);
//=> [1, 2, 3]
arrayUnion(['foo', 'foo', 'bar']);
//=> ['foo', 'bar']
arrayUnion(['🐱', '🦄', '🐻'], ['🦄', '🌈']);
//=> ['🐱', '🦄', '🐻', '🌈']
arrayUnion(['🐱', '🦄'], ['🐻', '🦄'], ['🐶', '🌈', '🌈']);
//=> ['🐱', '🦄', '🐻', '🐶', '🌈']
```
---
<div align="center">
<b>
<a href="https://tidelift.com/subscription/pkg/npm-array-union?utm_source=npm-array-union&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>

18
node_modules/cliui/CHANGELOG.md generated vendored
View File

@ -2,6 +2,24 @@
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
## [8.0.1](https://github.com/yargs/cliui/compare/v8.0.0...v8.0.1) (2022-10-01)
### Bug Fixes
* **deps:** move rollup-plugin-ts to dev deps ([#124](https://github.com/yargs/cliui/issues/124)) ([7c8bd6b](https://github.com/yargs/cliui/commit/7c8bd6ba024d61e4eeae310c7959ab8ab6829081))
## [8.0.0](https://github.com/yargs/cliui/compare/v7.0.4...v8.0.0) (2022-09-30)
### ⚠ BREAKING CHANGES
* **deps:** drop Node 10 to release CVE-2021-3807 patch (#122)
### Bug Fixes
* **deps:** drop Node 10 to release CVE-2021-3807 patch ([#122](https://github.com/yargs/cliui/issues/122)) ([f156571](https://github.com/yargs/cliui/commit/f156571ce4f2ebf313335e3a53ad905589da5a30))
### [7.0.4](https://www.github.com/yargs/cliui/compare/v7.0.3...v7.0.4) (2020-11-08) ### [7.0.4](https://www.github.com/yargs/cliui/compare/v7.0.3...v7.0.4) (2020-11-08)

12
node_modules/cliui/package.json generated vendored
View File

@ -1,6 +1,6 @@
{ {
"name": "cliui", "name": "cliui",
"version": "7.0.4", "version": "8.0.1",
"description": "easily create complex multi-column command-line-interfaces", "description": "easily create complex multi-column command-line-interfaces",
"main": "build/index.cjs", "main": "build/index.cjs",
"exports": { "exports": {
@ -50,14 +50,13 @@
"license": "ISC", "license": "ISC",
"dependencies": { "dependencies": {
"string-width": "^4.2.0", "string-width": "^4.2.0",
"strip-ansi": "^6.0.0", "strip-ansi": "^6.0.1",
"wrap-ansi": "^7.0.0" "wrap-ansi": "^7.0.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^14.0.27", "@types/node": "^14.0.27",
"@typescript-eslint/eslint-plugin": "^4.0.0", "@typescript-eslint/eslint-plugin": "^4.0.0",
"@typescript-eslint/parser": "^4.0.0", "@typescript-eslint/parser": "^4.0.0",
"@wessberg/rollup-plugin-ts": "^1.3.2",
"c8": "^7.3.0", "c8": "^7.3.0",
"chai": "^4.2.0", "chai": "^4.2.0",
"chalk": "^4.1.0", "chalk": "^4.1.0",
@ -66,9 +65,10 @@
"eslint-plugin-import": "^2.22.0", "eslint-plugin-import": "^2.22.0",
"eslint-plugin-node": "^11.1.0", "eslint-plugin-node": "^11.1.0",
"gts": "^3.0.0", "gts": "^3.0.0",
"mocha": "^8.1.1", "mocha": "^10.0.0",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"rollup": "^2.23.1", "rollup": "^2.23.1",
"rollup-plugin-ts": "^3.0.2",
"standardx": "^7.0.0", "standardx": "^7.0.0",
"typescript": "^4.0.0" "typescript": "^4.0.0"
}, },
@ -77,7 +77,7 @@
"index.mjs", "index.mjs",
"!*.d.ts" "!*.d.ts"
], ],
"engine": { "engines": {
"node": ">=10" "node": ">=12"
} }
} }

View File

@ -1,11 +1,9 @@
/// <reference types="node" />
import { Readable } from 'stream';
import { Task } from '../managers/tasks'; import { Task } from '../managers/tasks';
import ReaderStream from '../readers/stream'; import { Entry, EntryItem, ReaderOptions } from '../types';
import { EntryItem, ReaderOptions } from '../types'; import ReaderAsync from '../readers/async';
import Provider from './provider'; import Provider from './provider';
export default class ProviderAsync extends Provider<Promise<EntryItem[]>> { export default class ProviderAsync extends Provider<Promise<EntryItem[]>> {
protected _reader: ReaderStream; protected _reader: ReaderAsync;
read(task: Task): Promise<EntryItem[]>; read(task: Task): Promise<EntryItem[]>;
api(root: string, task: Task, options: ReaderOptions): Readable; api(root: string, task: Task, options: ReaderOptions): Promise<Entry[]>;
} }

View File

@ -1,22 +1,17 @@
"use strict"; "use strict";
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
const stream_1 = require("../readers/stream"); const async_1 = require("../readers/async");
const provider_1 = require("./provider"); const provider_1 = require("./provider");
class ProviderAsync extends provider_1.default { class ProviderAsync extends provider_1.default {
constructor() { constructor() {
super(...arguments); super(...arguments);
this._reader = new stream_1.default(this._settings); this._reader = new async_1.default(this._settings);
} }
read(task) { async read(task) {
const root = this._getRootDirectory(task); const root = this._getRootDirectory(task);
const options = this._getReaderOptions(task); const options = this._getReaderOptions(task);
const entries = []; const entries = await this.api(root, task, options);
return new Promise((resolve, reject) => { return entries.map((entry) => options.transform(entry));
const stream = this.api(root, task, options);
stream.once('error', reject);
stream.on('data', (entry) => entries.push(options.transform(entry)));
stream.once('end', () => resolve(entries));
});
} }
api(root, task, options) { api(root, task, options) {
if (task.dynamic) { if (task.dynamic) {

View File

@ -12,9 +12,5 @@ export default class EntryFilter {
private _onlyFileFilter; private _onlyFileFilter;
private _onlyDirectoryFilter; private _onlyDirectoryFilter;
private _isSkippedByAbsoluteNegativePatterns; private _isSkippedByAbsoluteNegativePatterns;
/**
* First, just trying to apply patterns to the path.
* Second, trying to apply patterns to the path with final slash.
*/
private _isMatchToPatterns; private _isMatchToPatterns;
} }

View File

@ -23,7 +23,8 @@ class EntryFilter {
return false; return false;
} }
const filepath = this._settings.baseNameMatch ? entry.name : entry.path; const filepath = this._settings.baseNameMatch ? entry.name : entry.path;
const isMatched = this._isMatchToPatterns(filepath, positiveRe) && !this._isMatchToPatterns(entry.path, negativeRe); const isDirectory = entry.dirent.isDirectory();
const isMatched = this._isMatchToPatterns(filepath, positiveRe, isDirectory) && !this._isMatchToPatterns(entry.path, negativeRe, isDirectory);
if (this._settings.unique && isMatched) { if (this._settings.unique && isMatched) {
this._createIndexRecord(entry); this._createIndexRecord(entry);
} }
@ -48,13 +49,16 @@ class EntryFilter {
const fullpath = utils.path.makeAbsolute(this._settings.cwd, entryPath); const fullpath = utils.path.makeAbsolute(this._settings.cwd, entryPath);
return utils.pattern.matchAny(fullpath, patternsRe); return utils.pattern.matchAny(fullpath, patternsRe);
} }
/** _isMatchToPatterns(entryPath, patternsRe, isDirectory) {
* First, just trying to apply patterns to the path.
* Second, trying to apply patterns to the path with final slash.
*/
_isMatchToPatterns(entryPath, patternsRe) {
const filepath = utils.path.removeLeadingDotSegment(entryPath); const filepath = utils.path.removeLeadingDotSegment(entryPath);
return utils.pattern.matchAny(filepath, patternsRe) || utils.pattern.matchAny(filepath + '/', patternsRe); // Trying to match files and directories by patterns.
const isMatched = utils.pattern.matchAny(filepath, patternsRe);
// A pattern with a trailling slash can be used for directory matching.
// To apply such pattern, we need to add a tralling slash to the path.
if (!isMatched && isDirectory) {
return utils.pattern.matchAny(filepath + '/', patternsRe);
}
return isMatched;
} }
} }
exports.default = EntryFilter; exports.default = EntryFilter;

View File

@ -1,6 +1,6 @@
{ {
"name": "fast-glob", "name": "fast-glob",
"version": "3.2.11", "version": "3.2.12",
"description": "It's a very fast and efficient glob library for Node.js", "description": "It's a very fast and efficient glob library for Node.js",
"license": "MIT", "license": "MIT",
"repository": "mrmlnc/fast-glob", "repository": "mrmlnc/fast-glob",

2
node_modules/fastq/README.md generated vendored
View File

@ -225,7 +225,7 @@ Same than `kill` but the `drain` function will be called before reset to empty.
### queue.error(handler) ### queue.error(handler)
Set a global error handler. `handler(err, task)` will be called Set a global error handler. `handler(err, task)` will be called
when any of the tasks return an error. each time a task is completed, `err` will be not null if the task has thrown an error.
------------------------------------------------------- -------------------------------------------------------
<a name="concurrency"></a> <a name="concurrency"></a>

2
node_modules/fastq/index.d.ts generated vendored
View File

@ -17,7 +17,7 @@ declare namespace fastq {
getQueue(): T[] getQueue(): T[]
kill(): any kill(): any
killAndDrain(): any killAndDrain(): any
error(handler: errorHandler): void error(handler: errorHandler<T>): void
concurrency: number concurrency: number
drain(): any drain(): any
empty: () => void empty: () => void

2
node_modules/fastq/package.json generated vendored
View File

@ -1,6 +1,6 @@
{ {
"name": "fastq", "name": "fastq",
"version": "1.13.0", "version": "1.15.0",
"description": "Fast, in memory work queue", "description": "Fast, in memory work queue",
"main": "queue.js", "main": "queue.js",
"scripts": { "scripts": {

6
node_modules/fastq/queue.js generated vendored
View File

@ -266,6 +266,12 @@ function queueAsPromised (context, worker, concurrency) {
} }
function drained () { function drained () {
if (queue.idle()) {
return new Promise(function (resolve) {
resolve()
})
}
var previousDrain = queue.drain var previousDrain = queue.drain
var p = new Promise(function (resolve) { var p = new Promise(function (resolve) {

27
node_modules/fastq/test/promise.js generated vendored
View File

@ -129,6 +129,33 @@ test('drained with drain function', async function (t) {
t.equal(drainCalled, true) t.equal(drainCalled, true)
}) })
test('drained while idle should resolve', async function (t) {
const queue = buildQueue(worker, 2)
async function worker (arg) {
await sleep(arg)
}
await queue.drained()
})
test('drained while idle should not call the drain function', async function (t) {
let drainCalled = false
const queue = buildQueue(worker, 2)
queue.drain = function () {
drainCalled = true
}
async function worker (arg) {
await sleep(arg)
}
await queue.drained()
t.equal(drainCalled, false)
})
test('set this', async function (t) { test('set this', async function (t) {
t.plan(1) t.plan(1)
const that = {} const that = {}

932
node_modules/fs-extra/CHANGELOG.md generated vendored
View File

@ -1,932 +0,0 @@
10.0.0 / 2021-05-03
-------------------
### Breaking changes
- Require Node.js v12+ ([#886](https://github.com/jprichardson/node-fs-extra/issues/886), [#893](https://github.com/jprichardson/node-fs-extra/pull/893), [#890](https://github.com/jprichardson/node-fs-extra/pull/890), [#894](https://github.com/jprichardson/node-fs-extra/pull/894), [#895]( https://github.com/jprichardson/node-fs-extra/pull/895))
- Allow copying broken symlinks ([#779](https://github.com/jprichardson/node-fs-extra/pull/779), [#765](https://github.com/jprichardson/node-fs-extra/issues/765), [#638](https://github.com/jprichardson/node-fs-extra/issues/638), [#761](https://github.com/jprichardson/node-fs-extra/issues/761))
**The following changes, although technically semver-major, will not affect the vast majority of users:**
- Ensure correct type when destination exists for `ensureLink*()`/`ensureSymlink*()` ([#826](https://github.com/jprichardson/node-fs-extra/pull/826), [#786](https://github.com/jprichardson/node-fs-extra/issues/786), [#870](https://github.com/jprichardson/node-fs-extra/issues/870))
- Error when attempting to `copy*()` unknown file type ([#880](https://github.com/jprichardson/node-fs-extra/pull/880))
- Remove undocumented options for `remove*()` ([#882](https://github.com/jprichardson/node-fs-extra/pull/882))
### Improvements
- Allow changing case of filenames with `move*()`, even on technically case-insensitive filesystems ([#759](https://github.com/jprichardson/node-fs-extra/issues/759), [#801](https://github.com/jprichardson/node-fs-extra/pull/801))
- Use native `fs.rm*()` for `remove*()` in environments that support it ([#882](https://github.com/jprichardson/node-fs-extra/pull/882), [#806](https://github.com/jprichardson/node-fs-extra/issues/806))
- Improve `emptyDir()` performance ([#885](https://github.com/jprichardson/node-fs-extra/pull/885))
### Bugfixes
- Ensure `copy*()`'s `filter` function is not called more than necessary ([#883](https://github.com/jprichardson/node-fs-extra/pull/883), [#809](https://github.com/jprichardson/node-fs-extra/issues/809))
- Fix `move*()` raising `EPERM` error when moving a file to the root of a drive on Windows ([#897](https://github.com/jprichardson/node-fs-extra/pull/897), [#819](https://github.com/jprichardson/node-fs-extra/issues/819))
### Miscellaneous changes
- Do not use `at-least-node` as a dependency ([#896](https://github.com/jprichardson/node-fs-extra/pull/896))
- Improve documentation ([#888](https://github.com/jprichardson/node-fs-extra/pull/888), [#830](https://github.com/jprichardson/node-fs-extra/issues/830), [#884](https://github.com/jprichardson/node-fs-extra/pull/884), [#843](https://github.com/jprichardson/node-fs-extra/issues/843))
9.1.0 / 2021-01-19
------------------
- Add promise support for `fs.rm()` ([#841](https://github.com/jprichardson/node-fs-extra/issues/841), [#860](https://github.com/jprichardson/node-fs-extra/pull/860))
- Upgrade universalify for performance improvments ([#825](https://github.com/jprichardson/node-fs-extra/pull/825))
9.0.1 / 2020-06-03
------------------
- Fix issue with `ensureFile()` when used with Jest on Windows ([#804](https://github.com/jprichardson/node-fs-extra/issues/804), [#805](https://github.com/jprichardson/node-fs-extra/pull/805))
- Remove unneeded `process.umask()` call ([#791](https://github.com/jprichardson/node-fs-extra/pull/791))
- Docs improvements ([#753](https://github.com/jprichardson/node-fs-extra/pull/753), [#795](https://github.com/jprichardson/node-fs-extra/pull/795), [#797](https://github.com/jprichardson/node-fs-extra/pull/797))
9.0.0 / 2020-03-19
------------------
### Breaking changes
- Requires Node.js version 10 or greater ([#725](https://github.com/jprichardson/node-fs-extra/issues/725), [#751](https://github.com/jprichardson/node-fs-extra/pull/751))
- Switched `ensureDir*` to use a fork of https://github.com/sindresorhus/make-dir to make use of native recursive `fs.mkdir` where possible ([#619](https://github.com/jprichardson/node-fs-extra/issues/619), [#756](https://github.com/jprichardson/node-fs-extra/pull/756))
- Properly preserve `atime` for `copy*` with `preserveTimestamps` option ([#633](https://github.com/jprichardson/node-fs-extra/pull/633))
**The following changes, allthough technically breaking, will not affect the vast majority of users:**
- `outputJson` now outputs objects as they were when the function was called, even if they are mutated later ([#702](https://github.com/jprichardson/node-fs-extra/issues/702), [#768](https://github.com/jprichardson/node-fs-extra/pull/768))
- Cannot pass `null` as an options parameter to `*Json*` methods ([#745](https://github.com/jprichardson/node-fs-extra/issues/745), [#768](https://github.com/jprichardson/node-fs-extra/pull/768))
### Improvements
- Add promise shims for `fs.writev` & `fs.opendir` ([#747](https://github.com/jprichardson/node-fs-extra/pull/747))
- Better errors for `ensureFile` ([#696](https://github.com/jprichardson/node-fs-extra/issues/696), [#744](https://github.com/jprichardson/node-fs-extra/pull/744))
- Better file comparison for older Node versions ([#694](https://github.com/jprichardson/node-fs-extra/pull/694))
### Miscellaneous changes
- Peformance optimizations ([#762](https://github.com/jprichardson/node-fs-extra/issues/762), [#764](https://github.com/jprichardson/node-fs-extra/pull/764))
- Add missing documentation for aliases ([#758](https://github.com/jprichardson/node-fs-extra/issues/758), [#766](https://github.com/jprichardson/node-fs-extra/pull/766))
- Update `universalify` dependency ([#767](https://github.com/jprichardson/node-fs-extra/pull/767))
8.1.0 / 2019-06-28
------------------
- Add support for promisified `fs.realpath.native` in Node v9.2+ ([#650](https://github.com/jprichardson/node-fs-extra/issues/650), [#682](https://github.com/jprichardson/node-fs-extra/pull/682))
- Update `graceful-fs` dependency ([#700](https://github.com/jprichardson/node-fs-extra/pull/700))
- Use `graceful-fs` everywhere ([#700](https://github.com/jprichardson/node-fs-extra/pull/700))
8.0.1 / 2019-05-13
------------------
- Fix bug `Maximum call stack size exceeded` error in `util/stat` ([#679](https://github.com/jprichardson/node-fs-extra/pull/679))
8.0.0 / 2019-05-11
------------------
**NOTE:** Node.js v6 support is deprecated, and will be dropped in the next major release.
- Use `renameSync()` under the hood in `moveSync()`
- Fix bug with bind-mounted directories in `copy*()` ([#613](https://github.com/jprichardson/node-fs-extra/issues/613), [#618](https://github.com/jprichardson/node-fs-extra/pull/618))
- Fix bug in `move()` with case-insensitive file systems
- Use `fs.stat()`'s `bigint` option in `copy*()` & `move*()` where possible ([#657](https://github.com/jprichardson/node-fs-extra/issues/657))
7.0.1 / 2018-11-07
------------------
- Fix `removeSync()` on Windows, in some cases, it would error out with `ENOTEMPTY` ([#646](https://github.com/jprichardson/node-fs-extra/pull/646))
- Document `mode` option for `ensureDir*()` ([#587](https://github.com/jprichardson/node-fs-extra/pull/587))
- Don't include documentation files in npm package tarball ([#642](https://github.com/jprichardson/node-fs-extra/issues/642), [#643](https://github.com/jprichardson/node-fs-extra/pull/643))
7.0.0 / 2018-07-16
------------------
- **BREAKING:** Refine `copy*()` handling of symlinks to properly detect symlinks that point to the same file. ([#582](https://github.com/jprichardson/node-fs-extra/pull/582))
- Fix bug with copying write-protected directories ([#600](https://github.com/jprichardson/node-fs-extra/pull/600))
- Universalify `fs.lchmod()` ([#596](https://github.com/jprichardson/node-fs-extra/pull/596))
- Add `engines` field to `package.json` ([#580](https://github.com/jprichardson/node-fs-extra/pull/580))
6.0.1 / 2018-05-09
------------------
- Fix `fs.promises` `ExperimentalWarning` on Node v10.1.0 ([#578](https://github.com/jprichardson/node-fs-extra/pull/578))
6.0.0 / 2018-05-01
------------------
- Drop support for Node.js versions 4, 5, & 7 ([#564](https://github.com/jprichardson/node-fs-extra/pull/564))
- Rewrite `move` to use `fs.rename` where possible ([#549](https://github.com/jprichardson/node-fs-extra/pull/549))
- Don't convert relative paths to absolute paths for `filter` ([#554](https://github.com/jprichardson/node-fs-extra/pull/554))
- `copy*`'s behavior when `preserveTimestamps` is `false` has been OS-dependent since 5.0.0, but that's now explicitly noted in the docs ([#563](https://github.com/jprichardson/node-fs-extra/pull/563))
- Fix subdirectory detection for `copy*` & `move*` ([#541](https://github.com/jprichardson/node-fs-extra/pull/541))
- Handle case-insensitive paths correctly in `copy*` ([#568](https://github.com/jprichardson/node-fs-extra/pull/568))
5.0.0 / 2017-12-11
------------------
Significant refactor of `copy()` & `copySync()`, including breaking changes. No changes to other functions in this release.
Huge thanks to **[@manidlou](https://github.com/manidlou)** for doing most of the work on this release.
- The `filter` option can no longer be a RegExp (must be a function). This was deprecated since fs-extra v1.0.0. [#512](https://github.com/jprichardson/node-fs-extra/pull/512)
- `copy()`'s `filter` option can now be a function that returns a Promise. [#518](https://github.com/jprichardson/node-fs-extra/pull/518)
- `copy()` & `copySync()` now use `fs.copyFile()`/`fs.copyFileSync()` in environments that support it (currently Node 8.5.0+). Older Node versions still get the old implementation. [#505](https://github.com/jprichardson/node-fs-extra/pull/505)
- Don't allow copying a directory into itself. [#83](https://github.com/jprichardson/node-fs-extra/issues/83)
- Handle copying between identical files. [#198](https://github.com/jprichardson/node-fs-extra/issues/198)
- Error out when copying an empty folder to a path that already exists. [#464](https://github.com/jprichardson/node-fs-extra/issues/464)
- Don't create `dest`'s parent if the `filter` function aborts the `copy()` operation. [#517](https://github.com/jprichardson/node-fs-extra/pull/517)
- Fix `writeStream` not being closed if there was an error in `copy()`. [#516](https://github.com/jprichardson/node-fs-extra/pull/516)
4.0.3 / 2017-12-05
------------------
- Fix wrong `chmod` values in `fs.remove()` [#501](https://github.com/jprichardson/node-fs-extra/pull/501)
- Fix `TypeError` on systems that don't have some `fs` operations like `lchown` [#520](https://github.com/jprichardson/node-fs-extra/pull/520)
4.0.2 / 2017-09-12
------------------
- Added `EOL` option to `writeJson*` & `outputJson*` (via upgrade to jsonfile v4)
- Added promise support to [`fs.copyFile()`](https://nodejs.org/api/fs.html#fs_fs_copyfile_src_dest_flags_callback) in Node 8.5+
- Added `.js` extension to `main` field in `package.json` for better tooling compatibility. [#485](https://github.com/jprichardson/node-fs-extra/pull/485)
4.0.1 / 2017-07-31
------------------
### Fixed
- Previously, `ensureFile()` & `ensureFileSync()` would do nothing if the path was a directory. Now, they error out for consistency with `ensureDir()`. [#465](https://github.com/jprichardson/node-fs-extra/issues/465), [#466](https://github.com/jprichardson/node-fs-extra/pull/466), [#470](https://github.com/jprichardson/node-fs-extra/issues/470)
4.0.0 / 2017-07-14
------------------
### Changed
- **BREAKING:** The promisified versions of `fs.read()` & `fs.write()` now return objects. See [the docs](docs/fs-read-write.md) for details. [#436](https://github.com/jprichardson/node-fs-extra/issues/436), [#449](https://github.com/jprichardson/node-fs-extra/pull/449)
- `fs.move()` now errors out when destination is a subdirectory of source. [#458](https://github.com/jprichardson/node-fs-extra/pull/458)
- Applied upstream fixes from `rimraf` to `fs.remove()` & `fs.removeSync()`. [#459](https://github.com/jprichardson/node-fs-extra/pull/459)
### Fixed
- Got `fs.outputJSONSync()` working again; it was broken due to refactoring. [#428](https://github.com/jprichardson/node-fs-extra/pull/428)
Also clarified the docs in a few places.
3.0.1 / 2017-05-04
------------------
- Fix bug in `move()` & `moveSync()` when source and destination are the same, and source does not exist. [#415](https://github.com/jprichardson/node-fs-extra/pull/415)
3.0.0 / 2017-04-27
------------------
### Added
- **BREAKING:** Added Promise support. All asynchronous native fs methods and fs-extra methods now return a promise if the callback is not passed. [#403](https://github.com/jprichardson/node-fs-extra/pull/403)
- `pathExists()`, a replacement for the deprecated `fs.exists`. `pathExists` has a normal error-first callback signature. Also added `pathExistsSync`, an alias to `fs.existsSync`, for completeness. [#406](https://github.com/jprichardson/node-fs-extra/pull/406)
### Removed
- **BREAKING:** Removed support for setting the default spaces for `writeJson()`, `writeJsonSync()`, `outputJson()`, & `outputJsonSync()`. This was undocumented. [#402](https://github.com/jprichardson/node-fs-extra/pull/402)
### Changed
- Upgraded jsonfile dependency to v3.0.0:
- **BREAKING:** Changed behavior of `throws` option for `readJsonSync()`; now does not throw filesystem errors when `throws` is `false`.
- **BREAKING:** `writeJson()`, `writeJsonSync()`, `outputJson()`, & `outputJsonSync()` now output minified JSON by default for consistency with `JSON.stringify()`; set the `spaces` option to `2` to override this new behavior. [#402](https://github.com/jprichardson/node-fs-extra/pull/402)
- Use `Buffer.allocUnsafe()` instead of `new Buffer()` in environments that support it. [#394](https://github.com/jprichardson/node-fs-extra/pull/394)
### Fixed
- `removeSync()` silently failed on Windows in some cases. Now throws an `EBUSY` error. [#408](https://github.com/jprichardson/node-fs-extra/pull/408)
2.1.2 / 2017-03-16
------------------
### Fixed
- Weird windows bug that resulted in `ensureDir()`'s callback being called twice in some cases. This bug may have also affected `remove()`. See [#392](https://github.com/jprichardson/node-fs-extra/issues/392), [#393](https://github.com/jprichardson/node-fs-extra/pull/393)
2.1.1 / 2017-03-15
------------------
### Fixed
- Reverted [`5597bd`](https://github.com/jprichardson/node-fs-extra/commit/5597bd5b67f7d060f5f5bf26e9635be48330f5d7), this broke compatibility with Node.js versions v4+ but less than `v4.5.0`.
- Remove `Buffer.alloc()` usage in `moveSync()`.
2.1.0 / 2017-03-15
------------------
Thanks to [Mani Maghsoudlou (@manidlou)](https://github.com/manidlou) & [Jan Peer Stöcklmair (@JPeer264)](https://github.com/JPeer264) for their extraordinary help with this release!
### Added
- `moveSync()` See [#309], [#381](https://github.com/jprichardson/node-fs-extra/pull/381). ([@manidlou](https://github.com/manidlou))
- `copy()` and `copySync()`'s `filter` option now gets the destination path passed as the second parameter. [#366](https://github.com/jprichardson/node-fs-extra/pull/366) ([@manidlou](https://github.com/manidlou))
### Changed
- Use `Buffer.alloc()` instead of deprecated `new Buffer()` in `copySync()`. [#380](https://github.com/jprichardson/node-fs-extra/pull/380) ([@manidlou](https://github.com/manidlou))
- Refactored entire codebase to use ES6 features supported by Node.js v4+ [#355](https://github.com/jprichardson/node-fs-extra/issues/355). [(@JPeer264)](https://github.com/JPeer264)
- Refactored docs. ([@manidlou](https://github.com/manidlou))
### Fixed
- `move()` shouldn't error out when source and dest are the same. [#377](https://github.com/jprichardson/node-fs-extra/issues/377), [#378](https://github.com/jprichardson/node-fs-extra/pull/378) ([@jdalton](https://github.com/jdalton))
2.0.0 / 2017-01-16
------------------
### Removed
- **BREAKING:** Removed support for Node `v0.12`. The Node foundation stopped officially supporting it
on Jan 1st, 2017.
- **BREAKING:** Remove `walk()` and `walkSync()`. `walkSync()` was only part of `fs-extra` for a little
over two months. Use [klaw](https://github.com/jprichardson/node-klaw) instead of `walk()`, in fact, `walk()` was just
an alias to klaw. For `walkSync()` use [klaw-sync](https://github.com/mawni/node-klaw-sync). See: [#338], [#339]
### Changed
- **BREAKING:** Renamed `clobber` to `overwrite`. This affects `copy()`, `copySync()`, and `move()`. [#330], [#333]
- Moved docs, to `docs/`. [#340]
### Fixed
- Apply filters to directories in `copySync()` like in `copy()`. [#324]
- A specific condition when disk is under heavy use, `copy()` can fail. [#326]
1.0.0 / 2016-11-01
------------------
After five years of development, we finally have reach the 1.0.0 milestone! Big thanks goes
to [Ryan Zim](https://github.com/RyanZim) for leading the charge on this release!
### Added
- `walkSync()`
### Changed
- **BREAKING**: dropped Node v0.10 support.
- disabled `rimaf` globbing, wasn't used. [#280]
- deprecate `copy()/copySync()` option `filter` if it's a `RegExp`. `filter` should now be a function.
- inline `rimraf`. This is temporary and was done because `rimraf` depended upon the beefy `glob` which `fs-extra` does not use. [#300]
### Fixed
- bug fix proper closing of file handle on `utimesMillis()` [#271]
- proper escaping of files with dollar signs [#291]
- `copySync()` failed if user didn't own file. [#199], [#301]
0.30.0 / 2016-04-28
-------------------
- Brought back Node v0.10 support. I didn't realize there was still demand. Official support will end **2016-10-01**.
0.29.0 / 2016-04-27
-------------------
- **BREAKING**: removed support for Node v0.10. If you still want to use Node v0.10, everything should work except for `ensureLink()/ensureSymlink()`. Node v0.12 is still supported but will be dropped in the near future as well.
0.28.0 / 2016-04-17
-------------------
- **BREAKING**: removed `createOutputStream()`. Use https://www.npmjs.com/package/create-output-stream. See: [#192][#192]
- `mkdirs()/mkdirsSync()` check for invalid win32 path chars. See: [#209][#209], [#237][#237]
- `mkdirs()/mkdirsSync()` if drive not mounted, error. See: [#93][#93]
0.27.0 / 2016-04-15
-------------------
- add `dereference` option to `copySync()`. [#235][#235]
0.26.7 / 2016-03-16
-------------------
- fixed `copy()` if source and dest are the same. [#230][#230]
0.26.6 / 2016-03-15
-------------------
- fixed if `emptyDir()` does not have a callback: [#229][#229]
0.26.5 / 2016-01-27
-------------------
- `copy()` with two arguments (w/o callback) was broken. See: [#215][#215]
0.26.4 / 2016-01-05
-------------------
- `copySync()` made `preserveTimestamps` default consistent with `copy()` which is `false`. See: [#208][#208]
0.26.3 / 2015-12-17
-------------------
- fixed `copy()` hangup in copying blockDevice / characterDevice / `/dev/null`. See: [#193][#193]
0.26.2 / 2015-11-02
-------------------
- fixed `outputJson{Sync}()` spacing adherence to `fs.spaces`
0.26.1 / 2015-11-02
-------------------
- fixed `copySync()` when `clogger=true` and the destination is read only. See: [#190][#190]
0.26.0 / 2015-10-25
-------------------
- extracted the `walk()` function into its own module [`klaw`](https://github.com/jprichardson/node-klaw).
0.25.0 / 2015-10-24
-------------------
- now has a file walker `walk()`
0.24.0 / 2015-08-28
-------------------
- removed alias `delete()` and `deleteSync()`. See: [#171][#171]
0.23.1 / 2015-08-07
-------------------
- Better handling of errors for `move()` when moving across devices. [#170][#170]
- `ensureSymlink()` and `ensureLink()` should not throw errors if link exists. [#169][#169]
0.23.0 / 2015-08-06
-------------------
- added `ensureLink{Sync}()` and `ensureSymlink{Sync}()`. See: [#165][#165]
0.22.1 / 2015-07-09
-------------------
- Prevent calling `hasMillisResSync()` on module load. See: [#149][#149].
Fixes regression that was introduced in `0.21.0`.
0.22.0 / 2015-07-09
-------------------
- preserve permissions / ownership in `copy()`. See: [#54][#54]
0.21.0 / 2015-07-04
-------------------
- add option to preserve timestamps in `copy()` and `copySync()`. See: [#141][#141]
- updated `graceful-fs@3.x` to `4.x`. This brings in features from `amazing-graceful-fs` (much cleaner code / less hacks)
0.20.1 / 2015-06-23
-------------------
- fixed regression caused by latest jsonfile update: See: https://github.com/jprichardson/node-jsonfile/issues/26
0.20.0 / 2015-06-19
-------------------
- removed `jsonfile` aliases with `File` in the name, they weren't documented and probably weren't in use e.g.
this package had both `fs.readJsonFile` and `fs.readJson` that were aliases to each other, now use `fs.readJson`.
- preliminary walker created. Intentionally not documented. If you use it, it will almost certainly change and break your code.
- started moving tests inline
- upgraded to `jsonfile@2.1.0`, can now pass JSON revivers/replacers to `readJson()`, `writeJson()`, `outputJson()`
0.19.0 / 2015-06-08
-------------------
- `fs.copy()` had support for Node v0.8, dropped support
0.18.4 / 2015-05-22
-------------------
- fixed license field according to this: [#136][#136] and https://github.com/npm/npm/releases/tag/v2.10.0
0.18.3 / 2015-05-08
-------------------
- bugfix: handle `EEXIST` when clobbering on some Linux systems. [#134][#134]
0.18.2 / 2015-04-17
-------------------
- bugfix: allow `F_OK` ([#120][#120])
0.18.1 / 2015-04-15
-------------------
- improved windows support for `move()` a bit. https://github.com/jprichardson/node-fs-extra/commit/92838980f25dc2ee4ec46b43ee14d3c4a1d30c1b
- fixed a lot of tests for Windows (appveyor)
0.18.0 / 2015-03-31
-------------------
- added `emptyDir()` and `emptyDirSync()`
0.17.0 / 2015-03-28
-------------------
- `copySync` added `clobber` option (before always would clobber, now if `clobber` is `false` it throws an error if the destination exists).
**Only works with files at the moment.**
- `createOutputStream()` added. See: [#118][#118]
0.16.5 / 2015-03-08
-------------------
- fixed `fs.move` when `clobber` is `true` and destination is a directory, it should clobber. [#114][#114]
0.16.4 / 2015-03-01
-------------------
- `fs.mkdirs` fix infinite loop on Windows. See: See https://github.com/substack/node-mkdirp/pull/74 and https://github.com/substack/node-mkdirp/issues/66
0.16.3 / 2015-01-28
-------------------
- reverted https://github.com/jprichardson/node-fs-extra/commit/1ee77c8a805eba5b99382a2591ff99667847c9c9
0.16.2 / 2015-01-28
-------------------
- fixed `fs.copy` for Node v0.8 (support is temporary and will be removed in the near future)
0.16.1 / 2015-01-28
-------------------
- if `setImmediate` is not available, fall back to `process.nextTick`
0.16.0 / 2015-01-28
-------------------
- bugfix `fs.move()` into itself. Closes [#104]
- bugfix `fs.move()` moving directory across device. Closes [#108]
- added coveralls support
- bugfix: nasty multiple callback `fs.copy()` bug. Closes [#98]
- misc fs.copy code cleanups
0.15.0 / 2015-01-21
-------------------
- dropped `ncp`, imported code in
- because of previous, now supports `io.js`
- `graceful-fs` is now a dependency
0.14.0 / 2015-01-05
-------------------
- changed `copy`/`copySync` from `fs.copy(src, dest, [filters], callback)` to `fs.copy(src, dest, [options], callback)` [#100][#100]
- removed mockfs tests for mkdirp (this may be temporary, but was getting in the way of other tests)
0.13.0 / 2014-12-10
-------------------
- removed `touch` and `touchSync` methods (they didn't handle permissions like UNIX touch)
- updated `"ncp": "^0.6.0"` to `"ncp": "^1.0.1"`
- imported `mkdirp` => `minimist` and `mkdirp` are no longer dependences, should now appease people who wanted `mkdirp` to be `--use_strict` safe. See [#59]([#59][#59])
0.12.0 / 2014-09-22
-------------------
- copy symlinks in `copySync()` [#85][#85]
0.11.1 / 2014-09-02
-------------------
- bugfix `copySync()` preserve file permissions [#80][#80]
0.11.0 / 2014-08-11
-------------------
- upgraded `"ncp": "^0.5.1"` to `"ncp": "^0.6.0"`
- upgrade `jsonfile": "^1.2.0"` to `jsonfile": "^2.0.0"` => on write, json files now have `\n` at end. Also adds `options.throws` to `readJsonSync()`
see https://github.com/jprichardson/node-jsonfile#readfilesyncfilename-options for more details.
0.10.0 / 2014-06-29
------------------
* bugfix: upgaded `"jsonfile": "~1.1.0"` to `"jsonfile": "^1.2.0"`, bumped minor because of `jsonfile` dep change
from `~` to `^`. [#67]
0.9.1 / 2014-05-22
------------------
* removed Node.js `0.8.x` support, `0.9.0` was published moments ago and should have been done there
0.9.0 / 2014-05-22
------------------
* upgraded `ncp` from `~0.4.2` to `^0.5.1`, [#58]
* upgraded `rimraf` from `~2.2.6` to `^2.2.8`
* upgraded `mkdirp` from `0.3.x` to `^0.5.0`
* added methods `ensureFile()`, `ensureFileSync()`
* added methods `ensureDir()`, `ensureDirSync()` [#31]
* added `move()` method. From: https://github.com/andrewrk/node-mv
0.8.1 / 2013-10-24
------------------
* copy failed to return an error to the callback if a file doesn't exist (ulikoehler [#38], [#39])
0.8.0 / 2013-10-14
------------------
* `filter` implemented on `copy()` and `copySync()`. (Srirangan / [#36])
0.7.1 / 2013-10-12
------------------
* `copySync()` implemented (Srirangan / [#33])
* updated to the latest `jsonfile` version `1.1.0` which gives `options` params for the JSON methods. Closes [#32]
0.7.0 / 2013-10-07
------------------
* update readme conventions
* `copy()` now works if destination directory does not exist. Closes [#29]
0.6.4 / 2013-09-05
------------------
* changed `homepage` field in package.json to remove NPM warning
0.6.3 / 2013-06-28
------------------
* changed JSON spacing default from `4` to `2` to follow Node conventions
* updated `jsonfile` dep
* updated `rimraf` dep
0.6.2 / 2013-06-28
------------------
* added .npmignore, [#25]
0.6.1 / 2013-05-14
------------------
* modified for `strict` mode, closes [#24]
* added `outputJson()/outputJsonSync()`, closes [#23]
0.6.0 / 2013-03-18
------------------
* removed node 0.6 support
* added node 0.10 support
* upgraded to latest `ncp` and `rimraf`.
* optional `graceful-fs` support. Closes [#17]
0.5.0 / 2013-02-03
------------------
* Removed `readTextFile`.
* Renamed `readJSONFile` to `readJSON` and `readJson`, same with write.
* Restructured documentation a bit. Added roadmap.
0.4.0 / 2013-01-28
------------------
* Set default spaces in `jsonfile` from 4 to 2.
* Updated `testutil` deps for tests.
* Renamed `touch()` to `createFile()`
* Added `outputFile()` and `outputFileSync()`
* Changed creation of testing diretories so the /tmp dir is not littered.
* Added `readTextFile()` and `readTextFileSync()`.
0.3.2 / 2012-11-01
------------------
* Added `touch()` and `touchSync()` methods.
0.3.1 / 2012-10-11
------------------
* Fixed some stray globals.
0.3.0 / 2012-10-09
------------------
* Removed all CoffeeScript from tests.
* Renamed `mkdir` to `mkdirs`/`mkdirp`.
0.2.1 / 2012-09-11
------------------
* Updated `rimraf` dep.
0.2.0 / 2012-09-10
------------------
* Rewrote module into JavaScript. (Must still rewrite tests into JavaScript)
* Added all methods of [jsonfile](https://github.com/jprichardson/node-jsonfile)
* Added Travis-CI.
0.1.3 / 2012-08-13
------------------
* Added method `readJSONFile`.
0.1.2 / 2012-06-15
------------------
* Bug fix: `deleteSync()` didn't exist.
* Verified Node v0.8 compatibility.
0.1.1 / 2012-06-15
------------------
* Fixed bug in `remove()`/`delete()` that wouldn't execute the function if a callback wasn't passed.
0.1.0 / 2012-05-31
------------------
* Renamed `copyFile()` to `copy()`. `copy()` can now copy directories (recursively) too.
* Renamed `rmrf()` to `remove()`.
* `remove()` aliased with `delete()`.
* Added `mkdirp` capabilities. Named: `mkdir()`. Hides Node.js native `mkdir()`.
* Instead of exporting the native `fs` module with new functions, I now copy over the native methods to a new object and export that instead.
0.0.4 / 2012-03-14
------------------
* Removed CoffeeScript dependency
0.0.3 / 2012-01-11
------------------
* Added methods rmrf and rmrfSync
* Moved tests from Jasmine to Mocha
[#344]: https://github.com/jprichardson/node-fs-extra/issues/344 "Licence Year"
[#343]: https://github.com/jprichardson/node-fs-extra/pull/343 "Add klaw-sync link to readme"
[#342]: https://github.com/jprichardson/node-fs-extra/pull/342 "allow preserveTimestamps when use move"
[#341]: https://github.com/jprichardson/node-fs-extra/issues/341 "mkdirp(path.dirname(dest) in move() logic needs cleaning up [question]"
[#340]: https://github.com/jprichardson/node-fs-extra/pull/340 "Move docs to seperate docs folder [documentation]"
[#339]: https://github.com/jprichardson/node-fs-extra/pull/339 "Remove walk() & walkSync() [feature-walk]"
[#338]: https://github.com/jprichardson/node-fs-extra/issues/338 "Remove walk() and walkSync() [feature-walk]"
[#337]: https://github.com/jprichardson/node-fs-extra/issues/337 "copy doesn't return a yieldable value"
[#336]: https://github.com/jprichardson/node-fs-extra/pull/336 "Docs enhanced walk sync [documentation, feature-walk]"
[#335]: https://github.com/jprichardson/node-fs-extra/pull/335 "Refactor move() tests [feature-move]"
[#334]: https://github.com/jprichardson/node-fs-extra/pull/334 "Cleanup lib/move/index.js [feature-move]"
[#333]: https://github.com/jprichardson/node-fs-extra/pull/333 "Rename clobber to overwrite [feature-copy, feature-move]"
[#332]: https://github.com/jprichardson/node-fs-extra/pull/332 "BREAKING: Drop Node v0.12 & io.js support"
[#331]: https://github.com/jprichardson/node-fs-extra/issues/331 "Add support for chmodr [enhancement, future]"
[#330]: https://github.com/jprichardson/node-fs-extra/pull/330 "BREAKING: Do not error when copy destination exists & clobber: false [feature-copy]"
[#329]: https://github.com/jprichardson/node-fs-extra/issues/329 "Does .walk() scale to large directories? [question]"
[#328]: https://github.com/jprichardson/node-fs-extra/issues/328 "Copying files corrupts [feature-copy, needs-confirmed]"
[#327]: https://github.com/jprichardson/node-fs-extra/pull/327 "Use writeStream 'finish' event instead of 'close' [bug, feature-copy]"
[#326]: https://github.com/jprichardson/node-fs-extra/issues/326 "fs.copy fails with chmod error when disk under heavy use [bug, feature-copy]"
[#325]: https://github.com/jprichardson/node-fs-extra/issues/325 "ensureDir is difficult to promisify [enhancement]"
[#324]: https://github.com/jprichardson/node-fs-extra/pull/324 "copySync() should apply filter to directories like copy() [bug, feature-copy]"
[#323]: https://github.com/jprichardson/node-fs-extra/issues/323 "Support for `dest` being a directory when using `copy*()`?"
[#322]: https://github.com/jprichardson/node-fs-extra/pull/322 "Add fs-promise as fs-extra-promise alternative"
[#321]: https://github.com/jprichardson/node-fs-extra/issues/321 "fs.copy() with clobber set to false return EEXIST error [feature-copy]"
[#320]: https://github.com/jprichardson/node-fs-extra/issues/320 "fs.copySync: Error: EPERM: operation not permitted, unlink "
[#319]: https://github.com/jprichardson/node-fs-extra/issues/319 "Create directory if not exists"
[#318]: https://github.com/jprichardson/node-fs-extra/issues/318 "Support glob patterns [enhancement, future]"
[#317]: https://github.com/jprichardson/node-fs-extra/pull/317 "Adding copy sync test for src file without write perms"
[#316]: https://github.com/jprichardson/node-fs-extra/pull/316 "Remove move()'s broken limit option [feature-move]"
[#315]: https://github.com/jprichardson/node-fs-extra/pull/315 "Fix move clobber tests to work around graceful-fs bug."
[#314]: https://github.com/jprichardson/node-fs-extra/issues/314 "move() limit option [documentation, enhancement, feature-move]"
[#313]: https://github.com/jprichardson/node-fs-extra/pull/313 "Test that remove() ignores glob characters."
[#312]: https://github.com/jprichardson/node-fs-extra/pull/312 "Enhance walkSync() to return items with path and stats [feature-walk]"
[#311]: https://github.com/jprichardson/node-fs-extra/issues/311 "move() not work when dest name not provided [feature-move]"
[#310]: https://github.com/jprichardson/node-fs-extra/issues/310 "Edit walkSync to return items like what walk emits [documentation, enhancement, feature-walk]"
[#309]: https://github.com/jprichardson/node-fs-extra/issues/309 "moveSync support [enhancement, feature-move]"
[#308]: https://github.com/jprichardson/node-fs-extra/pull/308 "Fix incorrect anchor link"
[#307]: https://github.com/jprichardson/node-fs-extra/pull/307 "Fix coverage"
[#306]: https://github.com/jprichardson/node-fs-extra/pull/306 "Update devDeps, fix lint error"
[#305]: https://github.com/jprichardson/node-fs-extra/pull/305 "Re-add Coveralls"
[#304]: https://github.com/jprichardson/node-fs-extra/pull/304 "Remove path-is-absolute [enhancement]"
[#303]: https://github.com/jprichardson/node-fs-extra/pull/303 "Document copySync filter inconsistency [documentation, feature-copy]"
[#302]: https://github.com/jprichardson/node-fs-extra/pull/302 "fix(console): depreciated -> deprecated"
[#301]: https://github.com/jprichardson/node-fs-extra/pull/301 "Remove chmod call from copySync [feature-copy]"
[#300]: https://github.com/jprichardson/node-fs-extra/pull/300 "Inline Rimraf [enhancement, feature-move, feature-remove]"
[#299]: https://github.com/jprichardson/node-fs-extra/pull/299 "Warn when filter is a RegExp [feature-copy]"
[#298]: https://github.com/jprichardson/node-fs-extra/issues/298 "API Docs [documentation]"
[#297]: https://github.com/jprichardson/node-fs-extra/pull/297 "Warn about using preserveTimestamps on 32-bit node"
[#296]: https://github.com/jprichardson/node-fs-extra/pull/296 "Improve EEXIST error message for copySync [enhancement]"
[#295]: https://github.com/jprichardson/node-fs-extra/pull/295 "Depreciate using regular expressions for copy's filter option [documentation]"
[#294]: https://github.com/jprichardson/node-fs-extra/pull/294 "BREAKING: Refactor lib/copy/ncp.js [feature-copy]"
[#293]: https://github.com/jprichardson/node-fs-extra/pull/293 "Update CI configs"
[#292]: https://github.com/jprichardson/node-fs-extra/issues/292 "Rewrite lib/copy/ncp.js [enhancement, feature-copy]"
[#291]: https://github.com/jprichardson/node-fs-extra/pull/291 "Escape '$' in replacement string for async file copying"
[#290]: https://github.com/jprichardson/node-fs-extra/issues/290 "Exclude files pattern while copying using copy.config.js [question]"
[#289]: https://github.com/jprichardson/node-fs-extra/pull/289 "(Closes #271) lib/util/utimes: properly close file descriptors in the event of an error"
[#288]: https://github.com/jprichardson/node-fs-extra/pull/288 "(Closes #271) lib/util/utimes: properly close file descriptors in the event of an error"
[#287]: https://github.com/jprichardson/node-fs-extra/issues/287 "emptyDir() callback arguments are inconsistent [enhancement, feature-remove]"
[#286]: https://github.com/jprichardson/node-fs-extra/pull/286 "Added walkSync function"
[#285]: https://github.com/jprichardson/node-fs-extra/issues/285 "CITGM test failing on s390"
[#284]: https://github.com/jprichardson/node-fs-extra/issues/284 "outputFile method is missing a check to determine if existing item is a folder or not"
[#283]: https://github.com/jprichardson/node-fs-extra/pull/283 "Apply filter also on directories and symlinks for copySync()"
[#282]: https://github.com/jprichardson/node-fs-extra/pull/282 "Apply filter also on directories and symlinks for copySync()"
[#281]: https://github.com/jprichardson/node-fs-extra/issues/281 "remove function executes 'successfully' but doesn't do anything?"
[#280]: https://github.com/jprichardson/node-fs-extra/pull/280 "Disable rimraf globbing"
[#279]: https://github.com/jprichardson/node-fs-extra/issues/279 "Some code is vendored instead of included [awaiting-reply]"
[#278]: https://github.com/jprichardson/node-fs-extra/issues/278 "copy() does not preserve file/directory ownership"
[#277]: https://github.com/jprichardson/node-fs-extra/pull/277 "Mention defaults for clobber and dereference options"
[#276]: https://github.com/jprichardson/node-fs-extra/issues/276 "Cannot connect to Shared Folder [awaiting-reply]"
[#275]: https://github.com/jprichardson/node-fs-extra/issues/275 "EMFILE, too many open files on Mac OS with JSON API"
[#274]: https://github.com/jprichardson/node-fs-extra/issues/274 "Use with memory-fs? [enhancement, future]"
[#273]: https://github.com/jprichardson/node-fs-extra/pull/273 "tests: rename `remote.test.js` to `remove.test.js`"
[#272]: https://github.com/jprichardson/node-fs-extra/issues/272 "Copy clobber flag never err even when true [bug, feature-copy]"
[#271]: https://github.com/jprichardson/node-fs-extra/issues/271 "Unclosed file handle on futimes error"
[#270]: https://github.com/jprichardson/node-fs-extra/issues/270 "copy not working as desired on Windows [feature-copy, platform-windows]"
[#269]: https://github.com/jprichardson/node-fs-extra/issues/269 "Copying with preserveTimeStamps: true is inaccurate using 32bit node [feature-copy]"
[#268]: https://github.com/jprichardson/node-fs-extra/pull/268 "port fix for mkdirp issue #111"
[#267]: https://github.com/jprichardson/node-fs-extra/issues/267 "WARN deprecated wrench@1.5.9: wrench.js is deprecated!"
[#266]: https://github.com/jprichardson/node-fs-extra/issues/266 "fs-extra"
[#265]: https://github.com/jprichardson/node-fs-extra/issues/265 "Link the `fs.stat fs.exists` etc. methods for replace the `fs` module forever?"
[#264]: https://github.com/jprichardson/node-fs-extra/issues/264 "Renaming a file using move fails when a file inside is open (at least on windows) [wont-fix]"
[#263]: https://github.com/jprichardson/node-fs-extra/issues/263 "ENOSYS: function not implemented, link [needs-confirmed]"
[#262]: https://github.com/jprichardson/node-fs-extra/issues/262 "Add .exists() and .existsSync()"
[#261]: https://github.com/jprichardson/node-fs-extra/issues/261 "Cannot read property 'prototype' of undefined"
[#260]: https://github.com/jprichardson/node-fs-extra/pull/260 "use more specific path for method require"
[#259]: https://github.com/jprichardson/node-fs-extra/issues/259 "Feature Request: isEmpty"
[#258]: https://github.com/jprichardson/node-fs-extra/issues/258 "copy files does not preserve file timestamp"
[#257]: https://github.com/jprichardson/node-fs-extra/issues/257 "Copying a file on windows fails"
[#256]: https://github.com/jprichardson/node-fs-extra/pull/256 "Updated Readme "
[#255]: https://github.com/jprichardson/node-fs-extra/issues/255 "Update rimraf required version"
[#254]: https://github.com/jprichardson/node-fs-extra/issues/254 "request for readTree, readTreeSync, walkSync method"
[#253]: https://github.com/jprichardson/node-fs-extra/issues/253 "outputFile does not touch mtime when file exists"
[#252]: https://github.com/jprichardson/node-fs-extra/pull/252 "Fixing problem when copying file with no write permission"
[#251]: https://github.com/jprichardson/node-fs-extra/issues/251 "Just wanted to say thank you"
[#250]: https://github.com/jprichardson/node-fs-extra/issues/250 "`fs.remove()` not removing files (works with `rm -rf`)"
[#249]: https://github.com/jprichardson/node-fs-extra/issues/249 "Just a Question ... Remove Servers"
[#248]: https://github.com/jprichardson/node-fs-extra/issues/248 "Allow option to not preserve permissions for copy"
[#247]: https://github.com/jprichardson/node-fs-extra/issues/247 "Add TypeScript typing directly in the fs-extra package"
[#246]: https://github.com/jprichardson/node-fs-extra/issues/246 "fse.remove() && fse.removeSync() don't throw error on ENOENT file"
[#245]: https://github.com/jprichardson/node-fs-extra/issues/245 "filter for empty dir [enhancement]"
[#244]: https://github.com/jprichardson/node-fs-extra/issues/244 "copySync doesn't apply the filter to directories"
[#243]: https://github.com/jprichardson/node-fs-extra/issues/243 "Can I request fs.walk() to be synchronous?"
[#242]: https://github.com/jprichardson/node-fs-extra/issues/242 "Accidentally truncates file names ending with $$ [bug, feature-copy]"
[#241]: https://github.com/jprichardson/node-fs-extra/pull/241 "Remove link to createOutputStream"
[#240]: https://github.com/jprichardson/node-fs-extra/issues/240 "walkSync request"
[#239]: https://github.com/jprichardson/node-fs-extra/issues/239 "Depreciate regular expressions for copy's filter [documentation, feature-copy]"
[#238]: https://github.com/jprichardson/node-fs-extra/issues/238 "Can't write to files while in a worker thread."
[#237]: https://github.com/jprichardson/node-fs-extra/issues/237 ".ensureDir(..) fails silently when passed an invalid path..."
[#236]: https://github.com/jprichardson/node-fs-extra/issues/236 "[Removed] Filed under wrong repo"
[#235]: https://github.com/jprichardson/node-fs-extra/pull/235 "Adds symlink dereference option to `fse.copySync` (#191)"
[#234]: https://github.com/jprichardson/node-fs-extra/issues/234 "ensureDirSync fails silent when EACCES: permission denied on travis-ci"
[#233]: https://github.com/jprichardson/node-fs-extra/issues/233 "please make sure the first argument in callback is error object [feature-copy]"
[#232]: https://github.com/jprichardson/node-fs-extra/issues/232 "Copy a folder content to its child folder. "
[#231]: https://github.com/jprichardson/node-fs-extra/issues/231 "Adding read/write/output functions for YAML"
[#230]: https://github.com/jprichardson/node-fs-extra/pull/230 "throw error if src and dest are the same to avoid zeroing out + test"
[#229]: https://github.com/jprichardson/node-fs-extra/pull/229 "fix 'TypeError: callback is not a function' in emptyDir"
[#228]: https://github.com/jprichardson/node-fs-extra/pull/228 "Throw error when target is empty so file is not accidentally zeroed out"
[#227]: https://github.com/jprichardson/node-fs-extra/issues/227 "Uncatchable errors when there are invalid arguments [feature-move]"
[#226]: https://github.com/jprichardson/node-fs-extra/issues/226 "Moving to the current directory"
[#225]: https://github.com/jprichardson/node-fs-extra/issues/225 "EBUSY: resource busy or locked, unlink"
[#224]: https://github.com/jprichardson/node-fs-extra/issues/224 "fse.copy ENOENT error"
[#223]: https://github.com/jprichardson/node-fs-extra/issues/223 "Suspicious behavior of fs.existsSync"
[#222]: https://github.com/jprichardson/node-fs-extra/pull/222 "A clearer description of emtpyDir function"
[#221]: https://github.com/jprichardson/node-fs-extra/pull/221 "Update README.md"
[#220]: https://github.com/jprichardson/node-fs-extra/pull/220 "Non-breaking feature: add option 'passStats' to copy methods."
[#219]: https://github.com/jprichardson/node-fs-extra/pull/219 "Add closing parenthesis in copySync example"
[#218]: https://github.com/jprichardson/node-fs-extra/pull/218 "fix #187 #70 options.filter bug"
[#217]: https://github.com/jprichardson/node-fs-extra/pull/217 "fix #187 #70 options.filter bug"
[#216]: https://github.com/jprichardson/node-fs-extra/pull/216 "fix #187 #70 options.filter bug"
[#215]: https://github.com/jprichardson/node-fs-extra/pull/215 "fse.copy throws error when only src and dest provided [bug, documentation, feature-copy]"
[#214]: https://github.com/jprichardson/node-fs-extra/pull/214 "Fixing copySync anchor tag"
[#213]: https://github.com/jprichardson/node-fs-extra/issues/213 "Merge extfs with this repo"
[#212]: https://github.com/jprichardson/node-fs-extra/pull/212 "Update year to 2016 in README.md and LICENSE"
[#211]: https://github.com/jprichardson/node-fs-extra/issues/211 "Not copying all files"
[#210]: https://github.com/jprichardson/node-fs-extra/issues/210 "copy/copySync behave differently when copying a symbolic file [bug, documentation, feature-copy]"
[#209]: https://github.com/jprichardson/node-fs-extra/issues/209 "In Windows invalid directory name causes infinite loop in ensureDir(). [bug]"
[#208]: https://github.com/jprichardson/node-fs-extra/pull/208 "fix options.preserveTimestamps to false in copy-sync by default [feature-copy]"
[#207]: https://github.com/jprichardson/node-fs-extra/issues/207 "Add `compare` suite of functions"
[#206]: https://github.com/jprichardson/node-fs-extra/issues/206 "outputFileSync"
[#205]: https://github.com/jprichardson/node-fs-extra/issues/205 "fix documents about copy/copySync [documentation, feature-copy]"
[#204]: https://github.com/jprichardson/node-fs-extra/pull/204 "allow copy of block and character device files"
[#203]: https://github.com/jprichardson/node-fs-extra/issues/203 "copy method's argument options couldn't be undefined [bug, feature-copy]"
[#202]: https://github.com/jprichardson/node-fs-extra/issues/202 "why there is not a walkSync method?"
[#201]: https://github.com/jprichardson/node-fs-extra/issues/201 "clobber for directories [feature-copy, future]"
[#200]: https://github.com/jprichardson/node-fs-extra/issues/200 "'copySync' doesn't work in sync"
[#199]: https://github.com/jprichardson/node-fs-extra/issues/199 "fs.copySync fails if user does not own file [bug, feature-copy]"
[#198]: https://github.com/jprichardson/node-fs-extra/issues/198 "handle copying between identical files [feature-copy]"
[#197]: https://github.com/jprichardson/node-fs-extra/issues/197 "Missing documentation for `outputFile` `options` 3rd parameter [documentation]"
[#196]: https://github.com/jprichardson/node-fs-extra/issues/196 "copy filter: async function and/or function called with `fs.stat` result [future]"
[#195]: https://github.com/jprichardson/node-fs-extra/issues/195 "How to override with outputFile?"
[#194]: https://github.com/jprichardson/node-fs-extra/pull/194 "allow ensureFile(Sync) to provide data to be written to created file"
[#193]: https://github.com/jprichardson/node-fs-extra/issues/193 "`fs.copy` fails silently if source file is /dev/null [bug, feature-copy]"
[#192]: https://github.com/jprichardson/node-fs-extra/issues/192 "Remove fs.createOutputStream()"
[#191]: https://github.com/jprichardson/node-fs-extra/issues/191 "How to copy symlinks to target as normal folders [feature-copy]"
[#190]: https://github.com/jprichardson/node-fs-extra/pull/190 "copySync to overwrite destination file if readonly and clobber true"
[#189]: https://github.com/jprichardson/node-fs-extra/pull/189 "move.test fix to support CRLF on Windows"
[#188]: https://github.com/jprichardson/node-fs-extra/issues/188 "move.test failing on windows platform"
[#187]: https://github.com/jprichardson/node-fs-extra/issues/187 "Not filter each file, stops on first false [feature-copy]"
[#186]: https://github.com/jprichardson/node-fs-extra/issues/186 "Do you need a .size() function in this module? [future]"
[#185]: https://github.com/jprichardson/node-fs-extra/issues/185 "Doesn't work on NodeJS v4.x"
[#184]: https://github.com/jprichardson/node-fs-extra/issues/184 "CLI equivalent for fs-extra"
[#183]: https://github.com/jprichardson/node-fs-extra/issues/183 "with clobber true, copy and copySync behave differently if destination file is read only [bug, feature-copy]"
[#182]: https://github.com/jprichardson/node-fs-extra/issues/182 "ensureDir(dir, callback) second callback parameter not specified"
[#181]: https://github.com/jprichardson/node-fs-extra/issues/181 "Add ability to remove file securely [enhancement, wont-fix]"
[#180]: https://github.com/jprichardson/node-fs-extra/issues/180 "Filter option doesn't work the same way in copy and copySync [bug, feature-copy]"
[#179]: https://github.com/jprichardson/node-fs-extra/issues/179 "Include opendir"
[#178]: https://github.com/jprichardson/node-fs-extra/issues/178 "ENOTEMPTY is thrown on removeSync "
[#177]: https://github.com/jprichardson/node-fs-extra/issues/177 "fix `remove()` wildcards (introduced by rimraf) [feature-remove]"
[#176]: https://github.com/jprichardson/node-fs-extra/issues/176 "createOutputStream doesn't emit 'end' event"
[#175]: https://github.com/jprichardson/node-fs-extra/issues/175 "[Feature Request].moveSync support [feature-move, future]"
[#174]: https://github.com/jprichardson/node-fs-extra/pull/174 "Fix copy formatting and document options.filter"
[#173]: https://github.com/jprichardson/node-fs-extra/issues/173 "Feature Request: writeJson should mkdirs"
[#172]: https://github.com/jprichardson/node-fs-extra/issues/172 "rename `clobber` flags to `overwrite`"
[#171]: https://github.com/jprichardson/node-fs-extra/issues/171 "remove unnecessary aliases"
[#170]: https://github.com/jprichardson/node-fs-extra/pull/170 "More robust handling of errors moving across virtual drives"
[#169]: https://github.com/jprichardson/node-fs-extra/pull/169 "suppress ensureLink & ensureSymlink dest exists error"
[#168]: https://github.com/jprichardson/node-fs-extra/pull/168 "suppress ensurelink dest exists error"
[#167]: https://github.com/jprichardson/node-fs-extra/pull/167 "Adds basic (string, buffer) support for ensureFile content [future]"
[#166]: https://github.com/jprichardson/node-fs-extra/pull/166 "Adds basic (string, buffer) support for ensureFile content"
[#165]: https://github.com/jprichardson/node-fs-extra/pull/165 "ensure for link & symlink"
[#164]: https://github.com/jprichardson/node-fs-extra/issues/164 "Feature Request: ensureFile to take optional argument for file content"
[#163]: https://github.com/jprichardson/node-fs-extra/issues/163 "ouputJson not formatted out of the box [bug]"
[#162]: https://github.com/jprichardson/node-fs-extra/pull/162 "ensure symlink & link"
[#161]: https://github.com/jprichardson/node-fs-extra/pull/161 "ensure symlink & link"
[#160]: https://github.com/jprichardson/node-fs-extra/pull/160 "ensure symlink & link"
[#159]: https://github.com/jprichardson/node-fs-extra/pull/159 "ensure symlink & link"
[#158]: https://github.com/jprichardson/node-fs-extra/issues/158 "Feature Request: ensureLink and ensureSymlink methods"
[#157]: https://github.com/jprichardson/node-fs-extra/issues/157 "writeJson isn't formatted"
[#156]: https://github.com/jprichardson/node-fs-extra/issues/156 "Promise.promisifyAll doesn't work for some methods"
[#155]: https://github.com/jprichardson/node-fs-extra/issues/155 "Readme"
[#154]: https://github.com/jprichardson/node-fs-extra/issues/154 "/tmp/millis-test-sync"
[#153]: https://github.com/jprichardson/node-fs-extra/pull/153 "Make preserveTimes also work on read-only files. Closes #152"
[#152]: https://github.com/jprichardson/node-fs-extra/issues/152 "fs.copy fails for read-only files with preserveTimestamp=true [feature-copy]"
[#151]: https://github.com/jprichardson/node-fs-extra/issues/151 "TOC does not work correctly on npm [documentation]"
[#150]: https://github.com/jprichardson/node-fs-extra/issues/150 "Remove test file fixtures, create with code."
[#149]: https://github.com/jprichardson/node-fs-extra/issues/149 "/tmp/millis-test-sync"
[#148]: https://github.com/jprichardson/node-fs-extra/issues/148 "split out `Sync` methods in documentation"
[#147]: https://github.com/jprichardson/node-fs-extra/issues/147 "Adding rmdirIfEmpty"
[#146]: https://github.com/jprichardson/node-fs-extra/pull/146 "ensure test.js works"
[#145]: https://github.com/jprichardson/node-fs-extra/issues/145 "Add `fs.exists` and `fs.existsSync` if it doesn't exist."
[#144]: https://github.com/jprichardson/node-fs-extra/issues/144 "tests failing"
[#143]: https://github.com/jprichardson/node-fs-extra/issues/143 "update graceful-fs"
[#142]: https://github.com/jprichardson/node-fs-extra/issues/142 "PrependFile Feature"
[#141]: https://github.com/jprichardson/node-fs-extra/pull/141 "Add option to preserve timestamps"
[#140]: https://github.com/jprichardson/node-fs-extra/issues/140 "Json file reading fails with 'utf8'"
[#139]: https://github.com/jprichardson/node-fs-extra/pull/139 "Preserve file timestamp on copy. Closes #138"
[#138]: https://github.com/jprichardson/node-fs-extra/issues/138 "Preserve timestamps on copying files"
[#137]: https://github.com/jprichardson/node-fs-extra/issues/137 "outputFile/outputJson: Unexpected end of input"
[#136]: https://github.com/jprichardson/node-fs-extra/pull/136 "Update license attribute"
[#135]: https://github.com/jprichardson/node-fs-extra/issues/135 "emptyDir throws Error if no callback is provided"
[#134]: https://github.com/jprichardson/node-fs-extra/pull/134 "Handle EEXIST error when clobbering dir"
[#133]: https://github.com/jprichardson/node-fs-extra/pull/133 "Travis runs with `sudo: false`"
[#132]: https://github.com/jprichardson/node-fs-extra/pull/132 "isDirectory method"
[#131]: https://github.com/jprichardson/node-fs-extra/issues/131 "copySync is not working iojs 1.8.4 on linux [feature-copy]"
[#130]: https://github.com/jprichardson/node-fs-extra/pull/130 "Please review additional features."
[#129]: https://github.com/jprichardson/node-fs-extra/pull/129 "can you review this feature?"
[#128]: https://github.com/jprichardson/node-fs-extra/issues/128 "fsExtra.move(filepath, newPath) broken;"
[#127]: https://github.com/jprichardson/node-fs-extra/issues/127 "consider using fs.access to remove deprecated warnings for fs.exists"
[#126]: https://github.com/jprichardson/node-fs-extra/issues/126 " TypeError: Object #<Object> has no method 'access'"
[#125]: https://github.com/jprichardson/node-fs-extra/issues/125 "Question: What do the *Sync function do different from non-sync"
[#124]: https://github.com/jprichardson/node-fs-extra/issues/124 "move with clobber option 'ENOTEMPTY'"
[#123]: https://github.com/jprichardson/node-fs-extra/issues/123 "Only copy the content of a directory"
[#122]: https://github.com/jprichardson/node-fs-extra/pull/122 "Update section links in README to match current section ids."
[#121]: https://github.com/jprichardson/node-fs-extra/issues/121 "emptyDir is undefined"
[#120]: https://github.com/jprichardson/node-fs-extra/issues/120 "usage bug caused by shallow cloning methods of 'graceful-fs'"
[#119]: https://github.com/jprichardson/node-fs-extra/issues/119 "mkdirs and ensureDir never invoke callback and consume CPU indefinitely if provided a path with invalid characters on Windows"
[#118]: https://github.com/jprichardson/node-fs-extra/pull/118 "createOutputStream"
[#117]: https://github.com/jprichardson/node-fs-extra/pull/117 "Fixed issue with slash separated paths on windows"
[#116]: https://github.com/jprichardson/node-fs-extra/issues/116 "copySync can only copy directories not files [documentation, feature-copy]"
[#115]: https://github.com/jprichardson/node-fs-extra/issues/115 ".Copy & .CopySync [feature-copy]"
[#114]: https://github.com/jprichardson/node-fs-extra/issues/114 "Fails to move (rename) directory to non-empty directory even with clobber: true"
[#113]: https://github.com/jprichardson/node-fs-extra/issues/113 "fs.copy seems to callback early if the destination file already exists"
[#112]: https://github.com/jprichardson/node-fs-extra/pull/112 "Copying a file into an existing directory"
[#111]: https://github.com/jprichardson/node-fs-extra/pull/111 "Moving a file into an existing directory "
[#110]: https://github.com/jprichardson/node-fs-extra/pull/110 "Moving a file into an existing directory"
[#109]: https://github.com/jprichardson/node-fs-extra/issues/109 "fs.move across windows drives fails"
[#108]: https://github.com/jprichardson/node-fs-extra/issues/108 "fse.move directories across multiple devices doesn't work"
[#107]: https://github.com/jprichardson/node-fs-extra/pull/107 "Check if dest path is an existing dir and copy or move source in it"
[#106]: https://github.com/jprichardson/node-fs-extra/issues/106 "fse.copySync crashes while copying across devices D: [feature-copy]"
[#105]: https://github.com/jprichardson/node-fs-extra/issues/105 "fs.copy hangs on iojs"
[#104]: https://github.com/jprichardson/node-fs-extra/issues/104 "fse.move deletes folders [bug]"
[#103]: https://github.com/jprichardson/node-fs-extra/issues/103 "Error: EMFILE with copy"
[#102]: https://github.com/jprichardson/node-fs-extra/issues/102 "touch / touchSync was removed ?"
[#101]: https://github.com/jprichardson/node-fs-extra/issues/101 "fs-extra promisified"
[#100]: https://github.com/jprichardson/node-fs-extra/pull/100 "copy: options object or filter to pass to ncp"
[#99]: https://github.com/jprichardson/node-fs-extra/issues/99 "ensureDir() modes [future]"
[#98]: https://github.com/jprichardson/node-fs-extra/issues/98 "fs.copy() incorrect async behavior [bug]"
[#97]: https://github.com/jprichardson/node-fs-extra/pull/97 "use path.join; fix copySync bug"
[#96]: https://github.com/jprichardson/node-fs-extra/issues/96 "destFolderExists in copySync is always undefined."
[#95]: https://github.com/jprichardson/node-fs-extra/pull/95 "Using graceful-ncp instead of ncp"
[#94]: https://github.com/jprichardson/node-fs-extra/issues/94 "Error: EEXIST, file already exists '../mkdirp/bin/cmd.js' on fs.copySync() [enhancement, feature-copy]"
[#93]: https://github.com/jprichardson/node-fs-extra/issues/93 "Confusing error if drive not mounted [enhancement]"
[#92]: https://github.com/jprichardson/node-fs-extra/issues/92 "Problems with Bluebird"
[#91]: https://github.com/jprichardson/node-fs-extra/issues/91 "fs.copySync('/test', '/haha') is different with 'cp -r /test /haha' [enhancement]"
[#90]: https://github.com/jprichardson/node-fs-extra/issues/90 "Folder creation and file copy is Happening in 64 bit machine but not in 32 bit machine"
[#89]: https://github.com/jprichardson/node-fs-extra/issues/89 "Error: EEXIST using fs-extra's fs.copy to copy a directory on Windows"
[#88]: https://github.com/jprichardson/node-fs-extra/issues/88 "Stacking those libraries"
[#87]: https://github.com/jprichardson/node-fs-extra/issues/87 "createWriteStream + outputFile = ?"
[#86]: https://github.com/jprichardson/node-fs-extra/issues/86 "no moveSync?"
[#85]: https://github.com/jprichardson/node-fs-extra/pull/85 "Copy symlinks in copySync"
[#84]: https://github.com/jprichardson/node-fs-extra/issues/84 "Push latest version to npm ?"
[#83]: https://github.com/jprichardson/node-fs-extra/issues/83 "Prevent copying a directory into itself [feature-copy]"
[#82]: https://github.com/jprichardson/node-fs-extra/pull/82 "README updates for move"
[#81]: https://github.com/jprichardson/node-fs-extra/issues/81 "fd leak after fs.move"
[#80]: https://github.com/jprichardson/node-fs-extra/pull/80 "Preserve file mode in copySync"
[#79]: https://github.com/jprichardson/node-fs-extra/issues/79 "fs.copy only .html file empty"
[#78]: https://github.com/jprichardson/node-fs-extra/pull/78 "copySync was not applying filters to directories"
[#77]: https://github.com/jprichardson/node-fs-extra/issues/77 "Create README reference to bluebird"
[#76]: https://github.com/jprichardson/node-fs-extra/issues/76 "Create README reference to typescript"
[#75]: https://github.com/jprichardson/node-fs-extra/issues/75 "add glob as a dep? [question]"
[#74]: https://github.com/jprichardson/node-fs-extra/pull/74 "including new emptydir module"
[#73]: https://github.com/jprichardson/node-fs-extra/pull/73 "add dependency status in readme"
[#72]: https://github.com/jprichardson/node-fs-extra/pull/72 "Use svg instead of png to get better image quality"
[#71]: https://github.com/jprichardson/node-fs-extra/issues/71 "fse.copy not working on Windows 7 x64 OS, but, copySync does work"
[#70]: https://github.com/jprichardson/node-fs-extra/issues/70 "Not filter each file, stops on first false [bug]"
[#69]: https://github.com/jprichardson/node-fs-extra/issues/69 "How to check if folder exist and read the folder name"
[#68]: https://github.com/jprichardson/node-fs-extra/issues/68 "consider flag to readJsonSync (throw false) [enhancement]"
[#67]: https://github.com/jprichardson/node-fs-extra/issues/67 "docs for readJson incorrectly states that is accepts options"
[#66]: https://github.com/jprichardson/node-fs-extra/issues/66 "ENAMETOOLONG"
[#65]: https://github.com/jprichardson/node-fs-extra/issues/65 "exclude filter in fs.copy"
[#64]: https://github.com/jprichardson/node-fs-extra/issues/64 "Announce: mfs - monitor your fs-extra calls"
[#63]: https://github.com/jprichardson/node-fs-extra/issues/63 "Walk"
[#62]: https://github.com/jprichardson/node-fs-extra/issues/62 "npm install fs-extra doesn't work"
[#61]: https://github.com/jprichardson/node-fs-extra/issues/61 "No longer supports node 0.8 due to use of `^` in package.json dependencies"
[#60]: https://github.com/jprichardson/node-fs-extra/issues/60 "chmod & chown for mkdirs"
[#59]: https://github.com/jprichardson/node-fs-extra/issues/59 "Consider including mkdirp and making fs-extra '--use_strict' safe [question]"
[#58]: https://github.com/jprichardson/node-fs-extra/issues/58 "Stack trace not included in fs.copy error"
[#57]: https://github.com/jprichardson/node-fs-extra/issues/57 "Possible to include wildcards in delete?"
[#56]: https://github.com/jprichardson/node-fs-extra/issues/56 "Crash when have no access to write to destination file in copy "
[#55]: https://github.com/jprichardson/node-fs-extra/issues/55 "Is it possible to have any console output similar to Grunt copy module?"
[#54]: https://github.com/jprichardson/node-fs-extra/issues/54 "`copy` does not preserve file ownership and permissons"
[#53]: https://github.com/jprichardson/node-fs-extra/issues/53 "outputFile() - ability to write data in appending mode"
[#52]: https://github.com/jprichardson/node-fs-extra/pull/52 "This fixes (what I think) is a bug in copySync"
[#51]: https://github.com/jprichardson/node-fs-extra/pull/51 "Add a Bitdeli Badge to README"
[#50]: https://github.com/jprichardson/node-fs-extra/issues/50 "Replace mechanism in createFile"
[#49]: https://github.com/jprichardson/node-fs-extra/pull/49 "update rimraf to v2.2.6"
[#48]: https://github.com/jprichardson/node-fs-extra/issues/48 "fs.copy issue [bug]"
[#47]: https://github.com/jprichardson/node-fs-extra/issues/47 "Bug in copy - callback called on readStream 'close' - Fixed in ncp 0.5.0"
[#46]: https://github.com/jprichardson/node-fs-extra/pull/46 "update copyright year"
[#45]: https://github.com/jprichardson/node-fs-extra/pull/45 "Added note about fse.outputFile() being the one that overwrites"
[#44]: https://github.com/jprichardson/node-fs-extra/pull/44 "Proposal: Stream support"
[#43]: https://github.com/jprichardson/node-fs-extra/issues/43 "Better error reporting "
[#42]: https://github.com/jprichardson/node-fs-extra/issues/42 "Performance issue?"
[#41]: https://github.com/jprichardson/node-fs-extra/pull/41 "There does seem to be a synchronous version now"
[#40]: https://github.com/jprichardson/node-fs-extra/issues/40 "fs.copy throw unexplained error ENOENT, utime "
[#39]: https://github.com/jprichardson/node-fs-extra/pull/39 "Added regression test for copy() return callback on error"
[#38]: https://github.com/jprichardson/node-fs-extra/pull/38 "Return err in copy() fstat cb, because stat could be undefined or null"
[#37]: https://github.com/jprichardson/node-fs-extra/issues/37 "Maybe include a line reader? [enhancement, question]"
[#36]: https://github.com/jprichardson/node-fs-extra/pull/36 "`filter` parameter `fs.copy` and `fs.copySync`"
[#35]: https://github.com/jprichardson/node-fs-extra/pull/35 "`filter` parameter `fs.copy` and `fs.copySync` "
[#34]: https://github.com/jprichardson/node-fs-extra/issues/34 "update docs to include options for JSON methods [enhancement]"
[#33]: https://github.com/jprichardson/node-fs-extra/pull/33 "fs_extra.copySync"
[#32]: https://github.com/jprichardson/node-fs-extra/issues/32 "update to latest jsonfile [enhancement]"
[#31]: https://github.com/jprichardson/node-fs-extra/issues/31 "Add ensure methods [enhancement]"
[#30]: https://github.com/jprichardson/node-fs-extra/issues/30 "update package.json optional dep `graceful-fs`"
[#29]: https://github.com/jprichardson/node-fs-extra/issues/29 "Copy failing if dest directory doesn't exist. Is this intended?"
[#28]: https://github.com/jprichardson/node-fs-extra/issues/28 "homepage field must be a string url. Deleted."
[#27]: https://github.com/jprichardson/node-fs-extra/issues/27 "Update Readme"
[#26]: https://github.com/jprichardson/node-fs-extra/issues/26 "Add readdir recursive method. [enhancement]"
[#25]: https://github.com/jprichardson/node-fs-extra/pull/25 "adding an `.npmignore` file"
[#24]: https://github.com/jprichardson/node-fs-extra/issues/24 "[bug] cannot run in strict mode [bug]"
[#23]: https://github.com/jprichardson/node-fs-extra/issues/23 "`writeJSON()` should create parent directories"
[#22]: https://github.com/jprichardson/node-fs-extra/pull/22 "Add a limit option to mkdirs()"
[#21]: https://github.com/jprichardson/node-fs-extra/issues/21 "touch() in 0.10.0"
[#20]: https://github.com/jprichardson/node-fs-extra/issues/20 "fs.remove yields callback before directory is really deleted"
[#19]: https://github.com/jprichardson/node-fs-extra/issues/19 "fs.copy err is empty array"
[#18]: https://github.com/jprichardson/node-fs-extra/pull/18 "Exposed copyFile Function"
[#17]: https://github.com/jprichardson/node-fs-extra/issues/17 "Use `require('graceful-fs')` if found instead of `require('fs')`"
[#16]: https://github.com/jprichardson/node-fs-extra/pull/16 "Update README.md"
[#15]: https://github.com/jprichardson/node-fs-extra/issues/15 "Implement cp -r but sync aka copySync. [enhancement]"
[#14]: https://github.com/jprichardson/node-fs-extra/issues/14 "fs.mkdirSync is broken in 0.3.1"
[#13]: https://github.com/jprichardson/node-fs-extra/issues/13 "Thoughts on including a directory tree / file watcher? [enhancement, question]"
[#12]: https://github.com/jprichardson/node-fs-extra/issues/12 "copyFile & copyFileSync are global"
[#11]: https://github.com/jprichardson/node-fs-extra/issues/11 "Thoughts on including a file walker? [enhancement, question]"
[#10]: https://github.com/jprichardson/node-fs-extra/issues/10 "move / moveFile API [enhancement]"
[#9]: https://github.com/jprichardson/node-fs-extra/issues/9 "don't import normal fs stuff into fs-extra"
[#8]: https://github.com/jprichardson/node-fs-extra/pull/8 "Update rimraf to latest version"
[#6]: https://github.com/jprichardson/node-fs-extra/issues/6 "Remove CoffeeScript development dependency"
[#5]: https://github.com/jprichardson/node-fs-extra/issues/5 "comments on naming"
[#4]: https://github.com/jprichardson/node-fs-extra/issues/4 "version bump to 0.2"
[#3]: https://github.com/jprichardson/node-fs-extra/pull/3 "Hi! I fixed some code for you!"
[#2]: https://github.com/jprichardson/node-fs-extra/issues/2 "Merge with fs.extra and mkdirp"
[#1]: https://github.com/jprichardson/node-fs-extra/issues/1 "file-extra npm !exist"

40
node_modules/fs-extra/README.md generated vendored
View File

@ -4,11 +4,9 @@ Node.js: fs-extra
`fs-extra` adds file system methods that aren't included in the native `fs` module and adds promise support to the `fs` methods. It also uses [`graceful-fs`](https://github.com/isaacs/node-graceful-fs) to prevent `EMFILE` errors. It should be a drop in replacement for `fs`. `fs-extra` adds file system methods that aren't included in the native `fs` module and adds promise support to the `fs` methods. It also uses [`graceful-fs`](https://github.com/isaacs/node-graceful-fs) to prevent `EMFILE` errors. It should be a drop in replacement for `fs`.
[![npm Package](https://img.shields.io/npm/v/fs-extra.svg)](https://www.npmjs.org/package/fs-extra) [![npm Package](https://img.shields.io/npm/v/fs-extra.svg)](https://www.npmjs.org/package/fs-extra)
[![License](https://img.shields.io/npm/l/express.svg)](https://github.com/jprichardson/node-fs-extra/blob/master/LICENSE) [![License](https://img.shields.io/npm/l/fs-extra.svg)](https://github.com/jprichardson/node-fs-extra/blob/master/LICENSE)
[![build status](https://img.shields.io/travis/jprichardson/node-fs-extra/master.svg)](http://travis-ci.org/jprichardson/node-fs-extra) [![build status](https://img.shields.io/github/actions/workflow/status/jprichardson/node-fs-extra/ci.yml?branch=master)](https://github.com/jprichardson/node-fs-extra/actions/workflows/ci.yml?query=branch%3Amaster)
[![windows Build status](https://img.shields.io/appveyor/ci/jprichardson/node-fs-extra/master.svg?label=windows%20build)](https://ci.appveyor.com/project/jprichardson/node-fs-extra/branch/master)
[![downloads per month](http://img.shields.io/npm/dm/fs-extra.svg)](https://www.npmjs.org/package/fs-extra) [![downloads per month](http://img.shields.io/npm/dm/fs-extra.svg)](https://www.npmjs.org/package/fs-extra)
[![Coverage Status](https://img.shields.io/coveralls/github/jprichardson/node-fs-extra/master.svg)](https://coveralls.io/github/jprichardson/node-fs-extra)
[![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)
Why? Why?
@ -29,6 +27,8 @@ Installation
Usage Usage
----- -----
### CommonJS
`fs-extra` is a drop in replacement for native `fs`. All methods in `fs` are attached to `fs-extra`. All `fs` methods return promises if the callback isn't passed. `fs-extra` is a drop in replacement for native `fs`. All methods in `fs` are attached to `fs-extra`. All `fs` methods return promises if the callback isn't passed.
You don't ever need to include the original `fs` module again: You don't ever need to include the original `fs` module again:
@ -57,6 +57,31 @@ const fs = require('fs')
const fse = require('fs-extra') const fse = require('fs-extra')
``` ```
### ESM
There is also an `fs-extra/esm` import, that supports both default and named exports. However, note that `fs` methods are not included in `fs-extra/esm`; you still need to import `fs` and/or `fs/promises` seperately:
```js
import { readFileSync } from 'fs'
import { readFile } from 'fs/promises'
import { outputFile, outputFileSync } from 'fs-extra/esm'
```
Default exports are supported:
```js
import fs from 'fs'
import fse from 'fs-extra/esm'
// fse.readFileSync is not a function; must use fs.readFileSync
```
but you probably want to just use regular `fs-extra` instead of `fs-extra/esm` for default exports:
```js
import fs from 'fs-extra'
// both fs and fs-extra methods are defined
```
Sync vs Async vs Async/Await Sync vs Async vs Async/Await
------------- -------------
Most methods are async by default. All async methods will return a promise if the callback isn't passed. Most methods are async by default. All async methods will return a promise if the callback isn't passed.
@ -189,7 +214,7 @@ you're gonna have to get over it :) If `standard` is good enough for `npm`, it's
What's needed? What's needed?
- First, take a look at existing issues. Those are probably going to be where the priority lies. - First, take a look at existing issues. Those are probably going to be where the priority lies.
- More tests for edge cases. Specifically on different platforms. There can never be enough tests. - More tests for edge cases. Specifically on different platforms. There can never be enough tests.
- Improve test coverage. See coveralls output for more info. - Improve test coverage.
Note: If you make any big changes, **you should definitely file an issue for discussion first.** Note: If you make any big changes, **you should definitely file an issue for discussion first.**
@ -199,7 +224,10 @@ fs-extra contains hundreds of tests.
- `npm run lint`: runs the linter ([standard](http://standardjs.com/)) - `npm run lint`: runs the linter ([standard](http://standardjs.com/))
- `npm run unit`: runs the unit tests - `npm run unit`: runs the unit tests
- `npm test`: runs both the linter and the tests - `npm run unit-esm`: runs tests for `fs-extra/esm` exports
- `npm test`: runs the linter and all tests
When running unit tests, set the environment variable `CROSS_DEVICE_PATH` to the absolute path of an empty directory on another device (like a thumb drive) to enable cross-device move tests.
### Windows ### Windows

View File

@ -1,166 +0,0 @@
'use strict'
const fs = require('graceful-fs')
const path = require('path')
const mkdirsSync = require('../mkdirs').mkdirsSync
const utimesMillisSync = require('../util/utimes').utimesMillisSync
const stat = require('../util/stat')
function copySync (src, dest, opts) {
if (typeof opts === 'function') {
opts = { filter: opts }
}
opts = opts || {}
opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now
opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber
// Warn about using preserveTimestamps on 32-bit node
if (opts.preserveTimestamps && process.arch === 'ia32') {
console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n
see https://github.com/jprichardson/node-fs-extra/issues/269`)
}
const { srcStat, destStat } = stat.checkPathsSync(src, dest, 'copy', opts)
stat.checkParentPathsSync(src, srcStat, dest, 'copy')
return handleFilterAndCopy(destStat, src, dest, opts)
}
function handleFilterAndCopy (destStat, src, dest, opts) {
if (opts.filter && !opts.filter(src, dest)) return
const destParent = path.dirname(dest)
if (!fs.existsSync(destParent)) mkdirsSync(destParent)
return getStats(destStat, src, dest, opts)
}
function startCopy (destStat, src, dest, opts) {
if (opts.filter && !opts.filter(src, dest)) return
return getStats(destStat, src, dest, opts)
}
function getStats (destStat, src, dest, opts) {
const statSync = opts.dereference ? fs.statSync : fs.lstatSync
const srcStat = statSync(src)
if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts)
else if (srcStat.isFile() ||
srcStat.isCharacterDevice() ||
srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts)
else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts)
else if (srcStat.isSocket()) throw new Error(`Cannot copy a socket file: ${src}`)
else if (srcStat.isFIFO()) throw new Error(`Cannot copy a FIFO pipe: ${src}`)
throw new Error(`Unknown file: ${src}`)
}
function onFile (srcStat, destStat, src, dest, opts) {
if (!destStat) return copyFile(srcStat, src, dest, opts)
return mayCopyFile(srcStat, src, dest, opts)
}
function mayCopyFile (srcStat, src, dest, opts) {
if (opts.overwrite) {
fs.unlinkSync(dest)
return copyFile(srcStat, src, dest, opts)
} else if (opts.errorOnExist) {
throw new Error(`'${dest}' already exists`)
}
}
function copyFile (srcStat, src, dest, opts) {
fs.copyFileSync(src, dest)
if (opts.preserveTimestamps) handleTimestamps(srcStat.mode, src, dest)
return setDestMode(dest, srcStat.mode)
}
function handleTimestamps (srcMode, src, dest) {
// Make sure the file is writable before setting the timestamp
// otherwise open fails with EPERM when invoked with 'r+'
// (through utimes call)
if (fileIsNotWritable(srcMode)) makeFileWritable(dest, srcMode)
return setDestTimestamps(src, dest)
}
function fileIsNotWritable (srcMode) {
return (srcMode & 0o200) === 0
}
function makeFileWritable (dest, srcMode) {
return setDestMode(dest, srcMode | 0o200)
}
function setDestMode (dest, srcMode) {
return fs.chmodSync(dest, srcMode)
}
function setDestTimestamps (src, dest) {
// The initial srcStat.atime cannot be trusted
// because it is modified by the read(2) system call
// (See https://nodejs.org/api/fs.html#fs_stat_time_values)
const updatedSrcStat = fs.statSync(src)
return utimesMillisSync(dest, updatedSrcStat.atime, updatedSrcStat.mtime)
}
function onDir (srcStat, destStat, src, dest, opts) {
if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts)
return copyDir(src, dest, opts)
}
function mkDirAndCopy (srcMode, src, dest, opts) {
fs.mkdirSync(dest)
copyDir(src, dest, opts)
return setDestMode(dest, srcMode)
}
function copyDir (src, dest, opts) {
fs.readdirSync(src).forEach(item => copyDirItem(item, src, dest, opts))
}
function copyDirItem (item, src, dest, opts) {
const srcItem = path.join(src, item)
const destItem = path.join(dest, item)
const { destStat } = stat.checkPathsSync(srcItem, destItem, 'copy', opts)
return startCopy(destStat, srcItem, destItem, opts)
}
function onLink (destStat, src, dest, opts) {
let resolvedSrc = fs.readlinkSync(src)
if (opts.dereference) {
resolvedSrc = path.resolve(process.cwd(), resolvedSrc)
}
if (!destStat) {
return fs.symlinkSync(resolvedSrc, dest)
} else {
let resolvedDest
try {
resolvedDest = fs.readlinkSync(dest)
} catch (err) {
// dest exists and is a regular file or directory,
// Windows may throw UNKNOWN error. If dest already exists,
// fs throws error anyway, so no need to guard against it here.
if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlinkSync(resolvedSrc, dest)
throw err
}
if (opts.dereference) {
resolvedDest = path.resolve(process.cwd(), resolvedDest)
}
if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {
throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`)
}
// prevent copy if src is a subdir of dest since unlinking
// dest in this case would result in removing src contents
// and therefore a broken symlink would be created.
if (fs.statSync(dest).isDirectory() && stat.isSrcSubdir(resolvedDest, resolvedSrc)) {
throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)
}
return copyLink(resolvedSrc, dest)
}
}
function copyLink (resolvedSrc, dest) {
fs.unlinkSync(dest)
return fs.symlinkSync(resolvedSrc, dest)
}
module.exports = copySync

View File

@ -1,5 +0,0 @@
'use strict'
module.exports = {
copySync: require('./copy-sync')
}

View File

@ -23,8 +23,11 @@ function copy (src, dest, opts, cb) {
// Warn about using preserveTimestamps on 32-bit node // Warn about using preserveTimestamps on 32-bit node
if (opts.preserveTimestamps && process.arch === 'ia32') { if (opts.preserveTimestamps && process.arch === 'ia32') {
console.warn(`fs-extra: Using the preserveTimestamps option in 32-bit node is not recommended;\n process.emitWarning(
see https://github.com/jprichardson/node-fs-extra/issues/269`) 'Using the preserveTimestamps option in 32-bit node is not recommended;\n\n' +
'\tsee https://github.com/jprichardson/node-fs-extra/issues/269',
'Warning', 'fs-extra-WARN0001'
)
} }
stat.checkPaths(src, dest, 'copy', opts, (err, stats) => { stat.checkPaths(src, dest, 'copy', opts, (err, stats) => {
@ -32,8 +35,12 @@ function copy (src, dest, opts, cb) {
const { srcStat, destStat } = stats const { srcStat, destStat } = stats
stat.checkParentPaths(src, srcStat, dest, 'copy', err => { stat.checkParentPaths(src, srcStat, dest, 'copy', err => {
if (err) return cb(err) if (err) return cb(err)
if (opts.filter) return handleFilter(checkParentDir, destStat, src, dest, opts, cb) runFilter(src, dest, opts, (err, include) => {
return checkParentDir(destStat, src, dest, opts, cb) if (err) return cb(err)
if (!include) return cb()
checkParentDir(destStat, src, dest, opts, cb)
})
}) })
}) })
} }
@ -50,16 +57,10 @@ function checkParentDir (destStat, src, dest, opts, cb) {
}) })
} }
function handleFilter (onInclude, destStat, src, dest, opts, cb) { function runFilter (src, dest, opts, cb) {
Promise.resolve(opts.filter(src, dest)).then(include => { if (!opts.filter) return cb(null, true)
if (include) return onInclude(destStat, src, dest, opts, cb) Promise.resolve(opts.filter(src, dest))
return cb() .then(include => cb(null, include), error => cb(error))
}, error => cb(error))
}
function startCopy (destStat, src, dest, opts, cb) {
if (opts.filter) return handleFilter(getStats, destStat, src, dest, opts, cb)
return getStats(destStat, src, dest, opts, cb)
} }
function getStats (destStat, src, dest, opts, cb) { function getStats (destStat, src, dest, opts, cb) {
@ -175,14 +176,19 @@ function copyDirItems (items, src, dest, opts, cb) {
function copyDirItem (items, item, src, dest, opts, cb) { function copyDirItem (items, item, src, dest, opts, cb) {
const srcItem = path.join(src, item) const srcItem = path.join(src, item)
const destItem = path.join(dest, item) const destItem = path.join(dest, item)
runFilter(srcItem, destItem, opts, (err, include) => {
if (err) return cb(err)
if (!include) return copyDirItems(items, src, dest, opts, cb)
stat.checkPaths(srcItem, destItem, 'copy', opts, (err, stats) => { stat.checkPaths(srcItem, destItem, 'copy', opts, (err, stats) => {
if (err) return cb(err) if (err) return cb(err)
const { destStat } = stats const { destStat } = stats
startCopy(destStat, srcItem, destItem, opts, err => { getStats(destStat, srcItem, destItem, opts, err => {
if (err) return cb(err) if (err) return cb(err)
return copyDirItems(items, src, dest, opts, cb) return copyDirItems(items, src, dest, opts, cb)
}) })
}) })
})
} }
function onLink (destStat, src, dest, opts, cb) { function onLink (destStat, src, dest, opts, cb) {
@ -213,7 +219,7 @@ function onLink (destStat, src, dest, opts, cb) {
// do not copy if src is a subdir of dest since unlinking // do not copy if src is a subdir of dest since unlinking
// dest in this case would result in removing src contents // dest in this case would result in removing src contents
// and therefore a broken symlink would be created. // and therefore a broken symlink would be created.
if (destStat.isDirectory() && stat.isSrcSubdir(resolvedDest, resolvedSrc)) { if (stat.isSrcSubdir(resolvedDest, resolvedSrc)) {
return cb(new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)) return cb(new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`))
} }
return copyLink(resolvedSrc, dest, cb) return copyLink(resolvedSrc, dest, cb)

View File

@ -2,5 +2,6 @@
const u = require('universalify').fromCallback const u = require('universalify').fromCallback
module.exports = { module.exports = {
copy: u(require('./copy')) copy: u(require('./copy')),
copySync: require('./copy-sync')
} }

View File

@ -1,23 +1,23 @@
'use strict' 'use strict'
const file = require('./file') const { createFile, createFileSync } = require('./file')
const link = require('./link') const { createLink, createLinkSync } = require('./link')
const symlink = require('./symlink') const { createSymlink, createSymlinkSync } = require('./symlink')
module.exports = { module.exports = {
// file // file
createFile: file.createFile, createFile,
createFileSync: file.createFileSync, createFileSync,
ensureFile: file.createFile, ensureFile: createFile,
ensureFileSync: file.createFileSync, ensureFileSync: createFileSync,
// link // link
createLink: link.createLink, createLink,
createLinkSync: link.createLinkSync, createLinkSync,
ensureLink: link.createLink, ensureLink: createLink,
ensureLinkSync: link.createLinkSync, ensureLinkSync: createLinkSync,
// symlink // symlink
createSymlink: symlink.createSymlink, createSymlink,
createSymlinkSync: symlink.createSymlinkSync, createSymlinkSync,
ensureSymlink: symlink.createSymlink, ensureSymlink: createSymlink,
ensureSymlinkSync: symlink.createSymlinkSync ensureSymlinkSync: createSymlinkSync
} }

View File

@ -41,8 +41,7 @@ const api = [
'writeFile' 'writeFile'
].filter(key => { ].filter(key => {
// Some commands are not available on some systems. Ex: // Some commands are not available on some systems. Ex:
// fs.opendir was added in Node.js v12.12.0 // fs.cp was added in Node.js v16.7.0
// fs.rm was added in Node.js v14.14.0
// fs.lchown is not available on at least some Linux // fs.lchown is not available on at least some Linux
return typeof fs[key] === 'function' return typeof fs[key] === 'function'
}) })
@ -54,7 +53,6 @@ Object.assign(exports, fs)
api.forEach(method => { api.forEach(method => {
exports[method] = u(fs[method]) exports[method] = u(fs[method])
}) })
exports.realpath.native = u(fs.realpath.native)
// We differ from mz/fs in that we still ship the old, broken, fs.exists() // We differ from mz/fs in that we still ship the old, broken, fs.exists()
// since we are a drop-in replacement for the native module // since we are a drop-in replacement for the native module
@ -67,7 +65,7 @@ exports.exists = function (filename, callback) {
}) })
} }
// fs.read(), fs.write(), & fs.writev() need special treatment due to multiple callback args // fs.read(), fs.write(), fs.readv(), & fs.writev() need special treatment due to multiple callback args
exports.read = function (fd, buffer, offset, length, position, callback) { exports.read = function (fd, buffer, offset, length, position, callback) {
if (typeof callback === 'function') { if (typeof callback === 'function') {
@ -99,12 +97,26 @@ exports.write = function (fd, buffer, ...args) {
}) })
} }
// fs.writev only available in Node v12.9.0+ // Function signature is
if (typeof fs.writev === 'function') { // s.readv(fd, buffers[, position], callback)
// Function signature is // We need to handle the optional arg, so we use ...args
// s.writev(fd, buffers[, position], callback) exports.readv = function (fd, buffers, ...args) {
// We need to handle the optional arg, so we use ...args if (typeof args[args.length - 1] === 'function') {
exports.writev = function (fd, buffers, ...args) { return fs.readv(fd, buffers, ...args)
}
return new Promise((resolve, reject) => {
fs.readv(fd, buffers, ...args, (err, bytesRead, buffers) => {
if (err) return reject(err)
resolve({ bytesRead, buffers })
})
})
}
// Function signature is
// s.writev(fd, buffers[, position], callback)
// We need to handle the optional arg, so we use ...args
exports.writev = function (fd, buffers, ...args) {
if (typeof args[args.length - 1] === 'function') { if (typeof args[args.length - 1] === 'function') {
return fs.writev(fd, buffers, ...args) return fs.writev(fd, buffers, ...args)
} }
@ -115,5 +127,14 @@ if (typeof fs.writev === 'function') {
resolve({ bytesWritten, buffers }) resolve({ bytesWritten, buffers })
}) })
}) })
} }
// fs.realpath.native sometimes not available if fs is monkey-patched
if (typeof fs.realpath.native === 'function') {
exports.realpath.native = u(fs.realpath.native)
} else {
process.emitWarning(
'fs.realpath.native is not a function. Is fs being monkey-patched?',
'Warning', 'fs-extra-WARN0003'
)
} }

4
node_modules/fs-extra/lib/index.js generated vendored
View File

@ -4,15 +4,13 @@ module.exports = {
// Export promiseified graceful-fs: // Export promiseified graceful-fs:
...require('./fs'), ...require('./fs'),
// Export extra methods: // Export extra methods:
...require('./copy-sync'),
...require('./copy'), ...require('./copy'),
...require('./empty'), ...require('./empty'),
...require('./ensure'), ...require('./ensure'),
...require('./json'), ...require('./json'),
...require('./mkdirs'), ...require('./mkdirs'),
...require('./move-sync'),
...require('./move'), ...require('./move'),
...require('./output'), ...require('./output-file'),
...require('./path-exists'), ...require('./path-exists'),
...require('./remove') ...require('./remove')
} }

View File

@ -1,7 +1,7 @@
'use strict' 'use strict'
const { stringify } = require('jsonfile/utils') const { stringify } = require('jsonfile/utils')
const { outputFileSync } = require('../output') const { outputFileSync } = require('../output-file')
function outputJsonSync (file, data, options) { function outputJsonSync (file, data, options) {
const str = stringify(data, options) const str = stringify(data, options)

View File

@ -1,7 +1,7 @@
'use strict' 'use strict'
const { stringify } = require('jsonfile/utils') const { stringify } = require('jsonfile/utils')
const { outputFile } = require('../output') const { outputFile } = require('../output-file')
async function outputJson (file, data, options = {}) { async function outputJson (file, data, options = {}) {
const str = stringify(data, options) const str = stringify(data, options)

View File

@ -1,5 +0,0 @@
'use strict'
module.exports = {
moveSync: require('./move-sync')
}

View File

@ -1,54 +0,0 @@
'use strict'
const fs = require('graceful-fs')
const path = require('path')
const copySync = require('../copy-sync').copySync
const removeSync = require('../remove').removeSync
const mkdirpSync = require('../mkdirs').mkdirpSync
const stat = require('../util/stat')
function moveSync (src, dest, opts) {
opts = opts || {}
const overwrite = opts.overwrite || opts.clobber || false
const { srcStat, isChangingCase = false } = stat.checkPathsSync(src, dest, 'move', opts)
stat.checkParentPathsSync(src, srcStat, dest, 'move')
if (!isParentRoot(dest)) mkdirpSync(path.dirname(dest))
return doRename(src, dest, overwrite, isChangingCase)
}
function isParentRoot (dest) {
const parent = path.dirname(dest)
const parsedPath = path.parse(parent)
return parsedPath.root === parent
}
function doRename (src, dest, overwrite, isChangingCase) {
if (isChangingCase) return rename(src, dest, overwrite)
if (overwrite) {
removeSync(dest)
return rename(src, dest, overwrite)
}
if (fs.existsSync(dest)) throw new Error('dest already exists.')
return rename(src, dest, overwrite)
}
function rename (src, dest, overwrite) {
try {
fs.renameSync(src, dest)
} catch (err) {
if (err.code !== 'EXDEV') throw err
return moveAcrossDevice(src, dest, overwrite)
}
}
function moveAcrossDevice (src, dest, overwrite) {
const opts = {
overwrite,
errorOnExist: true
}
copySync(src, dest, opts)
return removeSync(src)
}
module.exports = moveSync

View File

@ -2,5 +2,6 @@
const u = require('universalify').fromCallback const u = require('universalify').fromCallback
module.exports = { module.exports = {
move: u(require('./move')) move: u(require('./move')),
moveSync: require('./move-sync')
} }

View File

@ -14,6 +14,8 @@ function move (src, dest, opts, cb) {
opts = {} opts = {}
} }
opts = opts || {}
const overwrite = opts.overwrite || opts.clobber || false const overwrite = opts.overwrite || opts.clobber || false
stat.checkPaths(src, dest, 'move', opts, (err, stats) => { stat.checkPaths(src, dest, 'move', opts, (err, stats) => {
@ -62,7 +64,8 @@ function rename (src, dest, overwrite, cb) {
function moveAcrossDevice (src, dest, overwrite, cb) { function moveAcrossDevice (src, dest, overwrite, cb) {
const opts = { const opts = {
overwrite, overwrite,
errorOnExist: true errorOnExist: true,
preserveTimestamps: true
} }
copy(src, dest, opts, err => { copy(src, dest, opts, err => {
if (err) return cb(err) if (err) return cb(err)

View File

@ -1,40 +0,0 @@
'use strict'
const u = require('universalify').fromCallback
const fs = require('graceful-fs')
const path = require('path')
const mkdir = require('../mkdirs')
const pathExists = require('../path-exists').pathExists
function outputFile (file, data, encoding, callback) {
if (typeof encoding === 'function') {
callback = encoding
encoding = 'utf8'
}
const dir = path.dirname(file)
pathExists(dir, (err, itDoes) => {
if (err) return callback(err)
if (itDoes) return fs.writeFile(file, data, encoding, callback)
mkdir.mkdirs(dir, err => {
if (err) return callback(err)
fs.writeFile(file, data, encoding, callback)
})
})
}
function outputFileSync (file, ...args) {
const dir = path.dirname(file)
if (fs.existsSync(dir)) {
return fs.writeFileSync(file, ...args)
}
mkdir.mkdirsSync(dir)
fs.writeFileSync(file, ...args)
}
module.exports = {
outputFile: u(outputFile),
outputFileSync
}

View File

@ -2,18 +2,13 @@
const fs = require('graceful-fs') const fs = require('graceful-fs')
const u = require('universalify').fromCallback const u = require('universalify').fromCallback
const rimraf = require('./rimraf')
function remove (path, callback) { function remove (path, callback) {
// Node 14.14.0+ fs.rm(path, { recursive: true, force: true }, callback)
if (fs.rm) return fs.rm(path, { recursive: true, force: true }, callback)
rimraf(path, callback)
} }
function removeSync (path) { function removeSync (path) {
// Node 14.14.0+ fs.rmSync(path, { recursive: true, force: true })
if (fs.rmSync) return fs.rmSync(path, { recursive: true, force: true })
rimraf.sync(path)
} }
module.exports = { module.exports = {

View File

@ -1,302 +0,0 @@
'use strict'
const fs = require('graceful-fs')
const path = require('path')
const assert = require('assert')
const isWindows = (process.platform === 'win32')
function defaults (options) {
const methods = [
'unlink',
'chmod',
'stat',
'lstat',
'rmdir',
'readdir'
]
methods.forEach(m => {
options[m] = options[m] || fs[m]
m = m + 'Sync'
options[m] = options[m] || fs[m]
})
options.maxBusyTries = options.maxBusyTries || 3
}
function rimraf (p, options, cb) {
let busyTries = 0
if (typeof options === 'function') {
cb = options
options = {}
}
assert(p, 'rimraf: missing path')
assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')
assert.strictEqual(typeof cb, 'function', 'rimraf: callback function required')
assert(options, 'rimraf: invalid options argument provided')
assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')
defaults(options)
rimraf_(p, options, function CB (er) {
if (er) {
if ((er.code === 'EBUSY' || er.code === 'ENOTEMPTY' || er.code === 'EPERM') &&
busyTries < options.maxBusyTries) {
busyTries++
const time = busyTries * 100
// try again, with the same exact callback as this one.
return setTimeout(() => rimraf_(p, options, CB), time)
}
// already gone
if (er.code === 'ENOENT') er = null
}
cb(er)
})
}
// Two possible strategies.
// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR
// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR
//
// Both result in an extra syscall when you guess wrong. However, there
// are likely far more normal files in the world than directories. This
// is based on the assumption that a the average number of files per
// directory is >= 1.
//
// If anyone ever complains about this, then I guess the strategy could
// be made configurable somehow. But until then, YAGNI.
function rimraf_ (p, options, cb) {
assert(p)
assert(options)
assert(typeof cb === 'function')
// sunos lets the root user unlink directories, which is... weird.
// so we have to lstat here and make sure it's not a dir.
options.lstat(p, (er, st) => {
if (er && er.code === 'ENOENT') {
return cb(null)
}
// Windows can EPERM on stat. Life is suffering.
if (er && er.code === 'EPERM' && isWindows) {
return fixWinEPERM(p, options, er, cb)
}
if (st && st.isDirectory()) {
return rmdir(p, options, er, cb)
}
options.unlink(p, er => {
if (er) {
if (er.code === 'ENOENT') {
return cb(null)
}
if (er.code === 'EPERM') {
return (isWindows)
? fixWinEPERM(p, options, er, cb)
: rmdir(p, options, er, cb)
}
if (er.code === 'EISDIR') {
return rmdir(p, options, er, cb)
}
}
return cb(er)
})
})
}
function fixWinEPERM (p, options, er, cb) {
assert(p)
assert(options)
assert(typeof cb === 'function')
options.chmod(p, 0o666, er2 => {
if (er2) {
cb(er2.code === 'ENOENT' ? null : er)
} else {
options.stat(p, (er3, stats) => {
if (er3) {
cb(er3.code === 'ENOENT' ? null : er)
} else if (stats.isDirectory()) {
rmdir(p, options, er, cb)
} else {
options.unlink(p, cb)
}
})
}
})
}
function fixWinEPERMSync (p, options, er) {
let stats
assert(p)
assert(options)
try {
options.chmodSync(p, 0o666)
} catch (er2) {
if (er2.code === 'ENOENT') {
return
} else {
throw er
}
}
try {
stats = options.statSync(p)
} catch (er3) {
if (er3.code === 'ENOENT') {
return
} else {
throw er
}
}
if (stats.isDirectory()) {
rmdirSync(p, options, er)
} else {
options.unlinkSync(p)
}
}
function rmdir (p, options, originalEr, cb) {
assert(p)
assert(options)
assert(typeof cb === 'function')
// try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
// if we guessed wrong, and it's not a directory, then
// raise the original error.
options.rmdir(p, er => {
if (er && (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM')) {
rmkids(p, options, cb)
} else if (er && er.code === 'ENOTDIR') {
cb(originalEr)
} else {
cb(er)
}
})
}
function rmkids (p, options, cb) {
assert(p)
assert(options)
assert(typeof cb === 'function')
options.readdir(p, (er, files) => {
if (er) return cb(er)
let n = files.length
let errState
if (n === 0) return options.rmdir(p, cb)
files.forEach(f => {
rimraf(path.join(p, f), options, er => {
if (errState) {
return
}
if (er) return cb(errState = er)
if (--n === 0) {
options.rmdir(p, cb)
}
})
})
})
}
// this looks simpler, and is strictly *faster*, but will
// tie up the JavaScript thread and fail on excessively
// deep directory trees.
function rimrafSync (p, options) {
let st
options = options || {}
defaults(options)
assert(p, 'rimraf: missing path')
assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')
assert(options, 'rimraf: missing options')
assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')
try {
st = options.lstatSync(p)
} catch (er) {
if (er.code === 'ENOENT') {
return
}
// Windows can EPERM on stat. Life is suffering.
if (er.code === 'EPERM' && isWindows) {
fixWinEPERMSync(p, options, er)
}
}
try {
// sunos lets the root user unlink directories, which is... weird.
if (st && st.isDirectory()) {
rmdirSync(p, options, null)
} else {
options.unlinkSync(p)
}
} catch (er) {
if (er.code === 'ENOENT') {
return
} else if (er.code === 'EPERM') {
return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
} else if (er.code !== 'EISDIR') {
throw er
}
rmdirSync(p, options, er)
}
}
function rmdirSync (p, options, originalEr) {
assert(p)
assert(options)
try {
options.rmdirSync(p)
} catch (er) {
if (er.code === 'ENOTDIR') {
throw originalEr
} else if (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM') {
rmkidsSync(p, options)
} else if (er.code !== 'ENOENT') {
throw er
}
}
}
function rmkidsSync (p, options) {
assert(p)
assert(options)
options.readdirSync(p).forEach(f => rimrafSync(path.join(p, f), options))
if (isWindows) {
// We only end up here once we got ENOTEMPTY at least once, and
// at this point, we are guaranteed to have removed all the kids.
// So, we know that it won't be ENOENT or ENOTDIR or anything else.
// try really hard to delete stuff on windows, because it has a
// PROFOUNDLY annoying habit of not closing handles promptly when
// files are deleted, resulting in spurious ENOTEMPTY errors.
const startTime = Date.now()
do {
try {
const ret = options.rmdirSync(p, options)
return ret
} catch {}
} while (Date.now() - startTime < 500) // give up after 500ms
} else {
const ret = options.rmdirSync(p, options)
return ret
}
}
module.exports = rimraf
rimraf.sync = rimrafSync

25
node_modules/fs-extra/package.json generated vendored
View File

@ -1,9 +1,9 @@
{ {
"name": "fs-extra", "name": "fs-extra",
"version": "10.0.0", "version": "11.1.1",
"description": "fs-extra contains methods that aren't included in the vanilla Node.js fs package. Such as recursive mkdir, copy, and remove.", "description": "fs-extra contains methods that aren't included in the vanilla Node.js fs package. Such as recursive mkdir, copy, and remove.",
"engines": { "engines": {
"node": ">=12" "node": ">=14.14"
}, },
"homepage": "https://github.com/jprichardson/node-fs-extra", "homepage": "https://github.com/jprichardson/node-fs-extra",
"repository": { "repository": {
@ -42,29 +42,30 @@
"universalify": "^2.0.0" "universalify": "^2.0.0"
}, },
"devDependencies": { "devDependencies": {
"at-least-node": "^1.0.0",
"coveralls": "^3.0.0",
"klaw": "^2.1.1", "klaw": "^2.1.1",
"klaw-sync": "^3.0.2", "klaw-sync": "^3.0.2",
"minimist": "^1.1.1", "minimist": "^1.1.1",
"mocha": "^5.0.5", "mocha": "^10.1.0",
"nyc": "^15.0.0", "nyc": "^15.0.0",
"proxyquire": "^2.0.1", "proxyquire": "^2.0.1",
"read-dir-files": "^0.1.1", "read-dir-files": "^0.1.1",
"standard": "^14.1.0" "standard": "^17.0.0"
}, },
"main": "./lib/index.js", "main": "./lib/index.js",
"exports": {
".": "./lib/index.js",
"./esm": "./lib/esm.mjs"
},
"files": [ "files": [
"lib/", "lib/",
"!lib/**/__tests__/" "!lib/**/__tests__/"
], ],
"scripts": { "scripts": {
"full-ci": "npm run lint && npm run coverage",
"coverage": "nyc -r lcovonly npm run unit",
"coveralls": "coveralls < coverage/lcov.info",
"lint": "standard", "lint": "standard",
"test-find": "find ./lib/**/__tests__ -name *.test.js | xargs mocha", "test-find": "find ./lib/**/__tests__ -name *.test.js | xargs mocha",
"test": "npm run lint && npm run unit", "test": "npm run lint && npm run unit && npm run unit-esm",
"unit": "node test.js" "unit": "nyc node test.js",
} "unit-esm": "node test.mjs"
},
"sideEffects": false
} }

108
node_modules/globby/gitignore.js generated vendored
View File

@ -1,108 +0,0 @@
import process from 'node:process';
import fs from 'node:fs';
import path from 'node:path';
import fastGlob from 'fast-glob';
import gitIgnore from 'ignore';
import slash from 'slash';
import toPath from './to-path.js';
const DEFAULT_IGNORE = [
'**/node_modules/**',
'**/flow-typed/**',
'**/coverage/**',
'**/.git',
];
const mapGitIgnorePatternTo = base => ignore => {
if (ignore.startsWith('!')) {
return '!' + path.posix.join(base, ignore.slice(1));
}
return path.posix.join(base, ignore);
};
const parseGitIgnore = (content, options) => {
const base = slash(path.relative(options.cwd, path.dirname(options.fileName)));
return content
.split(/\r?\n/)
.filter(Boolean)
.filter(line => !line.startsWith('#'))
.map(mapGitIgnorePatternTo(base));
};
const reduceIgnore = files => {
const ignores = gitIgnore();
for (const file of files) {
ignores.add(parseGitIgnore(file.content, {
cwd: file.cwd,
fileName: file.filePath,
}));
}
return ignores;
};
const ensureAbsolutePathForCwd = (cwd, p) => {
cwd = slash(cwd);
if (path.isAbsolute(p)) {
if (slash(p).startsWith(cwd)) {
return p;
}
throw new Error(`Path ${p} is not in cwd ${cwd}`);
}
return path.join(cwd, p);
};
const getIsIgnoredPredicate = (ignores, cwd) => p => ignores.ignores(slash(path.relative(cwd, ensureAbsolutePathForCwd(cwd, toPath(p.path || p)))));
const getFile = async (file, cwd) => {
const filePath = path.join(cwd, file);
const content = await fs.promises.readFile(filePath, 'utf8');
return {
cwd,
filePath,
content,
};
};
const getFileSync = (file, cwd) => {
const filePath = path.join(cwd, file);
const content = fs.readFileSync(filePath, 'utf8');
return {
cwd,
filePath,
content,
};
};
const normalizeOptions = ({
ignore = [],
cwd = slash(process.cwd()),
} = {}) => ({ignore: [...DEFAULT_IGNORE, ...ignore], cwd: toPath(cwd)});
export const isGitIgnored = async options => {
options = normalizeOptions(options);
const paths = await fastGlob('**/.gitignore', options);
const files = await Promise.all(paths.map(file => getFile(file, options.cwd)));
const ignores = reduceIgnore(files);
return getIsIgnoredPredicate(ignores, options.cwd);
};
export const isGitIgnoredSync = options => {
options = normalizeOptions(options);
const paths = fastGlob.sync('**/.gitignore', options);
const files = paths.map(file => getFileSync(file, options.cwd));
const ignores = reduceIgnore(files);
return getIsIgnoredPredicate(ignores, options.cwd);
};

23
node_modules/globby/index.d.ts generated vendored
View File

@ -1,10 +1,9 @@
import {URL} from 'node:url'; // TODO: Remove this when https://github.com/DefinitelyTyped/DefinitelyTyped/issues/34960 is fixed.
import {Options as FastGlobOptions, Entry} from 'fast-glob'; import {Options as FastGlobOptions, Entry} from 'fast-glob';
export type GlobEntry = Entry; export type GlobEntry = Entry;
export interface GlobTask { export interface GlobTask {
readonly pattern: string; readonly patterns: string[];
readonly options: Options; readonly options: Options;
} }
@ -47,6 +46,15 @@ export interface Options extends FastGlobOptionsWithoutCwd {
*/ */
readonly gitignore?: boolean; readonly gitignore?: boolean;
/**
Glob patterns to look for ignore files, which are then used to ignore globbed files.
This is a more generic form of the `gitignore` option, allowing you to find ignore files with a [compatible syntax](http://git-scm.com/docs/gitignore). For instance, this works with Babel's `.babelignore`, Prettier's `.prettierignore`, or ESLint's `.eslintignore` files.
@default undefined
*/
readonly ignoreFiles?: string | readonly string[];
/** /**
The current working directory in which to search. The current working directory in which to search.
@ -57,7 +65,6 @@ export interface Options extends FastGlobOptionsWithoutCwd {
export interface GitignoreOptions { export interface GitignoreOptions {
readonly cwd?: URL | string; readonly cwd?: URL | string;
readonly ignore?: readonly string[];
} }
export type GlobbyFilterFunction = (path: URL | string) => boolean; export type GlobbyFilterFunction = (path: URL | string) => boolean;
@ -141,6 +148,16 @@ Note that you should avoid running the same tasks multiple times as they contain
export function generateGlobTasks( export function generateGlobTasks(
patterns: string | readonly string[], patterns: string | readonly string[],
options?: Options options?: Options
): Promise<GlobTask[]>;
/**
@see generateGlobTasks
@returns An object in the format `{pattern: string, options: object}`, which can be passed as arguments to [`fast-glob`](https://github.com/mrmlnc/fast-glob). This is useful for other globbing-related packages.
*/
export function generateGlobTasksSync(
patterns: string | readonly string[],
options?: Options
): GlobTask[]; ): GlobTask[];
/** /**

348
node_modules/globby/index.js generated vendored
View File

@ -1,22 +1,27 @@
import fs from 'node:fs'; import fs from 'node:fs';
import arrayUnion from 'array-union'; import nodePath from 'node:path';
import merge2 from 'merge2'; import merge2 from 'merge2';
import fastGlob from 'fast-glob'; import fastGlob from 'fast-glob';
import dirGlob from 'dir-glob'; import dirGlob from 'dir-glob';
import toPath from './to-path.js'; import {
import {isGitIgnored, isGitIgnoredSync} from './gitignore.js'; GITIGNORE_FILES_PATTERN,
import {FilterStream, UniqueStream} from './stream-utils.js'; isIgnoredByIgnoreFiles,
isIgnoredByIgnoreFilesSync,
const DEFAULT_FILTER = () => false; } from './ignore.js';
import {FilterStream, toPath, isNegativePattern} from './utilities.js';
const isNegative = pattern => pattern[0] === '!';
const assertPatternsInput = patterns => { const assertPatternsInput = patterns => {
if (!patterns.every(pattern => typeof pattern === 'string')) { if (patterns.some(pattern => typeof pattern !== 'string')) {
throw new TypeError('Patterns must be a string or an array of strings'); throw new TypeError('Patterns must be a string or an array of strings');
} }
}; };
const toPatternsArray = patterns => {
patterns = [...new Set([patterns].flat())];
assertPatternsInput(patterns);
return patterns;
};
const checkCwdOption = options => { const checkCwdOption = options => {
if (!options.cwd) { if (!options.cwd) {
return; return;
@ -34,164 +39,189 @@ const checkCwdOption = options => {
} }
}; };
const getPathString = p => p.stats instanceof fs.Stats ? p.path : p; const normalizeOptions = (options = {}) => {
options = {
export const generateGlobTasks = (patterns, taskOptions = {}) => {
patterns = arrayUnion([patterns].flat());
assertPatternsInput(patterns);
const globTasks = [];
taskOptions = {
ignore: [], ignore: [],
expandDirectories: true, expandDirectories: true,
...taskOptions,
cwd: toPath(taskOptions.cwd),
};
checkCwdOption(taskOptions);
for (const [index, pattern] of patterns.entries()) {
if (isNegative(pattern)) {
continue;
}
const ignore = patterns
.slice(index)
.filter(pattern => isNegative(pattern))
.map(pattern => pattern.slice(1));
const options = {
...taskOptions,
ignore: [...taskOptions.ignore, ...ignore],
};
globTasks.push({pattern, options});
}
return globTasks;
};
const globDirectories = (task, fn) => {
let options = {};
if (task.options.cwd) {
options.cwd = task.options.cwd;
}
if (Array.isArray(task.options.expandDirectories)) {
options = {
...options,
files: task.options.expandDirectories,
};
} else if (typeof task.options.expandDirectories === 'object') {
options = {
...options,
...task.options.expandDirectories,
};
}
return fn(task.pattern, options);
};
const getPattern = (task, fn) => task.options.expandDirectories ? globDirectories(task, fn) : [task.pattern];
const getFilterSync = options => options && options.gitignore
? isGitIgnoredSync({cwd: options.cwd, ignore: options.ignore})
: DEFAULT_FILTER;
const globToTask = task => async glob => {
const {options} = task;
if (options.ignore && Array.isArray(options.ignore) && options.expandDirectories) {
options.ignore = await dirGlob(options.ignore);
}
return {
pattern: glob,
options,
};
};
const globToTaskSync = task => glob => {
const {options} = task;
if (options.ignore && Array.isArray(options.ignore) && options.expandDirectories) {
options.ignore = dirGlob.sync(options.ignore);
}
return {
pattern: glob,
options,
};
};
export const globby = async (patterns, options) => {
const globTasks = generateGlobTasks(patterns, options);
const getFilter = async () => options && options.gitignore
? isGitIgnored({cwd: options.cwd, ignore: options.ignore})
: DEFAULT_FILTER;
const getTasks = async () => {
const tasks = await Promise.all(globTasks.map(async task => {
const globs = await getPattern(task, dirGlob);
return Promise.all(globs.map(globToTask(task)));
}));
return arrayUnion(...tasks);
};
const [filter, tasks] = await Promise.all([getFilter(), getTasks()]);
const paths = await Promise.all(tasks.map(task => fastGlob(task.pattern, task.options)));
return arrayUnion(...paths).filter(path_ => !filter(getPathString(path_)));
};
export const globbySync = (patterns, options) => {
const globTasks = generateGlobTasks(patterns, options);
const tasks = [];
for (const task of globTasks) {
const newTask = getPattern(task, dirGlob.sync).map(globToTaskSync(task));
tasks.push(...newTask);
}
const filter = getFilterSync(options);
let matches = [];
for (const task of tasks) {
matches = arrayUnion(matches, fastGlob.sync(task.pattern, task.options));
}
return matches.filter(path_ => !filter(path_));
};
export const globbyStream = (patterns, options) => {
const globTasks = generateGlobTasks(patterns, options);
const tasks = [];
for (const task of globTasks) {
const newTask = getPattern(task, dirGlob.sync).map(globToTaskSync(task));
tasks.push(...newTask);
}
const filter = getFilterSync(options);
const filterStream = new FilterStream(p => !filter(p));
const uniqueStream = new UniqueStream();
return merge2(tasks.map(task => fastGlob.stream(task.pattern, task.options)))
.pipe(filterStream)
.pipe(uniqueStream);
};
export const isDynamicPattern = (patterns, options = {}) => {
options = {
...options, ...options,
cwd: toPath(options.cwd), cwd: toPath(options.cwd),
}; };
return [patterns].flat().some(pattern => fastGlob.isDynamicPattern(pattern, options)); checkCwdOption(options);
return options;
}; };
const normalizeArguments = fn => async (patterns, options) => fn(toPatternsArray(patterns), normalizeOptions(options));
const normalizeArgumentsSync = fn => (patterns, options) => fn(toPatternsArray(patterns), normalizeOptions(options));
const getIgnoreFilesPatterns = options => {
const {ignoreFiles, gitignore} = options;
const patterns = ignoreFiles ? toPatternsArray(ignoreFiles) : [];
if (gitignore) {
patterns.push(GITIGNORE_FILES_PATTERN);
}
return patterns;
};
const getFilter = async options => {
const ignoreFilesPatterns = getIgnoreFilesPatterns(options);
return createFilterFunction(
ignoreFilesPatterns.length > 0 && await isIgnoredByIgnoreFiles(ignoreFilesPatterns, options),
);
};
const getFilterSync = options => {
const ignoreFilesPatterns = getIgnoreFilesPatterns(options);
return createFilterFunction(
ignoreFilesPatterns.length > 0 && isIgnoredByIgnoreFilesSync(ignoreFilesPatterns, options),
);
};
const createFilterFunction = isIgnored => {
const seen = new Set();
return fastGlobResult => {
const path = fastGlobResult.path || fastGlobResult;
const pathKey = nodePath.normalize(path);
const seenOrIgnored = seen.has(pathKey) || (isIgnored && isIgnored(path));
seen.add(pathKey);
return !seenOrIgnored;
};
};
const unionFastGlobResults = (results, filter) => results.flat().filter(fastGlobResult => filter(fastGlobResult));
const unionFastGlobStreams = (streams, filter) => merge2(streams).pipe(new FilterStream(fastGlobResult => filter(fastGlobResult)));
const convertNegativePatterns = (patterns, options) => {
const tasks = [];
while (patterns.length > 0) {
const index = patterns.findIndex(pattern => isNegativePattern(pattern));
if (index === -1) {
tasks.push({patterns, options});
break;
}
const ignorePattern = patterns[index].slice(1);
for (const task of tasks) {
task.options.ignore.push(ignorePattern);
}
if (index !== 0) {
tasks.push({
patterns: patterns.slice(0, index),
options: {
...options,
ignore: [
...options.ignore,
ignorePattern,
],
},
});
}
patterns = patterns.slice(index + 1);
}
return tasks;
};
const getDirGlobOptions = (options, cwd) => ({
...(cwd ? {cwd} : {}),
...(Array.isArray(options) ? {files: options} : options),
});
const generateTasks = async (patterns, options) => {
const globTasks = convertNegativePatterns(patterns, options);
const {cwd, expandDirectories} = options;
if (!expandDirectories) {
return globTasks;
}
const patternExpandOptions = getDirGlobOptions(expandDirectories, cwd);
const ignoreExpandOptions = cwd ? {cwd} : undefined;
return Promise.all(
globTasks.map(async task => {
let {patterns, options} = task;
[
patterns,
options.ignore,
] = await Promise.all([
dirGlob(patterns, patternExpandOptions),
dirGlob(options.ignore, ignoreExpandOptions),
]);
return {patterns, options};
}),
);
};
const generateTasksSync = (patterns, options) => {
const globTasks = convertNegativePatterns(patterns, options);
const {cwd, expandDirectories} = options;
if (!expandDirectories) {
return globTasks;
}
const patternExpandOptions = getDirGlobOptions(expandDirectories, cwd);
const ignoreExpandOptions = cwd ? {cwd} : undefined;
return globTasks.map(task => {
let {patterns, options} = task;
patterns = dirGlob.sync(patterns, patternExpandOptions);
options.ignore = dirGlob.sync(options.ignore, ignoreExpandOptions);
return {patterns, options};
});
};
export const globby = normalizeArguments(async (patterns, options) => {
const [
tasks,
filter,
] = await Promise.all([
generateTasks(patterns, options),
getFilter(options),
]);
const results = await Promise.all(tasks.map(task => fastGlob(task.patterns, task.options)));
return unionFastGlobResults(results, filter);
});
export const globbySync = normalizeArgumentsSync((patterns, options) => {
const tasks = generateTasksSync(patterns, options);
const filter = getFilterSync(options);
const results = tasks.map(task => fastGlob.sync(task.patterns, task.options));
return unionFastGlobResults(results, filter);
});
export const globbyStream = normalizeArgumentsSync((patterns, options) => {
const tasks = generateTasksSync(patterns, options);
const filter = getFilterSync(options);
const streams = tasks.map(task => fastGlob.stream(task.patterns, task.options));
return unionFastGlobStreams(streams, filter);
});
export const isDynamicPattern = normalizeArgumentsSync(
(patterns, options) => patterns.some(pattern => fastGlob.isDynamicPattern(pattern, options)),
);
export const generateGlobTasks = normalizeArguments(generateTasks);
export const generateGlobTasksSync = normalizeArgumentsSync(generateTasksSync);
export { export {
isGitIgnored, isGitIgnored,
isGitIgnoredSync, isGitIgnoredSync,
} from './gitignore.js'; } from './ignore.js';

33
node_modules/globby/package.json generated vendored
View File

@ -1,6 +1,6 @@
{ {
"name": "globby", "name": "globby",
"version": "12.2.0", "version": "13.1.4",
"description": "User-friendly glob matching", "description": "User-friendly glob matching",
"license": "MIT", "license": "MIT",
"repository": "sindresorhus/globby", "repository": "sindresorhus/globby",
@ -16,15 +16,14 @@
"node": "^12.20.0 || ^14.13.1 || >=16.0.0" "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
}, },
"scripts": { "scripts": {
"bench": "npm update glob-stream fast-glob && matcha bench.js", "bench": "npm update @globby/main-branch glob-stream fast-glob && node bench.js",
"test": "xo && ava && tsd" "test": "xo && ava && tsd"
}, },
"files": [ "files": [
"index.js", "index.js",
"index.d.ts", "index.d.ts",
"gitignore.js", "ignore.js",
"stream-utils.js", "utilities.js"
"to-path.js"
], ],
"keywords": [ "keywords": [
"all", "all",
@ -60,28 +59,34 @@
"git" "git"
], ],
"dependencies": { "dependencies": {
"array-union": "^3.0.1",
"dir-glob": "^3.0.1", "dir-glob": "^3.0.1",
"fast-glob": "^3.2.7", "fast-glob": "^3.2.11",
"ignore": "^5.1.9", "ignore": "^5.2.0",
"merge2": "^1.4.1", "merge2": "^1.4.1",
"slash": "^4.0.0" "slash": "^4.0.0"
}, },
"devDependencies": { "devDependencies": {
"@types/node": "^16.11.11", "@globby/main-branch": "sindresorhus/globby#main",
"ava": "^3.15.0", "@types/node": "^17.0.18",
"ava": "^4.0.1",
"benchmark": "2.1.4",
"get-stream": "^6.0.1", "get-stream": "^6.0.1",
"glob-stream": "^7.0.0", "glob-stream": "^7.0.0",
"globby": "sindresorhus/globby#main",
"matcha": "^0.7.0",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"tsd": "^0.19.0", "tempy": "^3.0.0",
"typescript": "^4.5.2", "tsd": "^0.19.1",
"typescript": "^4.5.5",
"xo": "^0.47.0" "xo": "^0.47.0"
}, },
"xo": { "xo": {
"ignores": [ "ignores": [
"fixtures" "fixtures"
] ]
},
"ava": {
"files": [
"!tests/utilities.js"
],
"workerThreads": false
} }
} }

23
node_modules/globby/readme.md generated vendored
View File

@ -10,7 +10,7 @@ Based on [`fast-glob`](https://github.com/mrmlnc/fast-glob) but adds a bunch of
- Multiple patterns - Multiple patterns
- Negated patterns: `['foo*', '!foobar']` - Negated patterns: `['foo*', '!foobar']`
- Expands directories: `foo``foo/**/*` - Expands directories: `foo``foo/**/*`
- Supports `.gitignore` - Supports `.gitignore` and similar ignore config files
- Supports `URL` as `cwd` - Supports `URL` as `cwd`
## Install ## Install
@ -88,6 +88,15 @@ Default: `false`
Respect ignore patterns in `.gitignore` files that apply to the globbed files. Respect ignore patterns in `.gitignore` files that apply to the globbed files.
##### ignoreFiles
Type: `string | string[]`\
Default: `undefined`
Glob patterns to look for ignore files, which are then used to ignore globbed files.
This is a more generic form of the `gitignore` option, allowing you to find ignore files with a [compatible syntax](http://git-scm.com/docs/gitignore). For instance, this works with Babel's `.babelignore`, Prettier's `.prettierignore`, or ESLint's `.eslintignore` files.
### globbySync(patterns, options?) ### globbySync(patterns, options?)
Returns `string[]` of matching paths. Returns `string[]` of matching paths.
@ -110,10 +119,16 @@ import {globbyStream} from 'globby';
### generateGlobTasks(patterns, options?) ### generateGlobTasks(patterns, options?)
Returns an `object[]` in the format `{pattern: string, options: Object}`, which can be passed as arguments to [`fast-glob`](https://github.com/mrmlnc/fast-glob). This is useful for other globbing-related packages. Returns an `Promise<object[]>` in the format `{patterns: string[], options: Object}`, which can be passed as arguments to [`fast-glob`](https://github.com/mrmlnc/fast-glob). This is useful for other globbing-related packages.
Note that you should avoid running the same tasks multiple times as they contain a file system cache. Instead, run this method each time to ensure file system changes are taken into consideration. Note that you should avoid running the same tasks multiple times as they contain a file system cache. Instead, run this method each time to ensure file system changes are taken into consideration.
### generateGlobTasksSync(patterns, options?)
Returns an `object[]` in the format `{patterns: string[], options: Object}`, which can be passed as arguments to [`fast-glob`](https://github.com/mrmlnc/fast-glob). This is useful for other globbing-related packages.
Takes the same arguments as `generateGlobTasks`.
### isDynamicPattern(patterns, options?) ### isDynamicPattern(patterns, options?)
Returns a `boolean` of whether there are any special glob characters in the `patterns`. Returns a `boolean` of whether there are any special glob characters in the `patterns`.
@ -126,7 +141,7 @@ This function is backed by [`fast-glob`](https://github.com/mrmlnc/fast-glob#isd
Returns a `Promise<(path: URL | string) => boolean>` indicating whether a given path is ignored via a `.gitignore` file. Returns a `Promise<(path: URL | string) => boolean>` indicating whether a given path is ignored via a `.gitignore` file.
Takes `cwd?: URL | string` and `ignore?: string[]` as options. `.gitignore` files matched by the ignore config are not used for the resulting filter function. Takes `cwd?: URL | string` as options.
```js ```js
import {isGitIgnored} from 'globby'; import {isGitIgnored} from 'globby';
@ -140,7 +155,7 @@ console.log(isIgnored('some/file'));
Returns a `(path: URL | string) => boolean` indicating whether a given path is ignored via a `.gitignore` file. Returns a `(path: URL | string) => boolean` indicating whether a given path is ignored via a `.gitignore` file.
Takes the same options as `isGitIgnored`. Takes `cwd?: URL | string` as options.
## Globbing patterns ## Globbing patterns

40
node_modules/globby/stream-utils.js generated vendored
View File

@ -1,40 +0,0 @@
import {Transform} from 'node:stream';
class ObjectTransform extends Transform {
constructor() {
super({
objectMode: true,
});
}
}
export class FilterStream extends ObjectTransform {
constructor(filter) {
super();
this._filter = filter;
}
_transform(data, encoding, callback) {
if (this._filter(data)) {
this.push(data);
}
callback();
}
}
export class UniqueStream extends ObjectTransform {
constructor() {
super();
this._pushed = new Set();
}
_transform(data, encoding, callback) {
if (!this._pushed.has(data)) {
this.push(data);
this._pushed.add(data);
}
callback();
}
}

15
node_modules/globby/to-path.js generated vendored
View File

@ -1,15 +0,0 @@
import {fileURLToPath} from 'node:url';
const toPath = urlOrPath => {
if (!urlOrPath) {
return urlOrPath;
}
if (urlOrPath instanceof URL) {
urlOrPath = urlOrPath.href;
}
return urlOrPath.startsWith('file://') ? fileURLToPath(urlOrPath) : urlOrPath;
};
export default toPath;

2
node_modules/graceful-fs/LICENSE generated vendored
View File

@ -1,6 +1,6 @@
The ISC License The ISC License
Copyright (c) Isaac Z. Schlueter, Ben Noordhuis, and Contributors Copyright (c) 2011-2022 Isaac Z. Schlueter, Ben Noordhuis, and Contributors
Permission to use, copy, modify, and/or distribute this software for any Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above purpose with or without fee is hereby granted, provided that the above

View File

@ -191,16 +191,35 @@ function patch (fs) {
var fs$readdir = fs.readdir var fs$readdir = fs.readdir
fs.readdir = readdir fs.readdir = readdir
var noReaddirOptionVersions = /^v[0-5]\./
function readdir (path, options, cb) { function readdir (path, options, cb) {
if (typeof options === 'function') if (typeof options === 'function')
cb = options, options = null cb = options, options = null
var go$readdir = noReaddirOptionVersions.test(process.version)
? function go$readdir (path, options, cb, startTime) {
return fs$readdir(path, fs$readdirCallback(
path, options, cb, startTime
))
}
: function go$readdir (path, options, cb, startTime) {
return fs$readdir(path, options, fs$readdirCallback(
path, options, cb, startTime
))
}
return go$readdir(path, options, cb) return go$readdir(path, options, cb)
function go$readdir (path, options, cb, startTime) { function fs$readdirCallback (path, options, cb, startTime) {
return fs$readdir(path, options, function (err, files) { return function (err, files) {
if (err && (err.code === 'EMFILE' || err.code === 'ENFILE')) if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
enqueue([go$readdir, [path, options, cb], err, startTime || Date.now(), Date.now()]) enqueue([
go$readdir,
[path, options, cb],
err,
startTime || Date.now(),
Date.now()
])
else { else {
if (files && files.sort) if (files && files.sort)
files.sort() files.sort()
@ -208,7 +227,7 @@ function patch (fs) {
if (typeof cb === 'function') if (typeof cb === 'function')
cb.call(this, err, files) cb.call(this, err, files)
} }
}) }
} }
} }

View File

@ -1,7 +1,7 @@
{ {
"name": "graceful-fs", "name": "graceful-fs",
"description": "A drop-in replacement for fs, making various improvements.", "description": "A drop-in replacement for fs, making various improvements.",
"version": "4.2.9", "version": "4.2.11",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://github.com/isaacs/node-graceful-fs" "url": "https://github.com/isaacs/node-graceful-fs"
@ -38,7 +38,7 @@
"import-fresh": "^2.0.0", "import-fresh": "^2.0.0",
"mkdirp": "^0.5.0", "mkdirp": "^0.5.0",
"rimraf": "^2.2.8", "rimraf": "^2.2.8",
"tap": "^12.7.0" "tap": "^16.3.4"
}, },
"files": [ "files": [
"fs.js", "fs.js",
@ -46,5 +46,8 @@
"legacy-streams.js", "legacy-streams.js",
"polyfills.js", "polyfills.js",
"clone.js" "clone.js"
] ],
"tap": {
"reporter": "classic"
}
} }

View File

@ -71,13 +71,13 @@ function patch (fs) {
fs.lstatSync = statFixSync(fs.lstatSync) fs.lstatSync = statFixSync(fs.lstatSync)
// if lchmod/lchown do not exist, then make them no-ops // if lchmod/lchown do not exist, then make them no-ops
if (!fs.lchmod) { if (fs.chmod && !fs.lchmod) {
fs.lchmod = function (path, mode, cb) { fs.lchmod = function (path, mode, cb) {
if (cb) process.nextTick(cb) if (cb) process.nextTick(cb)
} }
fs.lchmodSync = function () {} fs.lchmodSync = function () {}
} }
if (!fs.lchown) { if (fs.chown && !fs.lchown) {
fs.lchown = function (path, uid, gid, cb) { fs.lchown = function (path, uid, gid, cb) {
if (cb) process.nextTick(cb) if (cb) process.nextTick(cb)
} }
@ -94,12 +94,14 @@ function patch (fs) {
// CPU to a busy looping process, which can cause the program causing the lock // CPU to a busy looping process, which can cause the program causing the lock
// contention to be starved of CPU by node, so the contention doesn't resolve. // contention to be starved of CPU by node, so the contention doesn't resolve.
if (platform === "win32") { if (platform === "win32") {
fs.rename = (function (fs$rename) { return function (from, to, cb) { fs.rename = typeof fs.rename !== 'function' ? fs.rename
: (function (fs$rename) {
function rename (from, to, cb) {
var start = Date.now() var start = Date.now()
var backoff = 0; var backoff = 0;
fs$rename(from, to, function CB (er) { fs$rename(from, to, function CB (er) {
if (er if (er
&& (er.code === "EACCES" || er.code === "EPERM") && (er.code === "EACCES" || er.code === "EPERM" || er.code === "EBUSY")
&& Date.now() - start < 60000) { && Date.now() - start < 60000) {
setTimeout(function() { setTimeout(function() {
fs.stat(to, function (stater, st) { fs.stat(to, function (stater, st) {
@ -115,11 +117,15 @@ function patch (fs) {
} }
if (cb) cb(er) if (cb) cb(er)
}) })
}})(fs.rename) }
if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename)
return rename
})(fs.rename)
} }
// if read() returns EAGAIN, then just try it again. // if read() returns EAGAIN, then just try it again.
fs.read = (function (fs$read) { fs.read = typeof fs.read !== 'function' ? fs.read
: (function (fs$read) {
function read (fd, buffer, offset, length, position, callback_) { function read (fd, buffer, offset, length, position, callback_) {
var callback var callback
if (callback_ && typeof callback_ === 'function') { if (callback_ && typeof callback_ === 'function') {
@ -140,7 +146,8 @@ function patch (fs) {
return read return read
})(fs.read) })(fs.read)
fs.readSync = (function (fs$readSync) { return function (fd, buffer, offset, length, position) { fs.readSync = typeof fs.readSync !== 'function' ? fs.readSync
: (function (fs$readSync) { return function (fd, buffer, offset, length, position) {
var eagCounter = 0 var eagCounter = 0
while (true) { while (true) {
try { try {
@ -199,7 +206,7 @@ function patch (fs) {
} }
function patchLutimes (fs) { function patchLutimes (fs) {
if (constants.hasOwnProperty("O_SYMLINK")) { if (constants.hasOwnProperty("O_SYMLINK") && fs.futimes) {
fs.lutimes = function (path, at, mt, cb) { fs.lutimes = function (path, at, mt, cb) {
fs.open(path, constants.O_SYMLINK, function (er, fd) { fs.open(path, constants.O_SYMLINK, function (er, fd) {
if (er) { if (er) {
@ -233,7 +240,7 @@ function patch (fs) {
return ret return ret
} }
} else { } else if (fs.futimes) {
fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) } fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }
fs.lutimesSync = function () {} fs.lutimesSync = function () {}
} }

6
node_modules/ignore/README.md generated vendored
View File

@ -8,9 +8,9 @@
</tr> </tr>
</thead><tbody><tr> </thead><tbody><tr>
<td colspan="2" align="center"> <td colspan="2" align="center">
<a href="https://travis-ci.org/kaelzhang/node-ignore"> <a href="https://github.com/kaelzhang/node-ignore/actions/workflows/nodejs.yml">
<img <img
src="https://travis-ci.org/kaelzhang/node-ignore.svg?branch=master" src="https://github.com/kaelzhang/node-ignore/actions/workflows/nodejs.yml/badge.svg"
alt="Build Status" /></a> alt="Build Status" /></a>
</td> </td>
<td align="center"> <td align="center">
@ -136,7 +136,7 @@ Notice that a line starting with `'#'`(hash) is treated as a comment. Put a back
```js ```js
ignore().add('#abc').ignores('#abc') // false ignore().add('#abc').ignores('#abc') // false
ignore().add('\#abc').ignores('#abc') // true ignore().add('\\#abc').ignores('#abc') // true
``` ```
`pattern` could either be a line of ignore pattern or a string of multiple ignore patterns, which means we could just `ignore().add()` the content of a ignore file: `pattern` could either be a line of ignore pattern or a string of multiple ignore patterns, which means we could just `ignore().add()` the content of a ignore file:

31
node_modules/ignore/index.js generated vendored
View File

@ -9,6 +9,7 @@ const EMPTY = ''
const SPACE = ' ' const SPACE = ' '
const ESCAPE = '\\' const ESCAPE = '\\'
const REGEX_TEST_BLANK_LINE = /^\s+$/ const REGEX_TEST_BLANK_LINE = /^\s+$/
const REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\]|^)\\$/
const REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/ const REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/
const REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/ const REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/
const REGEX_SPLITALL_CRLF = /\r?\n/g const REGEX_SPLITALL_CRLF = /\r?\n/g
@ -20,10 +21,14 @@ const REGEX_SPLITALL_CRLF = /\r?\n/g
const REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/ const REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/
const SLASH = '/' const SLASH = '/'
const KEY_IGNORE = typeof Symbol !== 'undefined'
? Symbol.for('node-ignore') // Do not use ternary expression here, since "istanbul ignore next" is buggy
/* istanbul ignore next */ let TMP_KEY_IGNORE = 'node-ignore'
: 'node-ignore' /* istanbul ignore else */
if (typeof Symbol !== 'undefined') {
TMP_KEY_IGNORE = Symbol.for('node-ignore')
}
const KEY_IGNORE = TMP_KEY_IGNORE
const define = (object, key, value) => const define = (object, key, value) =>
Object.defineProperty(object, key, {value}) Object.defineProperty(object, key, {value})
@ -190,18 +195,27 @@ const REPLACERS = [
: '\\/.+' : '\\/.+'
], ],
// intermediate wildcards // normal intermediate wildcards
[ [
// Never replace escaped '*' // Never replace escaped '*'
// ignore rule '\*' will match the path '*' // ignore rule '\*' will match the path '*'
// 'abc.*/' -> go // 'abc.*/' -> go
// 'abc.*' -> skip this rule // 'abc.*' -> skip this rule,
/(^|[^\\]+)\\\*(?=.+)/g, // coz trailing single wildcard will be handed by [trailing wildcard]
/(^|[^\\]+)(\\\*)+(?=.+)/g,
// '*.js' matches '.js' // '*.js' matches '.js'
// '*.js' doesn't match 'abc' // '*.js' doesn't match 'abc'
(_, p1) => `${p1}[^\\/]*` (_, p1, p2) => {
// 1.
// > An asterisk "*" matches anything except a slash.
// 2.
// > Other consecutive asterisks are considered regular asterisks
// > and will match according to the previous rules.
const unescaped = p2.replace(/\\\*/g, '[^\\/]*')
return p1 + unescaped
}
], ],
[ [
@ -312,6 +326,7 @@ const isString = subject => typeof subject === 'string'
const checkPattern = pattern => pattern const checkPattern = pattern => pattern
&& isString(pattern) && isString(pattern)
&& !REGEX_TEST_BLANK_LINE.test(pattern) && !REGEX_TEST_BLANK_LINE.test(pattern)
&& !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern)
// > A line starting with # serves as a comment. // > A line starting with # serves as a comment.
&& pattern.indexOf('#') !== 0 && pattern.indexOf('#') !== 0

301
node_modules/ignore/legacy.js generated vendored
View File

@ -1,61 +1,66 @@
"use strict"; "use strict";
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); } } function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
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, _toPropertyKey(descriptor.key), descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); Object.defineProperty(Constructor, "prototype", { writable: false }); return Constructor; }
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
// A simple implementation of make-array // A simple implementation of make-array
function makeArray(subject) { function makeArray(subject) {
return Array.isArray(subject) ? subject : [subject]; return Array.isArray(subject) ? subject : [subject];
} }
var EMPTY = ''; var EMPTY = '';
var SPACE = ' '; var SPACE = ' ';
var ESCAPE = '\\'; var ESCAPE = '\\';
var REGEX_TEST_BLANK_LINE = /^\s+$/; var REGEX_TEST_BLANK_LINE = /^\s+$/;
var REGEX_INVALID_TRAILING_BACKSLASH = /(?:[^\\]|^)\\$/;
var REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/; var REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION = /^\\!/;
var REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/; var REGEX_REPLACE_LEADING_EXCAPED_HASH = /^\\#/;
var REGEX_SPLITALL_CRLF = /\r?\n/g; // /foo, var REGEX_SPLITALL_CRLF = /\r?\n/g;
// /foo,
// ./foo, // ./foo,
// ../foo, // ../foo,
// . // .
// .. // ..
var REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/; var REGEX_TEST_INVALID_PATH = /^\.*\/|^\.+$/;
var SLASH = '/'; var SLASH = '/';
var KEY_IGNORE = typeof Symbol !== 'undefined' ? Symbol["for"]('node-ignore')
/* istanbul ignore next */
: 'node-ignore';
// Do not use ternary expression here, since "istanbul ignore next" is buggy
var TMP_KEY_IGNORE = 'node-ignore';
/* istanbul ignore else */
if (typeof Symbol !== 'undefined') {
TMP_KEY_IGNORE = Symbol["for"]('node-ignore');
}
var KEY_IGNORE = TMP_KEY_IGNORE;
var define = function define(object, key, value) { var define = function define(object, key, value) {
return Object.defineProperty(object, key, { return Object.defineProperty(object, key, {
value: value value: value
}); });
}; };
var REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g; var REGEX_REGEXP_RANGE = /([0-z])-([0-z])/g;
var RETURN_FALSE = function RETURN_FALSE() { var RETURN_FALSE = function RETURN_FALSE() {
return false; return false;
}; // Sanitize the range of a regular expression };
// Sanitize the range of a regular expression
// The cases are complicated, see test cases for details // The cases are complicated, see test cases for details
var sanitizeRange = function sanitizeRange(range) { var sanitizeRange = function sanitizeRange(range) {
return range.replace(REGEX_REGEXP_RANGE, function (match, from, to) { return range.replace(REGEX_REGEXP_RANGE, function (match, from, to) {
return from.charCodeAt(0) <= to.charCodeAt(0) ? match // Invalid range (out of order) which is ok for gitignore rules but return from.charCodeAt(0) <= to.charCodeAt(0) ? match
// Invalid range (out of order) which is ok for gitignore rules but
// fatal for JavaScript regular expression, so eliminate it. // fatal for JavaScript regular expression, so eliminate it.
: EMPTY; : EMPTY;
}); });
}; // See fixtures #59 };
// See fixtures #59
var cleanRangeBackSlash = function cleanRangeBackSlash(slashes) { var cleanRangeBackSlash = function cleanRangeBackSlash(slashes) {
var length = slashes.length; var length = slashes.length;
return slashes.slice(0, length - length % 2); return slashes.slice(0, length - length % 2);
}; // > If the pattern ends with a slash, };
// > If the pattern ends with a slash,
// > it is removed for the purpose of the following description, // > it is removed for the purpose of the following description,
// > but it would only find a match with a directory. // > but it would only find a match with a directory.
// > In other words, foo/ will match a directory foo and paths underneath it, // > In other words, foo/ will match a directory foo and paths underneath it,
@ -64,20 +69,24 @@ var cleanRangeBackSlash = function cleanRangeBackSlash(slashes) {
// '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`' // '`foo/`' will not match regular file '`foo`' or symbolic link '`foo`'
// -> ignore-rules will not deal with it, because it costs extra `fs.stat` call // -> ignore-rules will not deal with it, because it costs extra `fs.stat` call
// you could use option `mark: true` with `glob` // you could use option `mark: true` with `glob`
// '`foo/`' should not continue with the '`..`' // '`foo/`' should not continue with the '`..`'
var REPLACERS = [
// > Trailing spaces are ignored unless they are quoted with backslash ("\")
var REPLACERS = [// > Trailing spaces are ignored unless they are quoted with backslash ("\") [
[// (a\ ) -> (a ) // (a\ ) -> (a )
// (a ) -> (a) // (a ) -> (a)
// (a \ ) -> (a ) // (a \ ) -> (a )
/\\?\s+$/, function (match) { /\\?\s+$/, function (match) {
return match.indexOf('\\') === 0 ? SPACE : EMPTY; return match.indexOf('\\') === 0 ? SPACE : EMPTY;
}], // replace (\ ) with ' ' }],
// replace (\ ) with ' '
[/\\\s/g, function () { [/\\\s/g, function () {
return SPACE; return SPACE;
}], // Escape metacharacters }],
// Escape metacharacters
// which is written down by users but means special for regular expressions. // which is written down by users but means special for regular expressions.
// > There are 12 characters with special meanings: // > There are 12 characters with special meanings:
// > - the backslash \, // > - the backslash \,
// > - the caret ^, // > - the caret ^,
@ -94,209 +103,248 @@ var REPLACERS = [// > Trailing spaces are ignored unless they are quoted with ba
// > These special characters are often called "metacharacters". // > These special characters are often called "metacharacters".
[/[\\$.|*+(){^]/g, function (match) { [/[\\$.|*+(){^]/g, function (match) {
return "\\".concat(match); return "\\".concat(match);
}], [// > a question mark (?) matches a single character }], [
// > a question mark (?) matches a single character
/(?!\\)\?/g, function () { /(?!\\)\?/g, function () {
return '[^/]'; return '[^/]';
}], // leading slash }],
[// > A leading slash matches the beginning of the pathname. // leading slash
[
// > A leading slash matches the beginning of the pathname.
// > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c". // > For example, "/*.c" matches "cat-file.c" but not "mozilla-sha1/sha1.c".
// A leading slash matches the beginning of the pathname // A leading slash matches the beginning of the pathname
/^\//, function () { /^\//, function () {
return '^'; return '^';
}], // replace special metacharacter slash after the leading slash }],
// replace special metacharacter slash after the leading slash
[/\//g, function () { [/\//g, function () {
return '\\/'; return '\\/';
}], [// > A leading "**" followed by a slash means match in all directories. }], [
// > A leading "**" followed by a slash means match in all directories.
// > For example, "**/foo" matches file or directory "foo" anywhere, // > For example, "**/foo" matches file or directory "foo" anywhere,
// > the same as pattern "foo". // > the same as pattern "foo".
// > "**/foo/bar" matches file or directory "bar" anywhere that is directly // > "**/foo/bar" matches file or directory "bar" anywhere that is directly
// > under directory "foo". // > under directory "foo".
// Notice that the '*'s have been replaced as '\\*' // Notice that the '*'s have been replaced as '\\*'
/^\^*\\\*\\\*\\\//, // '**/foo' <-> 'foo' /^\^*\\\*\\\*\\\//,
// '**/foo' <-> 'foo'
function () { function () {
return '^(?:.*\\/)?'; return '^(?:.*\\/)?';
}], // starting }],
[// there will be no leading '/' // starting
[
// there will be no leading '/'
// (which has been replaced by section "leading slash") // (which has been replaced by section "leading slash")
// If starts with '**', adding a '^' to the regular expression also works // If starts with '**', adding a '^' to the regular expression also works
/^(?=[^^])/, function startingReplacer() { /^(?=[^^])/, function startingReplacer() {
// If has a slash `/` at the beginning or middle // If has a slash `/` at the beginning or middle
return !/\/(?!$)/.test(this) // > Prior to 2.22.1 return !/\/(?!$)/.test(this)
// > Prior to 2.22.1
// > If the pattern does not contain a slash /, // > If the pattern does not contain a slash /,
// > Git treats it as a shell glob pattern // > Git treats it as a shell glob pattern
// Actually, if there is only a trailing slash, // Actually, if there is only a trailing slash,
// git also treats it as a shell glob pattern // git also treats it as a shell glob pattern
// After 2.22.1 (compatible but clearer) // After 2.22.1 (compatible but clearer)
// > If there is a separator at the beginning or middle (or both) // > If there is a separator at the beginning or middle (or both)
// > of the pattern, then the pattern is relative to the directory // > of the pattern, then the pattern is relative to the directory
// > level of the particular .gitignore file itself. // > level of the particular .gitignore file itself.
// > Otherwise the pattern may also match at any level below // > Otherwise the pattern may also match at any level below
// > the .gitignore level. // > the .gitignore level.
? '(?:^|\\/)' // > Otherwise, Git treats the pattern as a shell glob suitable for ? '(?:^|\\/)'
// > Otherwise, Git treats the pattern as a shell glob suitable for
// > consumption by fnmatch(3) // > consumption by fnmatch(3)
: '^'; : '^';
}], // two globstars }],
[// Use lookahead assertions so that we could match more than one `'/**'` // two globstars
/\\\/\\\*\\\*(?=\\\/|$)/g, // Zero, one or several directories [
// Use lookahead assertions so that we could match more than one `'/**'`
/\\\/\\\*\\\*(?=\\\/|$)/g,
// Zero, one or several directories
// should not use '*', or it will be replaced by the next replacer // should not use '*', or it will be replaced by the next replacer
// Check if it is not the last `'/**'` // Check if it is not the last `'/**'`
function (_, index, str) { function (_, index, str) {
return index + 6 < str.length // case: /**/ return index + 6 < str.length
// case: /**/
// > A slash followed by two consecutive asterisks then a slash matches // > A slash followed by two consecutive asterisks then a slash matches
// > zero or more directories. // > zero or more directories.
// > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on. // > For example, "a/**/b" matches "a/b", "a/x/b", "a/x/y/b" and so on.
// '/**/' // '/**/'
? '(?:\\/[^\\/]+)*' // case: /** ? '(?:\\/[^\\/]+)*'
// case: /**
// > A trailing `"/**"` matches everything inside. // > A trailing `"/**"` matches everything inside.
// #21: everything inside but it should not include the current folder // #21: everything inside but it should not include the current folder
: '\\/.+'; : '\\/.+';
}], // intermediate wildcards }],
[// Never replace escaped '*' // normal intermediate wildcards
[
// Never replace escaped '*'
// ignore rule '\*' will match the path '*' // ignore rule '\*' will match the path '*'
// 'abc.*/' -> go // 'abc.*/' -> go
// 'abc.*' -> skip this rule // 'abc.*' -> skip this rule,
/(^|[^\\]+)\\\*(?=.+)/g, // '*.js' matches '.js' // coz trailing single wildcard will be handed by [trailing wildcard]
/(^|[^\\]+)(\\\*)+(?=.+)/g,
// '*.js' matches '.js'
// '*.js' doesn't match 'abc' // '*.js' doesn't match 'abc'
function (_, p1) { function (_, p1, p2) {
return "".concat(p1, "[^\\/]*"); // 1.
}], [// unescape, revert step 3 except for back slash // > An asterisk "*" matches anything except a slash.
// 2.
// > Other consecutive asterisks are considered regular asterisks
// > and will match according to the previous rules.
var unescaped = p2.replace(/\\\*/g, '[^\\/]*');
return p1 + unescaped;
}], [
// unescape, revert step 3 except for back slash
// For example, if a user escape a '\\*', // For example, if a user escape a '\\*',
// after step 3, the result will be '\\\\\\*' // after step 3, the result will be '\\\\\\*'
/\\\\\\(?=[$.|*+(){^])/g, function () { /\\\\\\(?=[$.|*+(){^])/g, function () {
return ESCAPE; return ESCAPE;
}], [// '\\\\' -> '\\' }], [
// '\\\\' -> '\\'
/\\\\/g, function () { /\\\\/g, function () {
return ESCAPE; return ESCAPE;
}], [// > The range notation, e.g. [a-zA-Z], }], [
// > The range notation, e.g. [a-zA-Z],
// > can be used to match one of the characters in a range. // > can be used to match one of the characters in a range.
// `\` is escaped by step 3 // `\` is escaped by step 3
/(\\)?\[([^\]/]*?)(\\*)($|\])/g, function (match, leadEscape, range, endEscape, close) { /(\\)?\[([^\]/]*?)(\\*)($|\])/g, function (match, leadEscape, range, endEscape, close) {
return leadEscape === ESCAPE // '\\[bar]' -> '\\\\[bar\\]' return leadEscape === ESCAPE
? "\\[".concat(range).concat(cleanRangeBackSlash(endEscape)).concat(close) : close === ']' ? endEscape.length % 2 === 0 // A normal case, and it is a range notation // '\\[bar]' -> '\\\\[bar\\]'
? "\\[".concat(range).concat(cleanRangeBackSlash(endEscape)).concat(close) : close === ']' ? endEscape.length % 2 === 0
// A normal case, and it is a range notation
// '[bar]' // '[bar]'
// '[bar\\\\]' // '[bar\\\\]'
? "[".concat(sanitizeRange(range)).concat(endEscape, "]") // Invalid range notaton ? "[".concat(sanitizeRange(range)).concat(endEscape, "]") // Invalid range notaton
// '[bar\\]' -> '[bar\\\\]' // '[bar\\]' -> '[bar\\\\]'
: '[]' : '[]'; : '[]' : '[]';
}], // ending }],
[// 'js' will not match 'js.' // ending
[
// 'js' will not match 'js.'
// 'ab' will not match 'abc' // 'ab' will not match 'abc'
/(?:[^*])$/, // WTF! /(?:[^*])$/,
// WTF!
// https://git-scm.com/docs/gitignore // https://git-scm.com/docs/gitignore
// changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1) // changes in [2.22.1](https://git-scm.com/docs/gitignore/2.22.1)
// which re-fixes #24, #38 // which re-fixes #24, #38
// > If there is a separator at the end of the pattern then the pattern // > If there is a separator at the end of the pattern then the pattern
// > will only match directories, otherwise the pattern can match both // > will only match directories, otherwise the pattern can match both
// > files and directories. // > files and directories.
// 'js*' will not match 'a.js' // 'js*' will not match 'a.js'
// 'js/' will not match 'a.js' // 'js/' will not match 'a.js'
// 'js' will match 'a.js' and 'a.js/' // 'js' will match 'a.js' and 'a.js/'
function (match) { function (match) {
return /\/$/.test(match) // foo/ will not match 'foo' return /\/$/.test(match)
// foo/ will not match 'foo'
? "".concat(match, "$") // foo matches 'foo' and 'foo/' ? "".concat(match, "$") // foo matches 'foo' and 'foo/'
: "".concat(match, "(?=$|\\/$)"); : "".concat(match, "(?=$|\\/$)");
}], // trailing wildcard }],
// trailing wildcard
[/(\^|\\\/)?\\\*$/, function (_, p1) { [/(\^|\\\/)?\\\*$/, function (_, p1) {
var prefix = p1 // '\^': var prefix = p1
// '\^':
// '/*' does not match EMPTY // '/*' does not match EMPTY
// '/*' does not match everything // '/*' does not match everything
// '\\\/': // '\\\/':
// 'abc/*' does not match 'abc/' // 'abc/*' does not match 'abc/'
? "".concat(p1, "[^/]+") // 'a*' matches 'a' ? "".concat(p1, "[^/]+") // 'a*' matches 'a'
// 'a*' matches 'aa' // 'a*' matches 'aa'
: '[^/]*'; : '[^/]*';
return "".concat(prefix, "(?=$|\\/$)"); return "".concat(prefix, "(?=$|\\/$)");
}]]; // A simple cache, because an ignore rule only has only one certain meaning }]];
var regexCache = Object.create(null); // @param {pattern} // A simple cache, because an ignore rule only has only one certain meaning
var regexCache = Object.create(null);
// @param {pattern}
var makeRegex = function makeRegex(pattern, ignoreCase) { var makeRegex = function makeRegex(pattern, ignoreCase) {
var source = regexCache[pattern]; var source = regexCache[pattern];
if (!source) { if (!source) {
source = REPLACERS.reduce(function (prev, current) { source = REPLACERS.reduce(function (prev, current) {
return prev.replace(current[0], current[1].bind(pattern)); return prev.replace(current[0], current[1].bind(pattern));
}, pattern); }, pattern);
regexCache[pattern] = source; regexCache[pattern] = source;
} }
return ignoreCase ? new RegExp(source, 'i') : new RegExp(source); return ignoreCase ? new RegExp(source, 'i') : new RegExp(source);
}; };
var isString = function isString(subject) { var isString = function isString(subject) {
return typeof subject === 'string'; return typeof subject === 'string';
}; // > A blank line matches no files, so it can serve as a separator for readability.
var checkPattern = function checkPattern(pattern) {
return pattern && isString(pattern) && !REGEX_TEST_BLANK_LINE.test(pattern) // > A line starting with # serves as a comment.
&& pattern.indexOf('#') !== 0;
}; };
// > A blank line matches no files, so it can serve as a separator for readability.
var checkPattern = function checkPattern(pattern) {
return pattern && isString(pattern) && !REGEX_TEST_BLANK_LINE.test(pattern) && !REGEX_INVALID_TRAILING_BACKSLASH.test(pattern)
// > A line starting with # serves as a comment.
&& pattern.indexOf('#') !== 0;
};
var splitPattern = function splitPattern(pattern) { var splitPattern = function splitPattern(pattern) {
return pattern.split(REGEX_SPLITALL_CRLF); return pattern.split(REGEX_SPLITALL_CRLF);
}; };
var IgnoreRule = /*#__PURE__*/_createClass(function IgnoreRule(origin, pattern, negative, regex) {
var IgnoreRule = function IgnoreRule(origin, pattern, negative, regex) {
_classCallCheck(this, IgnoreRule); _classCallCheck(this, IgnoreRule);
this.origin = origin; this.origin = origin;
this.pattern = pattern; this.pattern = pattern;
this.negative = negative; this.negative = negative;
this.regex = regex; this.regex = regex;
}; });
var createRule = function createRule(pattern, ignoreCase) { var createRule = function createRule(pattern, ignoreCase) {
var origin = pattern; var origin = pattern;
var negative = false; // > An optional prefix "!" which negates the pattern; var negative = false;
// > An optional prefix "!" which negates the pattern;
if (pattern.indexOf('!') === 0) { if (pattern.indexOf('!') === 0) {
negative = true; negative = true;
pattern = pattern.substr(1); pattern = pattern.substr(1);
} }
pattern = pattern
pattern = pattern // > Put a backslash ("\") in front of the first "!" for patterns that // > Put a backslash ("\") in front of the first "!" for patterns that
// > begin with a literal "!", for example, `"\!important!.txt"`. // > begin with a literal "!", for example, `"\!important!.txt"`.
.replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!') // > Put a backslash ("\") in front of the first hash for patterns that .replace(REGEX_REPLACE_LEADING_EXCAPED_EXCLAMATION, '!')
// > Put a backslash ("\") in front of the first hash for patterns that
// > begin with a hash. // > begin with a hash.
.replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#'); .replace(REGEX_REPLACE_LEADING_EXCAPED_HASH, '#');
var regex = makeRegex(pattern, ignoreCase); var regex = makeRegex(pattern, ignoreCase);
return new IgnoreRule(origin, pattern, negative, regex); return new IgnoreRule(origin, pattern, negative, regex);
}; };
var throwError = function throwError(message, Ctor) { var throwError = function throwError(message, Ctor) {
throw new Ctor(message); throw new Ctor(message);
}; };
var checkPath = function checkPath(path, originalPath, doThrow) { var checkPath = function checkPath(path, originalPath, doThrow) {
if (!isString(path)) { if (!isString(path)) {
return doThrow("path must be a string, but got `".concat(originalPath, "`"), TypeError); return doThrow("path must be a string, but got `".concat(originalPath, "`"), TypeError);
} // We don't know if we should ignore EMPTY, so throw }
// We don't know if we should ignore EMPTY, so throw
if (!path) { if (!path) {
return doThrow("path must not be empty", TypeError); return doThrow("path must not be empty", TypeError);
} // Check if it is a relative path }
// Check if it is a relative path
if (checkPath.isNotRelative(path)) { if (checkPath.isNotRelative(path)) {
var r = '`path.relative()`d'; var r = '`path.relative()`d';
return doThrow("path should be a ".concat(r, " string, but got \"").concat(originalPath, "\""), RangeError); return doThrow("path should be a ".concat(r, " string, but got \"").concat(originalPath, "\""), RangeError);
} }
return true; return true;
}; };
var isNotRelative = function isNotRelative(path) { var isNotRelative = function isNotRelative(path) {
return REGEX_TEST_INVALID_PATH.test(path); return REGEX_TEST_INVALID_PATH.test(path);
}; };
checkPath.isNotRelative = isNotRelative; checkPath.isNotRelative = isNotRelative;
checkPath.convert = function (p) { checkPath.convert = function (p) {
return p; return p;
}; };
var Ignore = /*#__PURE__*/function () { var Ignore = /*#__PURE__*/function () {
function Ignore() { function Ignore() {
var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {},
@ -306,17 +354,13 @@ var Ignore = /*#__PURE__*/function () {
ignoreCase = _ref$ignoreCase === void 0 ? ignorecase : _ref$ignoreCase, ignoreCase = _ref$ignoreCase === void 0 ? ignorecase : _ref$ignoreCase,
_ref$allowRelativePat = _ref.allowRelativePaths, _ref$allowRelativePat = _ref.allowRelativePaths,
allowRelativePaths = _ref$allowRelativePat === void 0 ? false : _ref$allowRelativePat; allowRelativePaths = _ref$allowRelativePat === void 0 ? false : _ref$allowRelativePat;
_classCallCheck(this, Ignore); _classCallCheck(this, Ignore);
define(this, KEY_IGNORE, true); define(this, KEY_IGNORE, true);
this._rules = []; this._rules = [];
this._ignoreCase = ignoreCase; this._ignoreCase = ignoreCase;
this._allowRelativePaths = allowRelativePaths; this._allowRelativePaths = allowRelativePaths;
this._initCache(); this._initCache();
} }
_createClass(Ignore, [{ _createClass(Ignore, [{
key: "_initCache", key: "_initCache",
value: function _initCache() { value: function _initCache() {
@ -332,78 +376,79 @@ var Ignore = /*#__PURE__*/function () {
this._added = true; this._added = true;
return; return;
} }
if (checkPattern(pattern)) { if (checkPattern(pattern)) {
var rule = createRule(pattern, this._ignoreCase); var rule = createRule(pattern, this._ignoreCase);
this._added = true; this._added = true;
this._rules.push(rule); this._rules.push(rule);
} }
} // @param {Array<string> | string | Ignore} pattern }
// @param {Array<string> | string | Ignore} pattern
}, { }, {
key: "add", key: "add",
value: function add(pattern) { value: function add(pattern) {
this._added = false; this._added = false;
makeArray(isString(pattern) ? splitPattern(pattern) : pattern).forEach(this._addPattern, this); // Some rules have just added to the ignore, makeArray(isString(pattern) ? splitPattern(pattern) : pattern).forEach(this._addPattern, this);
// making the behavior changed.
// Some rules have just added to the ignore,
// making the behavior changed.
if (this._added) { if (this._added) {
this._initCache(); this._initCache();
} }
return this; return this;
} // legacy }
// legacy
}, { }, {
key: "addPattern", key: "addPattern",
value: function addPattern(pattern) { value: function addPattern(pattern) {
return this.add(pattern); return this.add(pattern);
} // | ignored : unignored }
// | ignored : unignored
// negative | 0:0 | 0:1 | 1:0 | 1:1 // negative | 0:0 | 0:1 | 1:0 | 1:1
// -------- | ------- | ------- | ------- | -------- // -------- | ------- | ------- | ------- | --------
// 0 | TEST | TEST | SKIP | X // 0 | TEST | TEST | SKIP | X
// 1 | TESTIF | SKIP | TEST | X // 1 | TESTIF | SKIP | TEST | X
// - SKIP: always skip // - SKIP: always skip
// - TEST: always test // - TEST: always test
// - TESTIF: only test if checkUnignored // - TESTIF: only test if checkUnignored
// - X: that never happen // - X: that never happen
// @param {boolean} whether should check if the path is unignored, // @param {boolean} whether should check if the path is unignored,
// setting `checkUnignored` to `false` could reduce additional // setting `checkUnignored` to `false` could reduce additional
// path matching. // path matching.
// @returns {TestResult} true if a file is ignored
// @returns {TestResult} true if a file is ignored
}, { }, {
key: "_testOne", key: "_testOne",
value: function _testOne(path, checkUnignored) { value: function _testOne(path, checkUnignored) {
var ignored = false; var ignored = false;
var unignored = false; var unignored = false;
this._rules.forEach(function (rule) { this._rules.forEach(function (rule) {
var negative = rule.negative; var negative = rule.negative;
if (unignored === negative && ignored !== unignored || negative && !ignored && !unignored && !checkUnignored) { if (unignored === negative && ignored !== unignored || negative && !ignored && !unignored && !checkUnignored) {
return; return;
} }
var matched = rule.regex.test(path); var matched = rule.regex.test(path);
if (matched) { if (matched) {
ignored = !negative; ignored = !negative;
unignored = negative; unignored = negative;
} }
}); });
return { return {
ignored: ignored, ignored: ignored,
unignored: unignored unignored: unignored
}; };
} // @returns {TestResult} }
// @returns {TestResult}
}, { }, {
key: "_test", key: "_test",
value: function _test(originalPath, cache, checkUnignored, slices) { value: function _test(originalPath, cache, checkUnignored, slices) {
var path = originalPath // Supports nullable path var path = originalPath
// Supports nullable path
&& checkPath.convert(originalPath); && checkPath.convert(originalPath);
checkPath(path, originalPath, this._allowRelativePaths ? RETURN_FALSE : throwError); checkPath(path, originalPath, this._allowRelativePaths ? RETURN_FALSE : throwError);
return this._t(path, cache, checkUnignored, slices); return this._t(path, cache, checkUnignored, slices);
@ -414,23 +459,22 @@ var Ignore = /*#__PURE__*/function () {
if (path in cache) { if (path in cache) {
return cache[path]; return cache[path];
} }
if (!slices) { if (!slices) {
// path/to/a.js // path/to/a.js
// ['path', 'to', 'a.js'] // ['path', 'to', 'a.js']
slices = path.split(SLASH); slices = path.split(SLASH);
} }
slices.pop();
slices.pop(); // If the path has no parent directory, just test it // If the path has no parent directory, just test it
if (!slices.length) { if (!slices.length) {
return cache[path] = this._testOne(path, checkUnignored); return cache[path] = this._testOne(path, checkUnignored);
} }
var parent = this._t(slices.join(SLASH) + SLASH, cache, checkUnignored, slices);
var parent = this._t(slices.join(SLASH) + SLASH, cache, checkUnignored, slices); // If the path contains a parent directory, check the parent first // If the path contains a parent directory, check the parent first
return cache[path] = parent.ignored
// > It is not possible to re-include a file if a parent directory of
return cache[path] = parent.ignored // > It is not possible to re-include a file if a parent directory of
// > that file is excluded. // > that file is excluded.
? parent : this._testOne(path, checkUnignored); ? parent : this._testOne(path, checkUnignored);
} }
@ -443,7 +487,6 @@ var Ignore = /*#__PURE__*/function () {
key: "createFilter", key: "createFilter",
value: function createFilter() { value: function createFilter() {
var _this = this; var _this = this;
return function (path) { return function (path) {
return !_this.ignores(path); return !_this.ignores(path);
}; };
@ -452,46 +495,44 @@ var Ignore = /*#__PURE__*/function () {
key: "filter", key: "filter",
value: function filter(paths) { value: function filter(paths) {
return makeArray(paths).filter(this.createFilter()); return makeArray(paths).filter(this.createFilter());
} // @returns {TestResult} }
// @returns {TestResult}
}, { }, {
key: "test", key: "test",
value: function test(path) { value: function test(path) {
return this._test(path, this._testCache, true); return this._test(path, this._testCache, true);
} }
}]); }]);
return Ignore; return Ignore;
}(); }();
var factory = function factory(options) { var factory = function factory(options) {
return new Ignore(options); return new Ignore(options);
}; };
var isPathValid = function isPathValid(path) { var isPathValid = function isPathValid(path) {
return checkPath(path && checkPath.convert(path), path, RETURN_FALSE); return checkPath(path && checkPath.convert(path), path, RETURN_FALSE);
}; };
factory.isPathValid = isPathValid;
factory.isPathValid = isPathValid; // Fixes typescript // Fixes typescript
factory["default"] = factory; factory["default"] = factory;
module.exports = factory; // Windows module.exports = factory;
// Windows
// -------------------------------------------------------------- // --------------------------------------------------------------
/* istanbul ignore if */ /* istanbul ignore if */
if (
if ( // Detect `process` so that it can run in browsers. // Detect `process` so that it can run in browsers.
typeof process !== 'undefined' && (process.env && process.env.IGNORE_TEST_WIN32 || process.platform === 'win32')) { typeof process !== 'undefined' && (process.env && process.env.IGNORE_TEST_WIN32 || process.platform === 'win32')) {
/* eslint no-control-regex: "off" */ /* eslint no-control-regex: "off" */
var makePosix = function makePosix(str) { var makePosix = function makePosix(str) {
return /^\\\\\?\\/.test(str) || /[\0-\x1F"<>\|]+/.test(str) ? str : str.replace(/\\/g, '/'); return /^\\\\\?\\/.test(str) || /[\0-\x1F"<>\|]+/.test(str) ? str : str.replace(/\\/g, '/');
}; };
checkPath.convert = makePosix;
checkPath.convert = makePosix; // 'C:\\foo' <- 'C:\\foo' has been converted to 'C:/' // 'C:\\foo' <- 'C:\\foo' has been converted to 'C:/'
// 'd:\\foo' // 'd:\\foo'
var REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i; var REGIX_IS_WINDOWS_PATH_ABSOLUTE = /^[a-z]:\//i;
checkPath.isNotRelative = function (path) { checkPath.isNotRelative = function (path) {
return REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path) || isNotRelative(path); return REGIX_IS_WINDOWS_PATH_ABSOLUTE.test(path) || isNotRelative(path);
}; };

24
node_modules/ignore/package.json generated vendored
View File

@ -1,6 +1,6 @@
{ {
"name": "ignore", "name": "ignore",
"version": "5.2.0", "version": "5.2.4",
"description": "Ignore is a manager and filter for .gitignore rules, the one used by eslint, gitbook and many others.", "description": "Ignore is a manager and filter for .gitignore rules, the one used by eslint, gitbook and many others.",
"files": [ "files": [
"legacy.js", "legacy.js",
@ -19,10 +19,12 @@
"test:ignore": "npm run tap test/ignore.js", "test:ignore": "npm run tap test/ignore.js",
"test:others": "npm run tap test/others.js", "test:others": "npm run tap test/others.js",
"test:cases": "npm run tap test/*.js -- --coverage", "test:cases": "npm run tap test/*.js -- --coverage",
"test:no-coverage": "npm run tap test/*.js -- --no-check-coverage",
"test:only": "npm run test:lint && npm run test:tsc && npm run test:ts && npm run test:cases", "test:only": "npm run test:lint && npm run test:tsc && npm run test:ts && npm run test:cases",
"test": "npm run test:only", "test": "npm run test:only",
"test:win32": "IGNORE_TEST_WIN32=1 npm run test", "test:win32": "IGNORE_TEST_WIN32=1 npm run test",
"posttest": "tap --coverage-report=html && codecov" "report": "tap --coverage-report=html",
"posttest": "npm run report && codecov"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@ -49,21 +51,21 @@
"url": "https://github.com/kaelzhang/node-ignore/issues" "url": "https://github.com/kaelzhang/node-ignore/issues"
}, },
"devDependencies": { "devDependencies": {
"@babel/cli": "^7.8.4", "@babel/cli": "^7.19.3",
"@babel/core": "^7.9.6", "@babel/core": "^7.20.5",
"@babel/preset-env": "^7.9.6", "@babel/preset-env": "^7.20.2",
"codecov": "^3.7.0", "codecov": "^3.8.2",
"debug": "^4.1.1", "debug": "^4.3.4",
"eslint": "^7.0.0", "eslint": "^8.30.0",
"eslint-config-ostai": "^3.0.0", "eslint-config-ostai": "^3.0.0",
"eslint-plugin-import": "^2.20.2", "eslint-plugin-import": "^2.26.0",
"mkdirp": "^1.0.4", "mkdirp": "^1.0.4",
"pre-suf": "^1.1.1", "pre-suf": "^1.1.1",
"rimraf": "^3.0.2", "rimraf": "^3.0.2",
"spawn-sync": "^2.0.0", "spawn-sync": "^2.0.0",
"tap": "^14.10.7", "tap": "^16.3.2",
"tmp": "0.2.1", "tmp": "0.2.1",
"typescript": "^3.9.3" "typescript": "^4.9.4"
}, },
"engines": { "engines": {
"node": ">= 4" "node": ">= 4"

26
node_modules/lilconfig/dist/index.js generated vendored
View File

@ -10,8 +10,12 @@ function getDefaultSearchPlaces(name) {
'package.json', 'package.json',
`.${name}rc.json`, `.${name}rc.json`,
`.${name}rc.js`, `.${name}rc.js`,
`${name}.config.js`,
`.${name}rc.cjs`, `.${name}rc.cjs`,
`.config/${name}rc`,
`.config/${name}rc.json`,
`.config/${name}rc.js`,
`.config/${name}rc.cjs`,
`${name}.config.js`,
`${name}.config.cjs`, `${name}.config.cjs`,
]; ];
} }
@ -67,10 +71,10 @@ function getPackageProp(props, obj) {
} }
function getSearchItems(searchPlaces, searchPaths) { function getSearchItems(searchPlaces, searchPaths) {
return searchPaths.reduce((acc, searchPath) => { return searchPaths.reduce((acc, searchPath) => {
searchPlaces.forEach(fileName => acc.push({ searchPlaces.forEach(sp => acc.push({
fileName, searchPlace: sp,
filepath: path.join(searchPath, fileName), filepath: path.join(searchPath, sp),
loaderKey: path.extname(fileName) || 'noExt', loaderKey: path.extname(sp) || 'noExt',
})); }));
return acc; return acc;
}, []); }, []);
@ -95,7 +99,7 @@ function lilconfig(name, options) {
filepath: '', filepath: '',
}; };
const searchItems = getSearchItems(searchPlaces, searchPaths); const searchItems = getSearchItems(searchPlaces, searchPaths);
for (const { fileName, filepath, loaderKey } of searchItems) { for (const { searchPlace, filepath, loaderKey } of searchItems) {
try { try {
await fs.promises.access(filepath); await fs.promises.access(filepath);
} }
@ -104,8 +108,8 @@ function lilconfig(name, options) {
} }
const content = String(await fsReadFileAsync(filepath)); const content = String(await fsReadFileAsync(filepath));
const loader = loaders[loaderKey]; const loader = loaders[loaderKey];
if (fileName === 'package.json') { if (searchPlace === 'package.json') {
const pkg = loader(filepath, content); const pkg = await loader(filepath, content);
const maybeConfig = getPackageProp(packageProp, pkg); const maybeConfig = getPackageProp(packageProp, pkg);
if (maybeConfig != null) { if (maybeConfig != null) {
result.config = maybeConfig; result.config = maybeConfig;
@ -123,7 +127,7 @@ function lilconfig(name, options) {
} }
else { else {
validateLoader(loader, loaderKey); validateLoader(loader, loaderKey);
result.config = loader(filepath, content); result.config = await loader(filepath, content);
} }
result.filepath = filepath; result.filepath = filepath;
break; break;
@ -176,7 +180,7 @@ function lilconfigSync(name, options) {
filepath: '', filepath: '',
}; };
const searchItems = getSearchItems(searchPlaces, searchPaths); const searchItems = getSearchItems(searchPlaces, searchPaths);
for (const { fileName, filepath, loaderKey } of searchItems) { for (const { searchPlace, filepath, loaderKey } of searchItems) {
try { try {
fs.accessSync(filepath); fs.accessSync(filepath);
} }
@ -185,7 +189,7 @@ function lilconfigSync(name, options) {
} }
const loader = loaders[loaderKey]; const loader = loaders[loaderKey];
const content = String(fs.readFileSync(filepath)); const content = String(fs.readFileSync(filepath));
if (fileName === 'package.json') { if (searchPlace === 'package.json') {
const pkg = loader(filepath, content); const pkg = loader(filepath, content);
const maybeConfig = getPackageProp(packageProp, pkg); const maybeConfig = getPackageProp(packageProp, pkg);
if (maybeConfig != null) { if (maybeConfig != null) {

22
node_modules/lilconfig/package.json generated vendored
View File

@ -1,6 +1,6 @@
{ {
"name": "lilconfig", "name": "lilconfig",
"version": "2.0.4", "version": "2.1.0",
"description": "A zero-dependency alternative to cosmiconfig", "description": "A zero-dependency alternative to cosmiconfig",
"main": "dist/index.js", "main": "dist/index.js",
"types": "dist/index.d.ts", "types": "dist/index.d.ts",
@ -30,17 +30,17 @@
"license": "MIT", "license": "MIT",
"devDependencies": { "devDependencies": {
"@types/jest": "^27.0.2", "@types/jest": "^27.0.2",
"@types/node": "^14.17.2", "@types/node": "^14.18.36",
"@typescript-eslint/eslint-plugin": "^5.3.0", "@typescript-eslint/eslint-plugin": "^5.54.0",
"@typescript-eslint/parser": "^5.3.0", "@typescript-eslint/parser": "^5.54.0",
"cosmiconfig": "^7.0.1", "cosmiconfig": "^7.1.0",
"eslint": "^8.1.0", "eslint": "^8.35.0",
"eslint-config-prettier": "^8.3.0", "eslint-config-prettier": "^8.6.0",
"eslint-plugin-prettier": "^4.0.0", "eslint-plugin-prettier": "^4.2.1",
"jest": "^27.3.1", "jest": "^27.3.1",
"prettier": "^2.4.1", "prettier": "^2.8.4",
"ts-jest": "^27.0.7", "ts-jest": "27.0.7",
"typescript": "^4.4.4" "typescript": "4.4.4"
}, },
"engines": { "engines": {
"node": ">=10" "node": ">=10"

31
node_modules/lilconfig/readme.md generated vendored
View File

@ -44,7 +44,7 @@ lilconfigSync(
## Difference to `cosmiconfig` ## Difference to `cosmiconfig`
Lilconfig does not intend to be 100% compatible with `cosmiconfig` but tries to mimic it where possible. The key differences are: Lilconfig does not intend to be 100% compatible with `cosmiconfig` but tries to mimic it where possible. The key differences are:
- **no** support for yaml files out of the box(`lilconfig` attempts to parse files with no extension as JSON instead of YAML). You can still add the support for YAML files by providing a loader, see an [example](#loaders-example) below. - **no** support for yaml files out of the box(`lilconfig` attempts to parse files with no extension as JSON instead of YAML). You can still add the support for YAML files by providing a loader, see an [example](#yaml-loader) below.
- **no** cache - **no** cache
### Options difference between the two. ### Options difference between the two.
@ -59,12 +59,14 @@ Lilconfig does not intend to be 100% compatible with `cosmiconfig` but tries to
|stopDir | ✅ | |stopDir | ✅ |
|transform | ✅ | |transform | ✅ |
## Loaders example ## Loaders examples
### Yaml loader
If you need the YAML support you can provide your own loader If you need the YAML support you can provide your own loader
```js ```js
import {lilconig} from 'lilconfig'; import {lilconfig} from 'lilconfig';
import yaml from 'yaml'; import yaml from 'yaml';
function loadYaml(filepath, content) { function loadYaml(filepath, content) {
@ -87,6 +89,29 @@ lilconfig('myapp', options)
}); });
``` ```
### ESM loader
Lilconfig v2 does not support ESM modules out of the box. However, you can support it with a custom a loader. Note that this will only work with the async `lilconfig` function and won't work with the sync `lilconfigSync`.
```js
import {lilconfig} from 'lilconfig';
const loadEsm = filepath => import(filepath);
lilconfig('myapp', {
loaders: {
'.js': loadEsm,
'.mjs': loadEsm,
}
})
.search()
.then(result => {
result // {config, filepath}
result.config.default // if config uses `export default`
});
```
## Version correlation ## Version correlation
- lilconig v1 → cosmiconfig v6 - lilconig v1 → cosmiconfig v6

109
node_modules/micromatch/CHANGELOG.md generated vendored
View File

@ -1,109 +0,0 @@
# Release history
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).
<details>
<summary><strong>Guiding Principles</strong></summary>
- Changelogs are for humans, not machines.
- There should be an entry for every single version.
- The same types of changes should be grouped.
- Versions and sections should be linkable.
- The latest version comes first.
- The release date of each versions is displayed.
- Mention whether you follow Semantic Versioning.
</details>
<details>
<summary><strong>Types of changes</strong></summary>
Changelog entries are classified using the following labels _(from [keep-a-changelog](http://keepachangelog.com/)_):
- `Added` for new features.
- `Changed` for changes in existing functionality.
- `Deprecated` for soon-to-be removed features.
- `Removed` for now removed features.
- `Fixed` for any bug fixes.
- `Security` in case of vulnerabilities.
</details>
## [4.0.0] - 2019-03-20
### Added
- Adds support for `options.onMatch`. See the readme for details
- Adds support for `options.onIgnore`. See the readme for details
- Adds support for `options.onResult`. See the readme for details
### Breaking changes
- Require Node.js >= 8.6
- Removed support for passing an array of brace patterns to `micromatch.braces()`.
- To strictly enforce closing brackets (for `{`, `[`, and `(`), you must now use `strictBrackets=true` instead of `strictErrors`.
- `cache` - caching and all related options and methods have been removed
- `options.unixify` was renamed to `options.windows`
- `options.nodupes` Was removed. Duplicates are always removed by default. You can override this with custom behavior by using the `onMatch`, `onResult` and `onIgnore` functions.
- `options.snapdragon` was removed, as snapdragon is no longer used.
- `options.sourcemap` was removed, as snapdragon is no longer used, which provided sourcemap support.
## [3.0.0] - 2017-04-11
Complete overhaul, with 36,000+ new unit tests validated against actual output generated by Bash and minimatch. More specifically, 35,000+ of the tests:
- micromatch results are directly compared to bash results
- in rare cases, when micromatch and bash disagree, micromatch's results are compared to minimatch's results
- micromatch is much more accurate than minimatch, so there were cases where I had to make assumptions. I'll try to document these.
This refactor introduces a parser and compiler that are supersets of more granular parsers and compilers from other sub-modules. Each of these sub-modules has a singular responsibility and focuses on a certain type of matching that aligns with a specific part of the Bash "expansion" API.
These sub-modules work like plugins to seamlessly create the micromatch parser/compiler, so that strings are parsed in one pass, an [AST is created](https://gist.github.com/jonschlinkert/099c8914f56529f75bc757cc9e5e8e2a), then a new string is generated by the compiler.
Here are those sub-modules with links to related prs on those modules if you want to see how they contribute to this code:
[nanomatch](https://github.com/jonschlinkert/nanomatch) (new library) - glob expansion (`*`, `**`, `?` and `[...]`))
[braces](https://github.com/jonschlinkert/braces/pull/10) - brace expansion (`{1..10}`, `{a,b,c}`, etc)
[extglob](https://github.com/jonschlinkert/extglob/pull/5) - extended globs (`!(a|b)`, `@(!(foo|bar))`, etc)
[expand-brackets](https://github.com/jonschlinkert/expand-brackets/pull/5) - POSIX character classes `[[:alpha:][:digit:]]`
**Added**
- source map support (optionally created when using parse or compile - I have no idea what the use case is yet, but they come for free) (note that source maps are not generated for brace expansion at present, since the braces compiler uses a different strategy. I'll update if/when this changes).
- parser is exposed, so that implementors can customize or override specific micromatch parsers if necessary
- compiler is exposed, so that implementors can customize or override specific micromatch compilers if necessary
**Fixed**
- more accurate matching (passes 100% of Bash 4.3 of the brace expansion and extglob unit tests, as well as all Bash glob tests that are relevant to node.js usage, all minimatch tests, all brace-expansion tests, and also passes a couple of tests that bash fails)
- even safer - micromatch has always generated optimized patterns so it's not subject to DoS exploits like minimatch (completely different than the regex DoS issue, minimatch and multimatch are still openly exposed to being used for DoS attacks), but more safeguards were built into this refactor
**Changed**
- the public API of this library did not change in this version and should be safe to upgrade without changing implentor code. However, we have released this as a major version for the following reasons:
- out of an abundance of caution due to the large amount of code changed in this release
- we have improved parser accuracy to such a degree that some implementors using invalid globs have noted change in behavior. If this is the case for you, please check that you are using a valid glob expression before logging a bug with this library
## [1.0.1] - 2016-12-12
**Added**
- Support for windows path edge cases where backslashes are used in brackets or other unusual combinations.
## [1.0.0] - 2016-12-12
Stable release.
## [0.1.0] - 2016-10-08
First release.
[Unreleased]: https://github.com/jonschlinkert/micromatch/compare/0.1.0...HEAD
[0.2.0]: https://github.com/jonschlinkert/micromatch/compare/0.1.0...0.2.0
[keep-a-changelog]: https://github.com/olivierlacan/keep-a-changelog

21
node_modules/micromatch/README.md generated vendored
View File

@ -1,4 +1,4 @@
# micromatch [![NPM version](https://img.shields.io/npm/v/micromatch.svg?style=flat)](https://www.npmjs.com/package/micromatch) [![NPM monthly downloads](https://img.shields.io/npm/dm/micromatch.svg?style=flat)](https://npmjs.org/package/micromatch) [![NPM total downloads](https://img.shields.io/npm/dt/micromatch.svg?style=flat)](https://npmjs.org/package/micromatch) [![Linux Build Status](https://img.shields.io/travis/micromatch/micromatch.svg?style=flat&label=Travis)](https://travis-ci.org/micromatch/micromatch) # micromatch [![NPM version](https://img.shields.io/npm/v/micromatch.svg?style=flat)](https://www.npmjs.com/package/micromatch) [![NPM monthly downloads](https://img.shields.io/npm/dm/micromatch.svg?style=flat)](https://npmjs.org/package/micromatch) [![NPM total downloads](https://img.shields.io/npm/dt/micromatch.svg?style=flat)](https://npmjs.org/package/micromatch) [![Tests](https://github.com/micromatch/micromatch/actions/workflows/test.yml/badge.svg)](https://github.com/micromatch/micromatch/actions/workflows/test.yml)
> Glob matching for javascript/node.js. A replacement and faster alternative to minimatch and multimatch. > Glob matching for javascript/node.js. A replacement and faster alternative to minimatch and multimatch.
@ -54,7 +54,7 @@ Please consider following this project's author, [Jon Schlinkert](https://github
## Install ## Install
Install with [npm](https://www.npmjs.com/): Install with [npm](https://www.npmjs.com/) (requires [Node.js](https://nodejs.org/en/) >=8.6):
```sh ```sh
$ npm install --save micromatch $ npm install --save micromatch
@ -103,7 +103,7 @@ console.log(micromatch.isMatch('foo', ['b*', 'f*'])) //=> true
* Support for multiple glob patterns (no need for wrappers like multimatch) * Support for multiple glob patterns (no need for wrappers like multimatch)
* Wildcards (`**`, `*.js`) * Wildcards (`**`, `*.js`)
* Negation (`'!a/*.js'`, `'*!(b).js']`) * Negation (`'!a/*.js'`, `'*!(b).js'`)
* [extglobs](#extglobs) (`+(x|y)`, `!(a|b)`) * [extglobs](#extglobs) (`+(x|y)`, `!(a|b)`)
* [POSIX character classes](#posix-bracket-expressions) (`[[:alpha:][:digit:]]`) * [POSIX character classes](#posix-bracket-expressions) (`[[:alpha:][:digit:]]`)
* [brace expansion](https://github.com/micromatch/braces) (`foo/{1..5}.md`, `bar/{a,b,c}.js`) * [brace expansion](https://github.com/micromatch/braces) (`foo/{1..5}.md`, `bar/{a,b,c}.js`)
@ -419,7 +419,7 @@ Parse a glob pattern to create the source string for a regular expression.
```js ```js
const mm = require('micromatch'); const mm = require('micromatch');
const state = mm(pattern[, options]); const state = mm.parse(pattern[, options]);
``` ```
### [.braces](index.js#L446) ### [.braces](index.js#L446)
@ -845,7 +845,7 @@ $ npm run bench
### Latest results ### Latest results
As of April 10, 2021 (longer bars are better): As of March 24, 2022 (longer bars are better):
```sh ```sh
# .makeRe star # .makeRe star
@ -963,17 +963,18 @@ You might also be interested in these projects:
| **Commits** | **Contributor** | | **Commits** | **Contributor** |
| --- | --- | | --- | --- |
| 508 | [jonschlinkert](https://github.com/jonschlinkert) | | 512 | [jonschlinkert](https://github.com/jonschlinkert) |
| 12 | [es128](https://github.com/es128) | | 12 | [es128](https://github.com/es128) |
| 9 | [danez](https://github.com/danez) |
| 8 | [doowb](https://github.com/doowb) | | 8 | [doowb](https://github.com/doowb) |
| 6 | [paulmillr](https://github.com/paulmillr) | | 6 | [paulmillr](https://github.com/paulmillr) |
| 5 | [mrmlnc](https://github.com/mrmlnc) | | 5 | [mrmlnc](https://github.com/mrmlnc) |
| 4 | [danez](https://github.com/danez) |
| 3 | [DrPizza](https://github.com/DrPizza) | | 3 | [DrPizza](https://github.com/DrPizza) |
| 2 | [TrySound](https://github.com/TrySound) | | 2 | [TrySound](https://github.com/TrySound) |
| 2 | [mceIdo](https://github.com/mceIdo) | | 2 | [mceIdo](https://github.com/mceIdo) |
| 2 | [Glazy](https://github.com/Glazy) | | 2 | [Glazy](https://github.com/Glazy) |
| 2 | [MartinKolarik](https://github.com/MartinKolarik) | | 2 | [MartinKolarik](https://github.com/MartinKolarik) |
| 2 | [antonyk](https://github.com/antonyk) |
| 2 | [Tvrqvoise](https://github.com/Tvrqvoise) | | 2 | [Tvrqvoise](https://github.com/Tvrqvoise) |
| 1 | [amilajack](https://github.com/amilajack) | | 1 | [amilajack](https://github.com/amilajack) |
| 1 | [Cslove](https://github.com/Cslove) | | 1 | [Cslove](https://github.com/Cslove) |
@ -981,11 +982,13 @@ You might also be interested in these projects:
| 1 | [DianeLooney](https://github.com/DianeLooney) | | 1 | [DianeLooney](https://github.com/DianeLooney) |
| 1 | [UltCombo](https://github.com/UltCombo) | | 1 | [UltCombo](https://github.com/UltCombo) |
| 1 | [frangio](https://github.com/frangio) | | 1 | [frangio](https://github.com/frangio) |
| 1 | [joyceerhl](https://github.com/joyceerhl) |
| 1 | [juszczykjakub](https://github.com/juszczykjakub) | | 1 | [juszczykjakub](https://github.com/juszczykjakub) |
| 1 | [muescha](https://github.com/muescha) | | 1 | [muescha](https://github.com/muescha) |
| 1 | [sebdeckers](https://github.com/sebdeckers) | | 1 | [sebdeckers](https://github.com/sebdeckers) |
| 1 | [tomByrer](https://github.com/tomByrer) | | 1 | [tomByrer](https://github.com/tomByrer) |
| 1 | [fidian](https://github.com/fidian) | | 1 | [fidian](https://github.com/fidian) |
| 1 | [curbengh](https://github.com/curbengh) |
| 1 | [simlu](https://github.com/simlu) | | 1 | [simlu](https://github.com/simlu) |
| 1 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) | | 1 | [wtgtybhertgeghgtwtg](https://github.com/wtgtybhertgeghgtwtg) |
| 1 | [yvele](https://github.com/yvele) | | 1 | [yvele](https://github.com/yvele) |
@ -1000,9 +1003,9 @@ You might also be interested in these projects:
### License ### License
Copyright © 2021, [Jon Schlinkert](https://github.com/jonschlinkert). Copyright © 2022, [Jon Schlinkert](https://github.com/jonschlinkert).
Released under the [MIT License](LICENSE). Released under the [MIT License](LICENSE).
*** ***
_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on April 10, 2021._ _This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.8.0, on March 24, 2022._

6
node_modules/micromatch/index.js generated vendored
View File

@ -155,10 +155,10 @@ micromatch.not = (list, patterns, options = {}) => {
items.push(state.output); items.push(state.output);
}; };
let matches = micromatch(list, patterns, { ...options, onResult }); let matches = new Set(micromatch(list, patterns, { ...options, onResult }));
for (let item of items) { for (let item of items) {
if (!matches.includes(item)) { if (!matches.has(item)) {
result.add(item); result.add(item);
} }
} }
@ -408,7 +408,7 @@ micromatch.scan = (...args) => picomatch.scan(...args);
* *
* ```js * ```js
* const mm = require('micromatch'); * const mm = require('micromatch');
* const state = mm(pattern[, options]); * const state = mm.parse(pattern[, options]);
* ``` * ```
* @param {String} `glob` * @param {String} `glob`
* @param {Object} `options` * @param {Object} `options`

10
node_modules/micromatch/package.json generated vendored
View File

@ -1,7 +1,7 @@
{ {
"name": "micromatch", "name": "micromatch",
"description": "Glob matching for javascript/node.js. A replacement and faster alternative to minimatch and multimatch.", "description": "Glob matching for javascript/node.js. A replacement and faster alternative to minimatch and multimatch.",
"version": "4.0.4", "version": "4.0.5",
"homepage": "https://github.com/micromatch/micromatch", "homepage": "https://github.com/micromatch/micromatch",
"author": "Jon Schlinkert (https://github.com/jonschlinkert)", "author": "Jon Schlinkert (https://github.com/jonschlinkert)",
"contributors": [ "contributors": [
@ -37,14 +37,14 @@
"test": "mocha" "test": "mocha"
}, },
"dependencies": { "dependencies": {
"braces": "^3.0.1", "braces": "^3.0.2",
"picomatch": "^2.2.3" "picomatch": "^2.3.1"
}, },
"devDependencies": { "devDependencies": {
"fill-range": "^7.0.1", "fill-range": "^7.0.1",
"gulp-format-md": "^2.0.0", "gulp-format-md": "^2.0.0",
"minimatch": "^3.0.4", "minimatch": "^5.0.1",
"mocha": "^7.2.0", "mocha": "^9.2.2",
"time-require": "github:jonschlinkert/time-require" "time-require": "github:jonschlinkert/time-require"
}, },
"keywords": [ "keywords": [

4
node_modules/nanoid/bin/nanoid.cjs generated vendored
View File

@ -22,10 +22,10 @@ if (process.argv.includes('--help') || process.argv.includes('-h')) {
-h, --help Show this help -h, --help Show this help
Examples Examples
$ nano --s 15 $ nanoid --s 15
S9sBF77U6sDB8Yg S9sBF77U6sDB8Yg
$ nano --size 10 --alphabet abc $ nanoid --size 10 --alphabet abc
bcabababca`) bcabababca`)
process.exit() process.exit()
} }

View File

@ -1,30 +1,4 @@
let { urlAlphabet } = require('./url-alphabet/index.cjs') let { urlAlphabet } = require('./url-alphabet/index.cjs')
if (process.env.NODE_ENV !== 'production') {
if (
typeof navigator !== 'undefined' &&
navigator.product === 'ReactNative' &&
typeof crypto === 'undefined'
) {
throw new Error(
'React Native does not have a built-in secure random generator. ' +
'If you dont need unpredictable IDs use `nanoid/non-secure`. ' +
'For secure IDs, import `react-native-get-random-values` ' +
'before Nano ID.'
)
}
if (typeof msCrypto !== 'undefined' && typeof crypto === 'undefined') {
throw new Error(
'Import file with `if (!window.crypto) window.crypto = window.msCrypto`' +
' before importing Nano ID to fix IE 11 support'
)
}
if (typeof crypto === 'undefined') {
throw new Error(
'Your browser does not have secure random generator. ' +
'If you dont need unpredictable IDs, you can use nanoid/non-secure.'
)
}
}
let random = bytes => crypto.getRandomValues(new Uint8Array(bytes)) let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))
let customRandom = (alphabet, defaultSize, getRandom) => { let customRandom = (alphabet, defaultSize, getRandom) => {
let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1 let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1
@ -43,21 +17,18 @@ let customRandom = (alphabet, defaultSize, getRandom) => {
} }
let customAlphabet = (alphabet, size = 21) => let customAlphabet = (alphabet, size = 21) =>
customRandom(alphabet, size, random) customRandom(alphabet, size, random)
let nanoid = (size = 21) => { let nanoid = (size = 21) =>
let id = '' crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => {
let bytes = crypto.getRandomValues(new Uint8Array(size)) byte &= 63
while (size--) {
let byte = bytes[size] & 63
if (byte < 36) { if (byte < 36) {
id += byte.toString(36) id += byte.toString(36)
} else if (byte < 62) { } else if (byte < 62) {
id += (byte - 26).toString(36).toUpperCase() id += (byte - 26).toString(36).toUpperCase()
} else if (byte < 63) { } else if (byte > 62) {
id += '_'
} else {
id += '-' id += '-'
} } else {
id += '_'
} }
return id return id
} }, '')
module.exports = { nanoid, customAlphabet, customRandom, urlAlphabet, random } module.exports = { nanoid, customAlphabet, customRandom, urlAlphabet, random }

43
node_modules/nanoid/index.browser.js generated vendored
View File

@ -1,30 +1,4 @@
import { urlAlphabet } from './url-alphabet/index.js' import { urlAlphabet } from './url-alphabet/index.js'
if (process.env.NODE_ENV !== 'production') {
if (
typeof navigator !== 'undefined' &&
navigator.product === 'ReactNative' &&
typeof crypto === 'undefined'
) {
throw new Error(
'React Native does not have a built-in secure random generator. ' +
'If you dont need unpredictable IDs use `nanoid/non-secure`. ' +
'For secure IDs, import `react-native-get-random-values` ' +
'before Nano ID.'
)
}
if (typeof msCrypto !== 'undefined' && typeof crypto === 'undefined') {
throw new Error(
'Import file with `if (!window.crypto) window.crypto = window.msCrypto`' +
' before importing Nano ID to fix IE 11 support'
)
}
if (typeof crypto === 'undefined') {
throw new Error(
'Your browser does not have secure random generator. ' +
'If you dont need unpredictable IDs, you can use nanoid/non-secure.'
)
}
}
let random = bytes => crypto.getRandomValues(new Uint8Array(bytes)) let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))
let customRandom = (alphabet, defaultSize, getRandom) => { let customRandom = (alphabet, defaultSize, getRandom) => {
let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1 let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1
@ -43,21 +17,18 @@ let customRandom = (alphabet, defaultSize, getRandom) => {
} }
let customAlphabet = (alphabet, size = 21) => let customAlphabet = (alphabet, size = 21) =>
customRandom(alphabet, size, random) customRandom(alphabet, size, random)
let nanoid = (size = 21) => { let nanoid = (size = 21) =>
let id = '' crypto.getRandomValues(new Uint8Array(size)).reduce((id, byte) => {
let bytes = crypto.getRandomValues(new Uint8Array(size)) byte &= 63
while (size--) {
let byte = bytes[size] & 63
if (byte < 36) { if (byte < 36) {
id += byte.toString(36) id += byte.toString(36)
} else if (byte < 62) { } else if (byte < 62) {
id += (byte - 26).toString(36).toUpperCase() id += (byte - 26).toString(36).toUpperCase()
} else if (byte < 63) { } else if (byte > 62) {
id += '_'
} else {
id += '-' id += '-'
} } else {
id += '_'
} }
return id return id
} }, '')
export { nanoid, customAlphabet, customRandom, urlAlphabet, random } export { nanoid, customAlphabet, customRandom, urlAlphabet, random }

63
node_modules/nanoid/index.dev.js generated vendored
View File

@ -1,63 +0,0 @@
import { urlAlphabet } from './url-alphabet/index.js'
if (true) {
if (
typeof navigator !== 'undefined' &&
navigator.product === 'ReactNative' &&
typeof crypto === 'undefined'
) {
throw new Error(
'React Native does not have a built-in secure random generator. ' +
'If you dont need unpredictable IDs use `nanoid/non-secure`. ' +
'For secure IDs, import `react-native-get-random-values` ' +
'before Nano ID.'
)
}
if (typeof msCrypto !== 'undefined' && typeof crypto === 'undefined') {
throw new Error(
'Import file with `if (!window.crypto) window.crypto = window.msCrypto`' +
' before importing Nano ID to fix IE 11 support'
)
}
if (typeof crypto === 'undefined') {
throw new Error(
'Your browser does not have secure random generator. ' +
'If you dont need unpredictable IDs, you can use nanoid/non-secure.'
)
}
}
let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))
let customRandom = (alphabet, defaultSize, getRandom) => {
let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1
let step = -~((1.6 * mask * defaultSize) / alphabet.length)
return (size = defaultSize) => {
let id = ''
while (true) {
let bytes = getRandom(step)
let j = step
while (j--) {
id += alphabet[bytes[j] & mask] || ''
if (id.length === size) return id
}
}
}
}
let customAlphabet = (alphabet, size = 21) =>
customRandom(alphabet, size, random)
let nanoid = (size = 21) => {
let id = ''
let bytes = crypto.getRandomValues(new Uint8Array(size))
while (size--) {
let byte = bytes[size] & 63
if (byte < 36) {
id += byte.toString(36)
} else if (byte < 62) {
id += (byte - 26).toString(36).toUpperCase()
} else if (byte < 63) {
id += '_'
} else {
id += '-'
}
}
return id
}
export { nanoid, customAlphabet, customRandom, urlAlphabet, random }

63
node_modules/nanoid/index.prod.js generated vendored
View File

@ -1,63 +0,0 @@
import { urlAlphabet } from './url-alphabet/index.js'
if (false) {
if (
typeof navigator !== 'undefined' &&
navigator.product === 'ReactNative' &&
typeof crypto === 'undefined'
) {
throw new Error(
'React Native does not have a built-in secure random generator. ' +
'If you dont need unpredictable IDs use `nanoid/non-secure`. ' +
'For secure IDs, import `react-native-get-random-values` ' +
'before Nano ID.'
)
}
if (typeof msCrypto !== 'undefined' && typeof crypto === 'undefined') {
throw new Error(
'Import file with `if (!window.crypto) window.crypto = window.msCrypto`' +
' before importing Nano ID to fix IE 11 support'
)
}
if (typeof crypto === 'undefined') {
throw new Error(
'Your browser does not have secure random generator. ' +
'If you dont need unpredictable IDs, you can use nanoid/non-secure.'
)
}
}
let random = bytes => crypto.getRandomValues(new Uint8Array(bytes))
let customRandom = (alphabet, defaultSize, getRandom) => {
let mask = (2 << (Math.log(alphabet.length - 1) / Math.LN2)) - 1
let step = -~((1.6 * mask * defaultSize) / alphabet.length)
return (size = defaultSize) => {
let id = ''
while (true) {
let bytes = getRandom(step)
let j = step
while (j--) {
id += alphabet[bytes[j] & mask] || ''
if (id.length === size) return id
}
}
}
}
let customAlphabet = (alphabet, size = 21) =>
customRandom(alphabet, size, random)
let nanoid = (size = 21) => {
let id = ''
let bytes = crypto.getRandomValues(new Uint8Array(size))
while (size--) {
let byte = bytes[size] & 63
if (byte < 36) {
id += byte.toString(36)
} else if (byte < 62) {
id += (byte - 26).toString(36).toUpperCase()
} else if (byte < 63) {
id += '_'
} else {
id += '-'
}
}
return id
}
export { nanoid, customAlphabet, customRandom, urlAlphabet, random }

2
node_modules/nanoid/nanoid.js generated vendored
View File

@ -1 +1 @@
export let nanoid=(t=21)=>{let e="",r=crypto.getRandomValues(new Uint8Array(t));for(;t--;){let n=63&r[t];e+=n<36?n.toString(36):n<62?(n-26).toString(36).toUpperCase():n<63?"_":"-"}return e}; export let nanoid=(t=21)=>crypto.getRandomValues(new Uint8Array(t)).reduce(((t,e)=>t+=(e&=63)<36?e.toString(36):e<62?(e-26).toString(36).toUpperCase():e<63?"_":"-"),"");

24
node_modules/nanoid/package.json generated vendored
View File

@ -1,7 +1,7 @@
{ {
"name": "nanoid", "name": "nanoid",
"version": "3.3.0", "version": "3.3.6",
"description": "A tiny (130 bytes), secure URL-friendly unique string ID generator", "description": "A tiny (116 bytes), secure URL-friendly unique string ID generator",
"keywords": [ "keywords": [
"uuid", "uuid",
"random", "random",
@ -11,6 +11,12 @@
"engines": { "engines": {
"node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
}, },
"funding": [
{
"type": "github",
"url": "https://github.com/sponsors/ai"
}
],
"author": "Andrey Sitnik <andrey@sitnik.ru>", "author": "Andrey Sitnik <andrey@sitnik.ru>",
"license": "MIT", "license": "MIT",
"repository": "ai/nanoid", "repository": "ai/nanoid",
@ -29,16 +35,13 @@
"module": "index.js", "module": "index.js",
"exports": { "exports": {
".": { ".": {
"browser": { "types": "./index.d.ts",
"development": "./index.dev.js", "browser": "./index.browser.js",
"production": "./index.prod.js",
"default": "./index.prod.js"
},
"require": "./index.cjs", "require": "./index.cjs",
"import": "./index.js", "import": "./index.js",
"default": "./index.js", "default": "./index.js"
"types": "./index.d.ts"
}, },
"./index.d.ts": "./index.d.ts",
"./package.json": "./package.json", "./package.json": "./package.json",
"./async/package.json": "./async/package.json", "./async/package.json": "./async/package.json",
"./async": { "./async": {
@ -58,7 +61,6 @@
"require": "./url-alphabet/index.cjs", "require": "./url-alphabet/index.cjs",
"import": "./url-alphabet/index.js", "import": "./url-alphabet/index.js",
"default": "./url-alphabet/index.js" "default": "./url-alphabet/index.js"
}, }
"./index.d.ts": "./index.d.ts"
} }
} }

8
node_modules/postcss-cli/index.js generated vendored
View File

@ -61,7 +61,13 @@ let configFile
if (argv.env) process.env.NODE_ENV = argv.env if (argv.env) process.env.NODE_ENV = argv.env
if (argv.config) argv.config = path.resolve(argv.config) if (argv.config) argv.config = path.resolve(argv.config)
if (argv.watch) { let { isTTY } = process.stdin
if (process.env.FORCE_IS_TTY === 'true') {
isTTY = true
}
if (argv.watch && isTTY) {
process.stdin.on('end', () => process.exit(0)) process.stdin.on('end', () => process.exit(0))
process.stdin.resume() process.stdin.resume()
} }

View File

@ -1,10 +1,10 @@
{ {
"name": "postcss-cli", "name": "postcss-cli",
"version": "9.1.0", "version": "10.1.0",
"description": "CLI for PostCSS", "description": "CLI for PostCSS",
"type": "module", "type": "module",
"engines": { "engines": {
"node": ">=12" "node": ">=14"
}, },
"bin": { "bin": {
"postcss": "./index.js" "postcss": "./index.js"
@ -20,15 +20,15 @@
"dependencies": { "dependencies": {
"chokidar": "^3.3.0", "chokidar": "^3.3.0",
"dependency-graph": "^0.11.0", "dependency-graph": "^0.11.0",
"fs-extra": "^10.0.0", "fs-extra": "^11.0.0",
"get-stdin": "^9.0.0", "get-stdin": "^9.0.0",
"globby": "^12.0.0", "globby": "^13.0.0",
"picocolors": "^1.0.0", "picocolors": "^1.0.0",
"postcss-load-config": "^3.0.0", "postcss-load-config": "^4.0.0",
"postcss-reporter": "^7.0.0", "postcss-reporter": "^7.0.0",
"pretty-hrtime": "^1.0.3", "pretty-hrtime": "^1.0.3",
"read-cache": "^1.0.0", "read-cache": "^1.0.0",
"slash": "^4.0.0", "slash": "^5.0.0",
"yargs": "^17.0.0" "yargs": "^17.0.0"
}, },
"devDependencies": { "devDependencies": {
@ -36,12 +36,12 @@
"c8": "^7.9.0", "c8": "^7.9.0",
"coveralls": "^3.0.0", "coveralls": "^3.0.0",
"eslint": "^8.2.0", "eslint": "^8.2.0",
"eslint-config-problems": "6.0.0", "eslint-config-problems": "7.0.1",
"postcss": "^8.0.4", "postcss": "^8.0.4",
"postcss-import": "^14.0.0", "postcss-import": "^15.0.0",
"prettier": "~2.5.0", "prettier": "~2.8.0",
"sugarss": "^4.0.0", "sugarss": "^4.0.0",
"uuid": "^8.0.0" "uuid": "^9.0.0"
}, },
"peerDependencies": { "peerDependencies": {
"postcss": "^8.0.0" "postcss": "^8.0.0"

View File

@ -27,9 +27,9 @@ npm i -D postcss-load-config
npm i -S|-D postcss-plugin npm i -S|-D postcss-plugin
``` ```
Install all required postcss plugins and save them to your **package.json** `dependencies`/`devDependencies` Install all required PostCSS plugins and save them to your **package.json** `dependencies`/`devDependencies`
Then create a postcss config file by choosing one of the following formats Then create a PostCSS config file by choosing one of the following formats
### `package.json` ### `package.json`
@ -91,14 +91,22 @@ plugins:
### `.postcssrc.js` or `postcss.config.js` ### `.postcssrc.js` or `postcss.config.js`
You may need some logic within your config. In this case create JS file named **`.postcssrc.js`** or **`postcss.config.js`** You may need some logic within your config.
In this case create JS file named:
- `.postcssrc.js`
- `.postcssrc.mjs`
- `.postcssrc.cjs`
- `.postcssrc.ts`
- `postcss.config.js`
- `postcss.config.mjs`
- `postcss.config.cjs`
- `postcss.config.ts`
``` ```
Project (Root) Project (Root)
| client | client
| public | public
| |- (.postcssrc|postcss.config).(js|mjs|cjs|ts)
|- (.postcssrc.js|postcss.config.js)
|- package.json |- package.json
``` ```
@ -142,6 +150,8 @@ module.exports = ({ env }) => ({
}) })
``` ```
> When using an `{Object}`, the key can be a Node.js module name, a path to a JavaScript file that is relative to the directory of the PostCSS config file, or an absolute path to a JavaScript file.
#### `{Array}` #### `{Array}`
**.postcssrc.js** **.postcssrc.js**
@ -322,8 +332,6 @@ module.exports = (ctx) => ({
} }
``` ```
### `Async`
```js ```js
const { readFileSync } = require('fs') const { readFileSync } = require('fs')
@ -341,21 +349,6 @@ postcssrc(ctx).then(({ plugins, options }) => {
}) })
``` ```
### `Sync`
```js
const { readFileSync } = require('fs')
const postcss = require('postcss')
const postcssrc = require('postcss-load-config')
const css = readFileSync('index.sss', 'utf8')
const ctx = { parser: true, map: 'inline' }
const { plugins, options } = postcssrc.sync(ctx)
```
<div align="center"> <div align="center">
<img width="80" height="80" halign="10" src="https://worldvectorlogo.com/logos/gulp.svg"> <img width="80" height="80" halign="10" src="https://worldvectorlogo.com/logos/gulp.svg">
</div> </div>

View File

@ -1,6 +1,6 @@
{ {
"name": "postcss-load-config", "name": "postcss-load-config",
"version": "3.1.3", "version": "4.0.1",
"description": "Autoload Config for PostCSS", "description": "Autoload Config for PostCSS",
"main": "src/index.js", "main": "src/index.js",
"types": "src/index.d.ts", "types": "src/index.d.ts",
@ -8,22 +8,26 @@
"src" "src"
], ],
"engines": { "engines": {
"node": ">= 10" "node": ">= 14"
}, },
"funding": { "funding": {
"type": "opencollective", "type": "opencollective",
"url": "https://opencollective.com/postcss/" "url": "https://opencollective.com/postcss/"
}, },
"dependencies": { "dependencies": {
"lilconfig": "^2.0.4", "lilconfig": "^2.0.5",
"yaml": "^1.10.2" "yaml": "^2.1.1"
}, },
"peerDependencies": { "peerDependencies": {
"postcss": ">=8.0.9",
"ts-node": ">=9.0.0" "ts-node": ">=9.0.0"
}, },
"peerDependenciesMeta": { "peerDependenciesMeta": {
"ts-node": { "ts-node": {
"optional": true "optional": true
},
"postcss": {
"optional": true
} }
}, },
"keywords": [ "keywords": [

View File

@ -11,12 +11,6 @@ declare function postcssrc(
): Promise<postcssrc.Result>; ): Promise<postcssrc.Result>;
declare namespace postcssrc { declare namespace postcssrc {
function sync(
ctx?: ConfigContext,
path?: string,
options?: ConfigOptions
): Result;
// In the ConfigContext, these three options can be instances of the // In the ConfigContext, these three options can be instances of the
// appropriate class, or strings. If they are strings, postcss-load-config will // appropriate class, or strings. If they are strings, postcss-load-config will
// require() them and pass the instances along. // require() them and pass the instances along.

View File

@ -1,6 +1,7 @@
'use strict' 'use strict'
const resolve = require('path').resolve const resolve = require('path').resolve
const url = require('url')
const config = require('lilconfig') const config = require('lilconfig')
const yaml = require('yaml') const yaml = require('yaml')
@ -36,7 +37,7 @@ const processResult = (ctx, result) => {
return { return {
plugins: loadPlugins(config, file), plugins: loadPlugins(config, file),
options: loadOptions(config, file), options: loadOptions(config, file),
file: file file
} }
} }
@ -66,6 +67,11 @@ const createContext = (ctx) => {
return ctx return ctx
} }
const importDefault = async filepath => {
const module = await import(url.pathToFileURL(filepath).href)
return module.default
}
const addTypeScriptLoader = (options = {}, loader) => { const addTypeScriptLoader = (options = {}, loader) => {
const moduleName = 'postcss' const moduleName = 'postcss'
@ -81,14 +87,19 @@ const addTypeScriptLoader = (options = {}, loader) => {
`.${moduleName}rc.ts`, `.${moduleName}rc.ts`,
`.${moduleName}rc.js`, `.${moduleName}rc.js`,
`.${moduleName}rc.cjs`, `.${moduleName}rc.cjs`,
`.${moduleName}rc.mjs`,
`${moduleName}.config.ts`, `${moduleName}.config.ts`,
`${moduleName}.config.js`, `${moduleName}.config.js`,
`${moduleName}.config.cjs` `${moduleName}.config.cjs`,
`${moduleName}.config.mjs`
], ],
loaders: { loaders: {
...options.loaders, ...options.loaders,
'.yaml': (filepath, content) => yaml.parse(content), '.yaml': (filepath, content) => yaml.parse(content),
'.yml': (filepath, content) => yaml.parse(content), '.yml': (filepath, content) => yaml.parse(content),
'.js': importDefault,
'.cjs': importDefault,
'.mjs': importDefault,
'.ts': loader '.ts': loader
} }
} }
@ -152,26 +163,6 @@ const rc = withTypeScriptLoader((ctx, path, options) => {
}) })
}) })
rc.sync = withTypeScriptLoader((ctx, path, options) => {
/**
* @type {Object} The full Config Context
*/
ctx = createContext(ctx)
/**
* @type {String} `process.cwd()`
*/
path = path ? resolve(path) : process.cwd()
const result = config.lilconfigSync('postcss', options).search(path)
if (!result) {
throw new Error(`No PostCSS Config found in: ${path}`)
}
return processResult(ctx, result)
})
/** /**
* Autoload Config for PostCSS * Autoload Config for PostCSS
* *

View File

@ -1,4 +1,4 @@
// eslint-disable-next-line node/no-deprecated-api // eslint-disable-next-line n/no-deprecated-api
const { createRequire, createRequireFromPath } = require('module') const { createRequire, createRequireFromPath } = require('module')
function req (name, rootFile) { function req (name, rootFile) {

2
node_modules/postcss/README.md generated vendored
View File

@ -41,4 +41,4 @@ at <postcss@evilmartians.com>.
## Docs ## Docs
Read **[full docs](https://github.com/postcss/postcss#readme)** on GitHub. Read full docs **[here](https://postcss.org/)**.

View File

@ -1,6 +1,7 @@
import Container, { ContainerProps } from './container.js' import Container, { ContainerProps } from './container.js'
interface AtRuleRaws extends Record<string, unknown> { declare namespace AtRule {
export interface AtRuleRaws extends Record<string, unknown> {
/** /**
* The space symbols before the node. It also stores `*` * The space symbols before the node. It also stores `*`
* and `_` symbols before the declaration (IE hack). * and `_` symbols before the declaration (IE hack).
@ -34,15 +35,19 @@ interface AtRuleRaws extends Record<string, unknown> {
value: string value: string
raw: string raw: string
} }
} }
export interface AtRuleProps extends ContainerProps { export interface AtRuleProps extends ContainerProps {
/** Name of the at-rule. */ /** Name of the at-rule. */
name: string name: string
/** Parameters following the name of the at-rule. */ /** Parameters following the name of the at-rule. */
params?: string | number params?: string | number
/** Information used to generate byte-to-byte equal node string as it was in the origin input. */ /** Information used to generate byte-to-byte equal node string as it was in the origin input. */
raws?: AtRuleRaws raws?: AtRuleRaws
}
// eslint-disable-next-line @typescript-eslint/no-use-before-define
export { AtRule_ as default }
} }
/** /**
@ -56,7 +61,7 @@ export interface AtRuleProps extends ContainerProps {
* } * }
* ``` * ```
* *
* If its followed in the CSS by a {} block, this node will have * If its followed in the CSS by a `{}` block, this node will have
* a nodes property representing its children. * a nodes property representing its children.
* *
* ```js * ```js
@ -70,10 +75,10 @@ export interface AtRuleProps extends ContainerProps {
* media.nodes //=> [] * media.nodes //=> []
* ``` * ```
*/ */
export default class AtRule extends Container { declare class AtRule_ extends Container {
type: 'atrule' type: 'atrule'
parent: Container | undefined parent: Container | undefined
raws: AtRuleRaws raws: AtRule.AtRuleRaws
/** /**
* The at-rules name immediately follows the `@`. * The at-rules name immediately follows the `@`.
@ -88,7 +93,7 @@ export default class AtRule extends Container {
/** /**
* The at-rules parameters, the values that follow the at-rules name * The at-rules parameters, the values that follow the at-rules name
* but precede any {} block. * but precede any `{}` block.
* *
* ```js * ```js
* const root = postcss.parse('@media print, screen {}') * const root = postcss.parse('@media print, screen {}')
@ -98,9 +103,13 @@ export default class AtRule extends Container {
*/ */
params: string params: string
constructor(defaults?: AtRuleProps) constructor(defaults?: AtRule.AtRuleProps)
assign(overrides: object | AtRuleProps): this assign(overrides: object | AtRule.AtRuleProps): this
clone(overrides?: Partial<AtRuleProps>): this clone(overrides?: Partial<AtRule.AtRuleProps>): this
cloneBefore(overrides?: Partial<AtRuleProps>): this cloneBefore(overrides?: Partial<AtRule.AtRuleProps>): this
cloneAfter(overrides?: Partial<AtRuleProps>): this cloneAfter(overrides?: Partial<AtRule.AtRuleProps>): this
} }
declare class AtRule extends AtRule_ {}
export = AtRule

View File

@ -1,7 +1,8 @@
import Container from './container.js' import Container from './container.js'
import Node, { NodeProps } from './node.js' import Node, { NodeProps } from './node.js'
interface CommentRaws extends Record<string, unknown> { declare namespace Comment {
export interface CommentRaws extends Record<string, unknown> {
/** /**
* The space symbols before the node. * The space symbols before the node.
*/ */
@ -16,13 +17,17 @@ interface CommentRaws extends Record<string, unknown> {
* The space symbols between the comments text. * The space symbols between the comments text.
*/ */
right?: string right?: string
} }
export interface CommentProps extends NodeProps { export interface CommentProps extends NodeProps {
/** Content of the comment. */ /** Content of the comment. */
text: string text: string
/** Information used to generate byte-to-byte equal node string as it was in the origin input. */ /** Information used to generate byte-to-byte equal node string as it was in the origin input. */
raws?: CommentRaws raws?: CommentRaws
}
// eslint-disable-next-line @typescript-eslint/no-use-before-define
export { Comment_ as default }
} }
/** /**
@ -38,19 +43,23 @@ export interface CommentProps extends NodeProps {
* Comments inside selectors, at-rule parameters, or declaration values * Comments inside selectors, at-rule parameters, or declaration values
* will be stored in the `raws` properties explained above. * will be stored in the `raws` properties explained above.
*/ */
export default class Comment extends Node { declare class Comment_ extends Node {
type: 'comment' type: 'comment'
parent: Container | undefined parent: Container | undefined
raws: CommentRaws raws: Comment.CommentRaws
/** /**
* The comment's text. * The comment's text.
*/ */
text: string text: string
constructor(defaults?: CommentProps) constructor(defaults?: Comment.CommentProps)
assign(overrides: object | CommentProps): this assign(overrides: object | Comment.CommentProps): this
clone(overrides?: Partial<CommentProps>): this clone(overrides?: Partial<Comment.CommentProps>): this
cloneBefore(overrides?: Partial<CommentProps>): this cloneBefore(overrides?: Partial<Comment.CommentProps>): this
cloneAfter(overrides?: Partial<CommentProps>): this cloneAfter(overrides?: Partial<Comment.CommentProps>): this
} }
declare class Comment extends Comment_ {}
export = Comment

View File

@ -4,7 +4,8 @@ import Comment from './comment.js'
import AtRule from './at-rule.js' import AtRule from './at-rule.js'
import Rule from './rule.js' import Rule from './rule.js'
interface ValueOptions { declare namespace Container {
export interface ValueOptions {
/** /**
* An array of property names. * An array of property names.
*/ */
@ -14,10 +15,14 @@ interface ValueOptions {
* String thats used to narrow down values and speed up the regexp search. * String thats used to narrow down values and speed up the regexp search.
*/ */
fast?: string fast?: string
} }
export interface ContainerProps extends NodeProps { export interface ContainerProps extends NodeProps {
nodes?: (ChildNode | ChildProps)[] nodes?: (ChildNode | ChildProps)[]
}
// eslint-disable-next-line @typescript-eslint/no-use-before-define
export { Container_ as default }
} }
/** /**
@ -27,7 +32,7 @@ export interface ContainerProps extends NodeProps {
* Note that all containers can store any content. If you write a rule inside * Note that all containers can store any content. If you write a rule inside
* a rule, PostCSS will parse it. * a rule, PostCSS will parse it.
*/ */
export default abstract class Container< declare abstract class Container_<
Child extends Node = ChildNode Child extends Node = ChildNode
> extends Node { > extends Node {
/** /**
@ -390,7 +395,7 @@ export default abstract class Container<
*/ */
replaceValues( replaceValues(
pattern: string | RegExp, pattern: string | RegExp,
options: ValueOptions, options: Container.ValueOptions,
replaced: string | { (substring: string, ...args: any[]): string } replaced: string | { (substring: string, ...args: any[]): string }
): this ): this
replaceValues( replaceValues(
@ -440,3 +445,7 @@ export default abstract class Container<
*/ */
index(child: Child | number): number index(child: Child | number): number
} }
declare class Container<Child extends Node = ChildNode> extends Container_<Child> {}
export = Container

View File

@ -5,7 +5,7 @@ let Declaration = require('./declaration')
let Comment = require('./comment') let Comment = require('./comment')
let Node = require('./node') let Node = require('./node')
let parse, Rule, AtRule let parse, Rule, AtRule, Root
function cleanSource(nodes) { function cleanSource(nodes) {
return nodes.map(i => { return nodes.map(i => {
@ -176,16 +176,16 @@ class Container extends Node {
} }
insertBefore(exist, add) { insertBefore(exist, add) {
exist = this.index(exist) let existIndex = this.index(exist)
let type = existIndex === 0 ? 'prepend' : false
let type = exist === 0 ? 'prepend' : false let nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse()
let nodes = this.normalize(add, this.proxyOf.nodes[exist], type).reverse() existIndex = this.index(exist)
for (let node of nodes) this.proxyOf.nodes.splice(exist, 0, node) for (let node of nodes) this.proxyOf.nodes.splice(existIndex, 0, node)
let index let index
for (let id in this.indexes) { for (let id in this.indexes) {
index = this.indexes[id] index = this.indexes[id]
if (exist <= index) { if (existIndex <= index) {
this.indexes[id] = index + nodes.length this.indexes[id] = index + nodes.length
} }
} }
@ -196,15 +196,15 @@ class Container extends Node {
} }
insertAfter(exist, add) { insertAfter(exist, add) {
exist = this.index(exist) let existIndex = this.index(exist)
let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse()
let nodes = this.normalize(add, this.proxyOf.nodes[exist]).reverse() existIndex = this.index(exist)
for (let node of nodes) this.proxyOf.nodes.splice(exist + 1, 0, node) for (let node of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node)
let index let index
for (let id in this.indexes) { for (let id in this.indexes) {
index = this.indexes[id] index = this.indexes[id]
if (exist < index) { if (existIndex < index) {
this.indexes[id] = index + nodes.length this.indexes[id] = index + nodes.length
} }
} }
@ -326,7 +326,7 @@ class Container extends Node {
i.raws.before = sample.raws.before.replace(/\S/g, '') i.raws.before = sample.raws.before.replace(/\S/g, '')
} }
} }
i.parent = this i.parent = this.proxyOf
return i return i
}) })
@ -407,6 +407,10 @@ Container.registerAtRule = dependant => {
AtRule = dependant AtRule = dependant
} }
Container.registerRoot = dependant => {
Root = dependant
}
module.exports = Container module.exports = Container
Container.default = Container Container.default = Container
@ -420,6 +424,8 @@ Container.rebuild = node => {
Object.setPrototypeOf(node, Declaration.prototype) Object.setPrototypeOf(node, Declaration.prototype)
} else if (node.type === 'comment') { } else if (node.type === 'comment') {
Object.setPrototypeOf(node, Comment.prototype) Object.setPrototypeOf(node, Comment.prototype)
} else if (node.type === 'root') {
Object.setPrototypeOf(node, Root.prototype)
} }
node[my] = true node[my] = true

View File

@ -1,9 +1,10 @@
import { FilePosition } from './input.js' import { FilePosition } from './input.js'
/** declare namespace CssSyntaxError {
/**
* A position that is part of a range. * A position that is part of a range.
*/ */
export interface RangePosition { export interface RangePosition {
/** /**
* The line number in the input. * The line number in the input.
*/ */
@ -13,6 +14,10 @@ export interface RangePosition {
* The column number in the input. * The column number in the input.
*/ */
column: number column: number
}
// eslint-disable-next-line @typescript-eslint/no-use-before-define
export { CssSyntaxError_ as default }
} }
/** /**
@ -44,7 +49,7 @@ export interface RangePosition {
* } * }
* ``` * ```
*/ */
export default class CssSyntaxError { declare class CssSyntaxError_ {
/** /**
* Instantiates a CSS syntax error. Can be instantiated for a single position * Instantiates a CSS syntax error. Can be instantiated for a single position
* or for a range. * or for a range.
@ -59,8 +64,8 @@ export default class CssSyntaxError {
*/ */
constructor( constructor(
message: string, message: string,
lineOrStartPos?: number | RangePosition, lineOrStartPos?: number | CssSyntaxError.RangePosition,
columnOrEndPos?: number | RangePosition, columnOrEndPos?: number | CssSyntaxError.RangePosition,
source?: string, source?: string,
file?: string, file?: string,
plugin?: string plugin?: string
@ -237,3 +242,7 @@ export default class CssSyntaxError {
*/ */
showSourceCode(color?: boolean): string showSourceCode(color?: boolean): string
} }
declare class CssSyntaxError extends CssSyntaxError_ {}
export = CssSyntaxError

View File

@ -1,7 +1,8 @@
import Container from './container.js' import Container from './container.js'
import Node from './node.js' import Node from './node.js'
interface DeclarationRaws extends Record<string, unknown> { declare namespace Declaration {
export interface DeclarationRaws extends Record<string, unknown> {
/** /**
* The space symbols before the node. It also stores `*` * The space symbols before the node. It also stores `*`
* and `_` symbols before the declaration (IE hack). * and `_` symbols before the declaration (IE hack).
@ -21,13 +22,13 @@ interface DeclarationRaws extends Record<string, unknown> {
/** /**
* Declaration value with comments. * Declaration value with comments.
*/ */
value: { value?: {
value: string value: string
raw: string raw: string
} }
} }
export interface DeclarationProps { export interface DeclarationProps {
/** Name of the declaration. */ /** Name of the declaration. */
prop: string prop: string
/** Value of the declaration. */ /** Value of the declaration. */
@ -36,6 +37,10 @@ export interface DeclarationProps {
important?: boolean important?: boolean
/** Information used to generate byte-to-byte equal node string as it was in the origin input. */ /** Information used to generate byte-to-byte equal node string as it was in the origin input. */
raws?: DeclarationRaws raws?: DeclarationRaws
}
// eslint-disable-next-line @typescript-eslint/no-use-before-define
export { Declaration_ as default }
} }
/** /**
@ -55,10 +60,10 @@ export interface DeclarationProps {
* decl.toString() //=> ' color: black' * decl.toString() //=> ' color: black'
* ``` * ```
*/ */
export default class Declaration extends Node { declare class Declaration_ extends Node {
type: 'decl' type: 'decl'
parent: Container | undefined parent: Container | undefined
raws: DeclarationRaws raws: Declaration.DeclarationRaws
/** /**
* The declaration's property name. * The declaration's property name.
@ -116,9 +121,13 @@ export default class Declaration extends Node {
*/ */
variable: boolean variable: boolean
constructor(defaults?: DeclarationProps) constructor(defaults?: Declaration.DeclarationProps)
assign(overrides: object | DeclarationProps): this assign(overrides: object | Declaration.DeclarationProps): this
clone(overrides?: Partial<DeclarationProps>): this clone(overrides?: Partial<Declaration.DeclarationProps>): this
cloneBefore(overrides?: Partial<DeclarationProps>): this cloneBefore(overrides?: Partial<Declaration.DeclarationProps>): this
cloneAfter(overrides?: Partial<DeclarationProps>): this cloneAfter(overrides?: Partial<Declaration.DeclarationProps>): this
} }
declare class Declaration extends Declaration_ {}
export = Declaration

View File

@ -1,9 +1,10 @@
import Container, { ContainerProps } from './container.js' import Container, { ContainerProps } from './container.js'
import { ProcessOptions } from './postcss.js' import { ProcessOptions } from './postcss.js'
import Result from './result.js' import Result from './result.js'
import Root, { RootProps } from './root.js' import Root from './root.js'
export interface DocumentProps extends ContainerProps { declare namespace Document {
export interface DocumentProps extends ContainerProps {
nodes?: Root[] nodes?: Root[]
/** /**
@ -13,10 +14,11 @@ export interface DocumentProps extends ContainerProps {
* Every parser saves its own properties. * Every parser saves its own properties.
*/ */
raws?: Record<string, any> raws?: Record<string, any>
} }
type ChildNode = Root // eslint-disable-next-line @typescript-eslint/no-use-before-define
type ChildProps = RootProps export { Document_ as default }
}
/** /**
* Represents a file and contains all its parsed nodes. * Represents a file and contains all its parsed nodes.
@ -32,11 +34,11 @@ type ChildProps = RootProps
* document.nodes.length //=> 2 * document.nodes.length //=> 2
* ``` * ```
*/ */
export default class Document extends Container<Root> { declare class Document_ extends Container<Root> {
type: 'document' type: 'document'
parent: undefined parent: undefined
constructor(defaults?: DocumentProps) constructor(defaults?: Document.DocumentProps)
/** /**
* Returns a `Result` instance representing the documents CSS roots. * Returns a `Result` instance representing the documents CSS roots.
@ -55,3 +57,7 @@ export default class Document extends Container<Root> {
*/ */
toResult(options?: ProcessOptions): Result toResult(options?: ProcessOptions): Result
} }
declare class Document extends Document_ {}
export = Document

View File

@ -1,5 +1,9 @@
import { JSONHydrator } from './postcss.js' import { JSONHydrator } from './postcss.js'
declare const fromJSON: JSONHydrator interface FromJSON extends JSONHydrator {
default: FromJSON
}
export default fromJSON declare const fromJSON: FromJSON
export = fromJSON

52
node_modules/postcss/lib/input.d.ts generated vendored
View File

@ -1,7 +1,8 @@
import { ProcessOptions } from './postcss.js' import { CssSyntaxError, ProcessOptions } from './postcss.js'
import PreviousMap from './previous-map.js' import PreviousMap from './previous-map.js'
export interface FilePosition { declare namespace Input {
export interface FilePosition {
/** /**
* URL for the source file. * URL for the source file.
*/ */
@ -36,6 +37,10 @@ export interface FilePosition {
* Source code. * Source code.
*/ */
source?: string source?: string
}
// eslint-disable-next-line @typescript-eslint/no-use-before-define
export { Input_ as default }
} }
/** /**
@ -46,7 +51,7 @@ export interface FilePosition {
* const input = root.source.input * const input = root.source.input
* ``` * ```
*/ */
export default class Input { declare class Input_ {
/** /**
* Input CSS source. * Input CSS source.
* *
@ -139,7 +144,7 @@ export default class Input {
column: number, column: number,
endLine?: number, endLine?: number,
endColumn?: number endColumn?: number
): FilePosition | false ): Input.FilePosition | false
/** /**
* Converts source offset to line and column. * Converts source offset to line and column.
@ -147,4 +152,43 @@ export default class Input {
* @param offset Source offset. * @param offset Source offset.
*/ */
fromOffset(offset: number): { line: number; col: number } | null fromOffset(offset: number): { line: number; col: number } | null
/**
* Returns `CssSyntaxError` with information about the error and its position.
*/
error(
message: string,
line: number,
column: number,
opts?: { plugin?: CssSyntaxError['plugin'] }
): CssSyntaxError
error(
message: string,
offset: number,
opts?: { plugin?: CssSyntaxError['plugin'] }
): CssSyntaxError
error(
message: string,
start:
| {
offset: number
}
| {
line: number
column: number
},
end:
| {
offset: number
}
| {
line: number
column: number
},
opts?: { plugin?: CssSyntaxError['plugin'] }
): CssSyntaxError
} }
declare class Input extends Input_ {}
export = Input

2
node_modules/postcss/lib/input.js generated vendored
View File

@ -108,7 +108,7 @@ class Input {
if (line && typeof line === 'object') { if (line && typeof line === 'object') {
let start = line let start = line
let end = column let end = column
if (typeof line.offset === 'number') { if (typeof start.offset === 'number') {
let pos = this.fromOffset(start.offset) let pos = this.fromOffset(start.offset)
line = pos.line line = pos.line
column = pos.col column = pos.col

View File

@ -4,6 +4,11 @@ import Processor from './processor.js'
import Warning from './warning.js' import Warning from './warning.js'
import Root from './root.js' import Root from './root.js'
declare namespace LazyResult {
// eslint-disable-next-line @typescript-eslint/no-use-before-define
export { LazyResult_ as default }
}
/** /**
* A Promise proxy for the result of PostCSS transformations. * A Promise proxy for the result of PostCSS transformations.
* *
@ -13,7 +18,7 @@ import Root from './root.js'
* const lazy = postcss([autoprefixer]).process(css) * const lazy = postcss([autoprefixer]).process(css)
* ``` * ```
*/ */
export default class LazyResult implements PromiseLike<Result> { declare class LazyResult_ implements PromiseLike<Result> {
/** /**
* Processes input CSS through synchronous and asynchronous plugins * Processes input CSS through synchronous and asynchronous plugins
* and calls `onFulfilled` with a Result instance. If a plugin throws * and calls `onFulfilled` with a Result instance. If a plugin throws
@ -174,3 +179,7 @@ export default class LazyResult implements PromiseLike<Result> {
*/ */
async(): Promise<Result> async(): Promise<Result>
} }
declare class LazyResult extends LazyResult_ {}
export = LazyResult

12
node_modules/postcss/lib/list.d.ts generated vendored
View File

@ -1,4 +1,7 @@
export type List = { declare namespace list {
type List = {
default: List
/** /**
* Safely splits values. * Safely splits values.
* *
@ -14,6 +17,7 @@ export type List = {
* @return Split values. * @return Split values.
*/ */
split(string: string, separators: string[], last: boolean): string[] split(string: string, separators: string[], last: boolean): string[]
/** /**
* Safely splits space-separated values (such as those for `background`, * Safely splits space-separated values (such as those for `background`,
* `border-radius`, and other shorthand properties). * `border-radius`, and other shorthand properties).
@ -44,8 +48,10 @@ export type List = {
* @return Split values. * @return Split values.
*/ */
comma(str: string): string[] comma(str: string): string[]
}
} }
declare const list: List // eslint-disable-next-line @typescript-eslint/no-redeclare
declare const list: list.List
export default list export = list

12
node_modules/postcss/lib/list.js generated vendored
View File

@ -7,7 +7,8 @@ let list = {
let split = false let split = false
let func = 0 let func = 0
let quote = false let inQuote = false
let prevQuote = ''
let escape = false let escape = false
for (let letter of string) { for (let letter of string) {
@ -15,12 +16,13 @@ let list = {
escape = false escape = false
} else if (letter === '\\') { } else if (letter === '\\') {
escape = true escape = true
} else if (quote) { } else if (inQuote) {
if (letter === quote) { if (letter === prevQuote) {
quote = false inQuote = false
} }
} else if (letter === '"' || letter === "'") { } else if (letter === '"' || letter === "'") {
quote = letter inQuote = true
prevQuote = letter
} else if (letter === '(') { } else if (letter === '(') {
func += 1 func += 1
} else if (letter === ')') { } else if (letter === ')') {

View File

@ -16,6 +16,7 @@ class MapGenerator {
this.root = root this.root = root
this.opts = opts this.opts = opts
this.css = cssString this.css = cssString
this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute
} }
isMap() { isMap() {
@ -97,10 +98,10 @@ class MapGenerator {
let from = node.source.input.from let from = node.source.input.from
if (from && !already[from]) { if (from && !already[from]) {
already[from] = true already[from] = true
this.map.setSourceContent( let fromUrl = this.usesFileUrls
this.toUrl(this.path(from)), ? this.toFileUrl(from)
node.source.input.css : this.toUrl(this.path(from))
) this.map.setSourceContent(fromUrl, node.source.input.css)
} }
} }
}) })
@ -232,17 +233,21 @@ class MapGenerator {
return encodeURI(path).replace(/[#?]/g, encodeURIComponent) return encodeURI(path).replace(/[#?]/g, encodeURIComponent)
} }
sourcePath(node) { toFileUrl(path) {
if (this.mapOpts.from) {
return this.toUrl(this.mapOpts.from)
} else if (this.mapOpts.absolute) {
if (pathToFileURL) { if (pathToFileURL) {
return pathToFileURL(node.source.input.from).toString() return pathToFileURL(path).toString()
} else { } else {
throw new Error( throw new Error(
'`map.absolute` option is not available in this PostCSS build' '`map.absolute` option is not available in this PostCSS build'
) )
} }
}
sourcePath(node) {
if (this.mapOpts.from) {
return this.toUrl(this.mapOpts.from)
} else if (this.usesFileUrls) {
return this.toFileUrl(node.source.input.from)
} else { } else {
return this.toUrl(this.path(node.source.input.from)) return this.toUrl(this.path(node.source.input.from))
} }
@ -293,7 +298,9 @@ class MapGenerator {
if (node && type !== 'start') { if (node && type !== 'start') {
let p = node.parent || { raws: {} } let p = node.parent || { raws: {} }
if (node.type !== 'decl' || node !== p.last || p.raws.semicolon) { let childless =
node.type === 'decl' || (node.type === 'atrule' && !node.nodes)
if (!childless || node !== p.last || p.raws.semicolon) {
if (node.source && node.source.end) { if (node.source && node.source.end) {
mapping.source = this.sourcePath(node) mapping.source = this.sourcePath(node)
mapping.original.line = node.source.end.line mapping.original.line = node.source.end.line

View File

@ -5,6 +5,11 @@ import Warning from './warning.js'
import Root from './root.js' import Root from './root.js'
import LazyResult from './lazy-result.js' import LazyResult from './lazy-result.js'
declare namespace NoWorkResult {
// eslint-disable-next-line @typescript-eslint/no-use-before-define
export { NoWorkResult_ as default }
}
/** /**
* A Promise proxy for the result of PostCSS transformations. * A Promise proxy for the result of PostCSS transformations.
* This lazy result instance doesn't parse css unless `NoWorkResult#root` or `Result#root` * This lazy result instance doesn't parse css unless `NoWorkResult#root` or `Result#root`
@ -17,7 +22,7 @@ import LazyResult from './lazy-result.js'
* let root = noWorkResult.root // now css is parsed because we accessed the root * let root = noWorkResult.root // now css is parsed because we accessed the root
* ``` * ```
*/ */
export default class NoWorkResult implements LazyResult { declare class NoWorkResult_ implements LazyResult {
then: Promise<Result>['then'] then: Promise<Result>['then']
catch: Promise<Result>['catch'] catch: Promise<Result>['catch']
finally: Promise<Result>['finally'] finally: Promise<Result>['finally']
@ -35,3 +40,7 @@ export default class NoWorkResult implements LazyResult {
sync(): Result sync(): Result
async(): Promise<Result> async(): Promise<Result>
} }
declare class NoWorkResult extends NoWorkResult_ {}
export = NoWorkResult

63
node_modules/postcss/lib/node.d.ts generated vendored
View File

@ -1,9 +1,10 @@
import Declaration, { DeclarationProps } from './declaration.js' import Declaration, { DeclarationProps } from './declaration.js'
import Comment, { CommentProps } from './comment.js' import Comment, { CommentProps } from './comment.js'
import { Stringifier, Syntax } from './postcss.js' import { Stringifier, Syntax } from './postcss.js'
import AtRule, { AtRuleProps } from './at-rule.js' import AtRule = require('./at-rule.js')
import { AtRuleProps } from './at-rule.js'
import Rule, { RuleProps } from './rule.js' import Rule, { RuleProps } from './rule.js'
import { WarningOptions } from './warning.js' import Warning, { WarningOptions } from './warning.js'
import CssSyntaxError from './css-syntax-error.js' import CssSyntaxError from './css-syntax-error.js'
import Result from './result.js' import Result from './result.js'
import Input from './input.js' import Input from './input.js'
@ -11,17 +12,18 @@ import Root from './root.js'
import Document from './document.js' import Document from './document.js'
import Container from './container.js' import Container from './container.js'
export type ChildNode = AtRule | Rule | Declaration | Comment declare namespace Node {
export type ChildNode = AtRule.default | Rule | Declaration | Comment
export type AnyNode = AtRule | Rule | Declaration | Comment | Root | Document export type AnyNode = AtRule.default | Rule | Declaration | Comment | Root | Document
export type ChildProps = export type ChildProps =
| AtRuleProps | AtRuleProps
| RuleProps | RuleProps
| DeclarationProps | DeclarationProps
| CommentProps | CommentProps
export interface Position { export interface Position {
/** /**
* Source offset in file. It starts from 0. * Source offset in file. It starts from 0.
*/ */
@ -36,9 +38,9 @@ export interface Position {
* Source column in file. * Source column in file.
*/ */
line: number line: number
} }
export interface Range { export interface Range {
/** /**
* Start position, inclusive. * Start position, inclusive.
*/ */
@ -48,9 +50,9 @@ export interface Range {
* End position, exclusive. * End position, exclusive.
*/ */
end: Position end: Position
} }
export interface Source { export interface Source {
/** /**
* The file source of the node. * The file source of the node.
*/ */
@ -63,13 +65,13 @@ export interface Source {
* The inclusive ending position of the node's source. * The inclusive ending position of the node's source.
*/ */
end?: Position end?: Position
} }
export interface NodeProps { export interface NodeProps {
source?: Source source?: Source
} }
interface NodeErrorOptions { export interface NodeErrorOptions {
/** /**
* Plugin name that created this error. PostCSS will set it automatically. * Plugin name that created this error. PostCSS will set it automatically.
*/ */
@ -89,6 +91,11 @@ interface NodeErrorOptions {
* source of error. * source of error.
*/ */
endIndex?: number endIndex?: number
}
// eslint-disable-next-line @typescript-eslint/no-shadow
class Node extends Node_ {}
export { Node as default }
} }
/** /**
@ -97,7 +104,7 @@ interface NodeErrorOptions {
* You should not extend this classes to create AST for selector or value * You should not extend this classes to create AST for selector or value
* parser. * parser.
*/ */
export default abstract class Node { declare abstract class Node_ {
/** /**
* tring representing the nodes type. Possible values are `root`, `atrule`, * tring representing the nodes type. Possible values are `root`, `atrule`,
* `rule`, `decl`, or `comment`. * `rule`, `decl`, or `comment`.
@ -153,7 +160,7 @@ export default abstract class Node {
* } * }
* ``` * ```
*/ */
source?: Source source?: Node.Source
/** /**
* Information to generate byte-to-byte equal node string as it was * Information to generate byte-to-byte equal node string as it was
@ -222,7 +229,7 @@ export default abstract class Node {
* *
* @return Error object to throw it. * @return Error object to throw it.
*/ */
error(message: string, options?: NodeErrorOptions): CssSyntaxError error(message: string, options?: Node.NodeErrorOptions): CssSyntaxError
/** /**
* This method is provided as a convenience wrapper for `Result#warn`. * This method is provided as a convenience wrapper for `Result#warn`.
@ -241,7 +248,7 @@ export default abstract class Node {
* *
* @return Created warning object. * @return Created warning object.
*/ */
warn(result: Result, text: string, opts?: WarningOptions): void warn(result: Result, text: string, opts?: WarningOptions): Warning
/** /**
* Removes the node from its parent and cleans the parent properties * Removes the node from its parent and cleans the parent properties
@ -337,7 +344,7 @@ export default abstract class Node {
* @return Current node to methods chain. * @return Current node to methods chain.
*/ */
replaceWith( replaceWith(
...nodes: (ChildNode | ChildProps | ChildNode[] | ChildProps[])[] ...nodes: (Node.ChildNode | Node.ChildProps | Node.ChildNode[] | Node.ChildProps[])[]
): this ): this
/** /**
@ -355,7 +362,7 @@ export default abstract class Node {
* *
* @return Next node. * @return Next node.
*/ */
next(): ChildNode | undefined next(): Node.ChildNode | undefined
/** /**
* Returns the previous child of the nodes parent. * Returns the previous child of the nodes parent.
@ -370,7 +377,7 @@ export default abstract class Node {
* *
* @return Previous node. * @return Previous node.
*/ */
prev(): ChildNode | undefined prev(): Node.ChildNode | undefined
/** /**
* Insert new node before current node to current nodes parent. * Insert new node before current node to current nodes parent.
@ -384,7 +391,7 @@ export default abstract class Node {
* @param newNode New node. * @param newNode New node.
* @return This node for methods chain. * @return This node for methods chain.
*/ */
before(newNode: Node | ChildProps | string | Node[]): this before(newNode: Node | Node.ChildProps | string | Node[]): this
/** /**
* Insert new node after current node to current nodes parent. * Insert new node after current node to current nodes parent.
@ -398,7 +405,7 @@ export default abstract class Node {
* @param newNode New node. * @param newNode New node.
* @return This node for methods chain. * @return This node for methods chain.
*/ */
after(newNode: Node | ChildProps | string | Node[]): this after(newNode: Node | Node.ChildProps | string | Node[]): this
/** /**
* Finds the Root instance of the nodes tree. * Finds the Root instance of the nodes tree.
@ -457,7 +464,7 @@ export default abstract class Node {
* @param index The symbol number in the nodes string. * @param index The symbol number in the nodes string.
* @return Symbol position in file. * @return Symbol position in file.
*/ */
positionInside(index: number): Position positionInside(index: number): Node.Position
/** /**
* Get the position for a word or an index inside the node. * Get the position for a word or an index inside the node.
@ -465,7 +472,7 @@ export default abstract class Node {
* @param opts Options. * @param opts Options.
* @return Position. * @return Position.
*/ */
positionBy(opts?: Pick<WarningOptions, 'word' | 'index'>): Position positionBy(opts?: Pick<WarningOptions, 'word' | 'index'>): Node.Position
/** /**
* Get the range for a word or start and end index inside the node. * Get the range for a word or start and end index inside the node.
@ -474,5 +481,9 @@ export default abstract class Node {
* @param opts Options. * @param opts Options.
* @return Range. * @return Range.
*/ */
rangeBy(opts?: Pick<WarningOptions, 'word' | 'index' | 'endIndex'>): Range rangeBy(opts?: Pick<WarningOptions, 'word' | 'index' | 'endIndex'>): Node.Range
} }
declare class Node extends Node_ {}
export = Node

View File

@ -1,5 +1,9 @@
import { Parser } from './postcss.js' import { Parser } from './postcss.js'
declare const parse: Parser interface Parse extends Parser {
default: Parse
}
export default parse declare const parse: Parse
export = parse

28
node_modules/postcss/lib/parser.js generated vendored
View File

@ -7,6 +7,19 @@ let AtRule = require('./at-rule')
let Root = require('./root') let Root = require('./root')
let Rule = require('./rule') let Rule = require('./rule')
const SAFE_COMMENT_NEIGHBOR = {
empty: true,
space: true
}
function findLastWithPosition(tokens) {
for (let i = tokens.length - 1; i >= 0; i--) {
let token = tokens[i]
let pos = token[3] || token[2]
if (pos) return pos
}
}
class Parser { class Parser {
constructor(input) { constructor(input) {
this.input = input this.input = input
@ -172,7 +185,10 @@ class Parser {
this.semicolon = true this.semicolon = true
tokens.pop() tokens.pop()
} }
node.source.end = this.getPosition(last[3] || last[2])
node.source.end = this.getPosition(
last[3] || last[2] || findLastWithPosition(tokens)
)
while (tokens[0][0] !== 'word') { while (tokens[0][0] !== 'word') {
if (tokens.length === 1) this.unknownWord(tokens) if (tokens.length === 1) this.unknownWord(tokens)
@ -418,10 +434,14 @@ class Parser {
if (type === 'space' && i === length - 1 && !customProperty) { if (type === 'space' && i === length - 1 && !customProperty) {
clean = false clean = false
} else if (type === 'comment') { } else if (type === 'comment') {
prev = tokens[i - 1] prev = tokens[i - 1] ? tokens[i - 1][0] : 'empty'
next = tokens[i + 1] next = tokens[i + 1] ? tokens[i + 1][0] : 'empty'
if (prev && next && prev[0] !== 'space' && next[0] !== 'space') { if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) {
if (value.slice(-1) === ',') {
clean = false
} else {
value += token[1] value += token[1]
}
} else { } else {
clean = false clean = false
} }

343
node_modules/postcss/lib/postcss.d.ts generated vendored
View File

@ -20,65 +20,24 @@ import Result, { Message } from './result.js'
import Root, { RootProps } from './root.js' import Root, { RootProps } from './root.js'
import Rule, { RuleProps } from './rule.js' import Rule, { RuleProps } from './rule.js'
import CssSyntaxError from './css-syntax-error.js' import CssSyntaxError from './css-syntax-error.js'
import list, { List } from './list.js' import list from './list.js'
import LazyResult from './lazy-result.js' import LazyResult from './lazy-result.js'
import Processor from './processor.js' import Processor from './processor.js'
export {
NodeErrorOptions,
DeclarationProps,
CssSyntaxError,
ContainerProps,
WarningOptions,
DocumentProps,
FilePosition,
CommentProps,
AtRuleProps,
Declaration,
ChildProps,
LazyResult,
ChildNode,
NodeProps,
Processor,
RuleProps,
RootProps,
Container,
Position,
Document,
AnyNode,
Warning,
Message,
Comment,
Source,
AtRule,
Result,
Input,
Node,
list,
Rule,
Root
}
export type SourceMap = SourceMapGenerator & {
toJSON(): RawSourceMap
}
export type Helpers = { result: Result; postcss: Postcss } & Postcss
type DocumentProcessor = ( type DocumentProcessor = (
document: Document, document: Document,
helper: Helpers helper: postcss.Helpers
) => Promise<void> | void ) => Promise<void> | void
type RootProcessor = (root: Root, helper: Helpers) => Promise<void> | void type RootProcessor = (root: Root, helper: postcss.Helpers) => Promise<void> | void
type DeclarationProcessor = ( type DeclarationProcessor = (
decl: Declaration, decl: Declaration,
helper: Helpers helper: postcss.Helpers
) => Promise<void> | void ) => Promise<void> | void
type RuleProcessor = (rule: Rule, helper: Helpers) => Promise<void> | void type RuleProcessor = (rule: Rule, helper: postcss.Helpers) => Promise<void> | void
type AtRuleProcessor = (atRule: AtRule, helper: Helpers) => Promise<void> | void type AtRuleProcessor = (atRule: AtRule, helper: postcss.Helpers) => Promise<void> | void
type CommentProcessor = ( type CommentProcessor = (
comment: Comment, comment: Comment,
helper: Helpers helper: postcss.Helpers
) => Promise<void> | void ) => Promise<void> | void
interface Processors { interface Processors {
@ -188,31 +147,73 @@ interface Processors {
Exit?: RootProcessor Exit?: RootProcessor
} }
export interface Plugin extends Processors { declare namespace postcss {
export {
NodeErrorOptions,
DeclarationProps,
CssSyntaxError,
ContainerProps,
WarningOptions,
DocumentProps,
FilePosition,
CommentProps,
AtRuleProps,
Declaration,
ChildProps,
LazyResult,
ChildNode,
NodeProps,
Processor,
RuleProps,
RootProps,
Container,
Position,
Document,
AnyNode,
Warning,
Message,
Comment,
Source,
AtRule,
Result,
Input,
Node,
list,
Rule,
Root
}
export type SourceMap = SourceMapGenerator & {
toJSON(): RawSourceMap
}
export type Helpers = { result: Result; postcss: Postcss } & Postcss
export interface Plugin extends Processors {
postcssPlugin: string postcssPlugin: string
prepare?: (result: Result) => Processors prepare?: (result: Result) => Processors
} }
export interface PluginCreator<PluginOptions> { export interface PluginCreator<PluginOptions> {
(opts?: PluginOptions): Plugin | Processor (opts?: PluginOptions): Plugin | Processor
postcss: true postcss: true
} }
export interface Transformer extends TransformCallback { export interface Transformer extends TransformCallback {
postcssPlugin: string postcssPlugin: string
postcssVersion: string postcssVersion: string
} }
export interface TransformCallback { export interface TransformCallback {
(root: Root, result: Result): Promise<void> | void (root: Root, result: Result): Promise<void> | void
} }
export interface OldPlugin<T> extends Transformer { export interface OldPlugin<T> extends Transformer {
(opts?: T): Transformer (opts?: T): Transformer
postcss: Transformer postcss: Transformer
} }
export type AcceptedPlugin = export type AcceptedPlugin =
| Plugin | Plugin
| PluginCreator<any> | PluginCreator<any>
| OldPlugin<any> | OldPlugin<any>
@ -222,27 +223,27 @@ export type AcceptedPlugin =
} }
| Processor | Processor
export interface Parser<RootNode = Root | Document> { export interface Parser<RootNode = Root | Document> {
( (
css: string | { toString(): string }, css: string | { toString(): string },
opts?: Pick<ProcessOptions, 'map' | 'from'> opts?: Pick<ProcessOptions, 'map' | 'from'>
): RootNode ): RootNode
} }
export interface Builder { export interface Builder {
(part: string, node?: AnyNode, type?: 'start' | 'end'): void (part: string, node?: AnyNode, type?: 'start' | 'end'): void
} }
export interface Stringifier { export interface Stringifier {
(node: AnyNode, builder: Builder): void (node: AnyNode, builder: Builder): void
} }
export interface JSONHydrator { export interface JSONHydrator {
(data: object[]): Node[] (data: object[]): Node[]
(data: object): Node (data: object): Node
} }
export interface Syntax { export interface Syntax {
/** /**
* Function to generate AST by string. * Function to generate AST by string.
*/ */
@ -252,9 +253,9 @@ export interface Syntax {
* Class to generate string by AST. * Class to generate string by AST.
*/ */
stringify?: Stringifier stringify?: Stringifier
} }
export interface SourceMapOptions { export interface SourceMapOptions {
/** /**
* Indicates that the source map should be embedded in the output CSS * Indicates that the source map should be embedded in the output CSS
* as a Base64-encoded comment. By default, it is `true`. * as a Base64-encoded comment. By default, it is `true`.
@ -308,9 +309,9 @@ export interface SourceMapOptions {
* Use absolute path in generated source map. * Use absolute path in generated source map.
*/ */
absolute?: boolean absolute?: boolean
} }
export interface ProcessOptions { export interface ProcessOptions {
/** /**
* The path of the CSS source file. You should always set `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. * because it is used in source map generation and syntax error messages.
@ -342,10 +343,91 @@ export interface ProcessOptions {
* Source map options * Source map options
*/ */
map?: SourceMapOptions | boolean map?: SourceMapOptions | boolean
}
export type Postcss = typeof postcss
/**
* Default function to convert a node tree into a CSS string.
*/
export let stringify: Stringifier
/**
* Parses source css and returns a new `Root` or `Document` node,
* which contains the source CSS nodes.
*
* ```js
* // 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
* ```
*/
export let parse: Parser<Root>
/**
* Rehydrate a JSON AST (from `Node#toJSON`) back into the AST classes.
*
* ```js
* const json = root.toJSON()
* // save to file, send by network, etc
* const root2 = postcss.fromJSON(json)
* ```
*/
export let fromJSON: JSONHydrator
/**
* Creates a new `Comment` node.
*
* @param defaults Properties for the new node.
* @return New comment node
*/
export function comment(defaults?: CommentProps): Comment
/**
* Creates a new `AtRule` node.
*
* @param defaults Properties for the new node.
* @return New at-rule node.
*/
export function atRule(defaults?: AtRuleProps): AtRule
/**
* Creates a new `Declaration` node.
*
* @param defaults Properties for the new node.
* @return New declaration node.
*/
export function decl(defaults?: DeclarationProps): Declaration
/**
* Creates a new `Rule` node.
*
* @param default Properties for the new node.
* @return New rule node.
*/
export function rule(defaults?: RuleProps): Rule
/**
* Creates a new `Root` node.
*
* @param defaults Properties for the new node.
* @return New root node.
*/
export function root(defaults?: RootProps): Root
/**
* Creates a new `Document` node.
*
* @param defaults Properties for the new node.
* @return New document node.
*/
export function document(defaults?: DocumentProps): Document
export { postcss as default }
} }
export interface Postcss { /**
/**
* Create a new `Processor` instance that will apply `plugins` * Create a new `Processor` instance that will apply `plugins`
* as CSS processors. * as CSS processors.
* *
@ -360,114 +442,7 @@ export interface Postcss {
* @param plugins PostCSS plugins. * @param plugins PostCSS plugins.
* @return Processor to process multiple CSS. * @return Processor to process multiple CSS.
*/ */
(plugins?: AcceptedPlugin[]): Processor declare function postcss(plugins?: postcss.AcceptedPlugin[]): Processor
(...plugins: AcceptedPlugin[]): Processor declare function postcss(...plugins: postcss.AcceptedPlugin[]): Processor
/** export = postcss
* Default function to convert a node tree into a CSS string.
*/
stringify: Stringifier
/**
* Parses source css and returns a new `Root` or `Document` node,
* which contains the source CSS nodes.
*
* ```js
* // 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
* ```
*/
parse: Parser<Root>
/**
* Rehydrate a JSON AST (from `Node#toJSON`) back into the AST classes.
*
* ```js
* const json = root.toJSON()
* // save to file, send by network, etc
* const root2 = postcss.fromJSON(json)
* ```
*/
fromJSON: JSONHydrator
/**
* Contains the `list` module.
*/
list: List
/**
* Creates a new `Comment` node.
*
* @param defaults Properties for the new node.
* @return New comment node
*/
comment(defaults?: CommentProps): Comment
/**
* Creates a new `AtRule` node.
*
* @param defaults Properties for the new node.
* @return New at-rule node.
*/
atRule(defaults?: AtRuleProps): AtRule
/**
* Creates a new `Declaration` node.
*
* @param defaults Properties for the new node.
* @return New declaration node.
*/
decl(defaults?: DeclarationProps): Declaration
/**
* Creates a new `Rule` node.
*
* @param default Properties for the new node.
* @return New rule node.
*/
rule(defaults?: RuleProps): Rule
/**
* Creates a new `Root` node.
*
* @param defaults Properties for the new node.
* @return New root node.
*/
root(defaults?: RootProps): Root
/**
* Creates a new `Document` node.
*
* @param defaults Properties for the new node.
* @return New document node.
*/
document(defaults?: DocumentProps): Document
CssSyntaxError: typeof CssSyntaxError
Declaration: typeof Declaration
Container: typeof Container
Comment: typeof Comment
Warning: typeof Warning
AtRule: typeof AtRule
Result: typeof Result
Input: typeof Input
Rule: typeof Rule
Root: typeof Root
Node: typeof Node
}
export const stringify: Stringifier
export const parse: Parser<Root>
export const fromJSON: JSONHydrator
export const comment: Postcss['comment']
export const atRule: Postcss['atRule']
export const decl: Postcss['decl']
export const rule: Postcss['rule']
export const root: Postcss['root']
declare const postcss: Postcss
export default postcss

View File

@ -27,8 +27,11 @@ function postcss(...plugins) {
} }
postcss.plugin = function plugin(name, initializer) { postcss.plugin = function plugin(name, initializer) {
let warningPrinted = false
function creator(...args) {
// eslint-disable-next-line no-console // eslint-disable-next-line no-console
if (console && console.warn) { if (console && console.warn && !warningPrinted) {
warningPrinted = true
// eslint-disable-next-line no-console // eslint-disable-next-line no-console
console.warn( console.warn(
name + name +
@ -45,7 +48,6 @@ postcss.plugin = function plugin(name, initializer) {
) )
} }
} }
function creator(...args) {
let transformer = initializer(...args) let transformer = initializer(...args)
transformer.postcssPlugin = name transformer.postcssPlugin = name
transformer.postcssVersion = new Processor().version transformer.postcssVersion = new Processor().version

View File

@ -2,6 +2,11 @@ import { SourceMapConsumer } from 'source-map-js'
import { ProcessOptions } from './postcss.js' import { ProcessOptions } from './postcss.js'
declare namespace PreviousMap {
// eslint-disable-next-line @typescript-eslint/no-use-before-define
export { PreviousMap_ as default }
}
/** /**
* Source map information from input CSS. * Source map information from input CSS.
* For example, source map after Sass compiler. * For example, source map after Sass compiler.
@ -14,7 +19,7 @@ import { ProcessOptions } from './postcss.js'
* root.input.map //=> PreviousMap * root.input.map //=> PreviousMap
* ``` * ```
*/ */
export default class PreviousMap { declare class PreviousMap_ {
/** /**
* Was source map inlined by data-uri to input CSS. * Was source map inlined by data-uri to input CSS.
*/ */
@ -70,3 +75,7 @@ export default class PreviousMap {
*/ */
withContent(): boolean withContent(): boolean
} }
declare class PreviousMap extends PreviousMap_ {}
export = PreviousMap

View File

@ -10,6 +10,11 @@ import Result from './result.js'
import Root from './root.js' import Root from './root.js'
import NoWorkResult from './no-work-result.js' import NoWorkResult from './no-work-result.js'
declare namespace Processor {
// eslint-disable-next-line @typescript-eslint/no-use-before-define
export { Processor_ as default }
}
/** /**
* Contains plugins to process CSS. Create one `Processor` instance, * Contains plugins to process CSS. Create one `Processor` instance,
* initialize its plugins, and then use that instance on numerous CSS files. * initialize its plugins, and then use that instance on numerous CSS files.
@ -20,7 +25,7 @@ import NoWorkResult from './no-work-result.js'
* processor.process(css2).then(result => console.log(result.css)) * processor.process(css2).then(result => console.log(result.css))
* ``` * ```
*/ */
export default class Processor { declare class Processor_ {
/** /**
* Current PostCSS version. * Current PostCSS version.
* *
@ -54,7 +59,7 @@ export default class Processor {
* * A plugin in `Plugin` format. * * A plugin in `Plugin` format.
* * A plugin creator function with `pluginCreator.postcss = true`. * * A plugin creator function with `pluginCreator.postcss = true`.
* PostCSS will call this function without argument to get plugin. * PostCSS will call this function without argument to get plugin.
* * A function. PostCSS will pass the function a @{link Root} * * A function. PostCSS will pass the function a {@link Root}
* as the first argument and current `Result` instance * as the first argument and current `Result` instance
* as the second. * as the second.
* * Another `Processor` instance. PostCSS will copy plugins * * Another `Processor` instance. PostCSS will copy plugins
@ -72,7 +77,7 @@ export default class Processor {
* ``` * ```
* *
* @param plugin PostCSS plugin or `Processor` with plugins. * @param plugin PostCSS plugin or `Processor` with plugins.
* @return {Processes} Current processor to make methods chain. * @return Current processor to make methods chain.
*/ */
use(plugin: AcceptedPlugin): this use(plugin: AcceptedPlugin): this
@ -90,7 +95,7 @@ export default class Processor {
* ``` * ```
* *
* @param css String with input CSS or any object with a `toString()` method, * @param css String with input CSS or any object with a `toString()` method,
* like a Buffer. Optionally, senda `Result` instance * like a Buffer. Optionally, send a `Result` instance
* and the processor will take the `Root` from it. * and the processor will take the `Root` from it.
* @param opts Options. * @param opts Options.
* @return Promise proxy. * @return Promise proxy.
@ -100,3 +105,7 @@ export default class Processor {
options?: ProcessOptions options?: ProcessOptions
): LazyResult | NoWorkResult ): LazyResult | NoWorkResult
} }
declare class Processor extends Processor_ {}
export = Processor

View File

@ -7,7 +7,7 @@ let Root = require('./root')
class Processor { class Processor {
constructor(plugins = []) { constructor(plugins = []) {
this.version = '8.4.6' this.version = '8.4.23'
this.plugins = this.normalize(plugins) this.plugins = this.normalize(plugins)
} }

24
node_modules/postcss/lib/result.d.ts generated vendored
View File

@ -11,7 +11,8 @@ import {
} from './postcss.js' } from './postcss.js'
import Processor from './processor.js' import Processor from './processor.js'
export interface Message { declare namespace Result {
export interface Message {
/** /**
* Message type. * Message type.
*/ */
@ -23,9 +24,9 @@ export interface Message {
plugin?: string plugin?: string
[others: string]: any [others: string]: any
} }
export interface ResultOptions extends ProcessOptions { export interface ResultOptions extends ProcessOptions {
/** /**
* The CSS node that was the source of the warning. * The CSS node that was the source of the warning.
*/ */
@ -36,6 +37,11 @@ export interface ResultOptions extends ProcessOptions {
* automatically with `Plugin#postcssPlugin` value. * automatically with `Plugin#postcssPlugin` value.
*/ */
plugin?: string plugin?: string
}
// eslint-disable-next-line @typescript-eslint/no-use-before-define
export { Result_ as default }
} }
/** /**
@ -54,7 +60,7 @@ export interface ResultOptions extends ProcessOptions {
* const result2 = postcss.parse(css).toResult() * const result2 = postcss.parse(css).toResult()
* ``` * ```
*/ */
export default class Result { declare class Result_ {
/** /**
* The Processor instance used for this transformation. * The Processor instance used for this transformation.
* *
@ -86,7 +92,7 @@ export default class Result {
* } * }
* ``` * ```
*/ */
messages: Message[] messages: Result.Message[]
/** /**
* Root node after all transformations. * Root node after all transformations.
@ -105,7 +111,7 @@ export default class Result {
* root.toResult(opts).opts === opts * root.toResult(opts).opts === opts
* ``` * ```
*/ */
opts: ResultOptions opts: Result.ResultOptions
/** /**
* A CSS string representing of `Result#root`. * A CSS string representing of `Result#root`.
@ -142,7 +148,7 @@ export default class Result {
* @param root Root node after all transformations. * @param root Root node after all transformations.
* @param opts Options from the `Processor#process` or `Root#toResult`. * @param opts Options from the `Processor#process` or `Root#toResult`.
*/ */
constructor(processor: Processor, root: Root | Document, opts: ResultOptions) constructor(processor: Processor, root: Root | Document, opts: Result.ResultOptions)
/** /**
* An alias for the `Result#css` property. * An alias for the `Result#css` property.
@ -194,3 +200,7 @@ export default class Result {
*/ */
warnings(): Warning[] warnings(): Warning[]
} }
declare class Result extends Result_ {}
export = Result

23
node_modules/postcss/lib/root.d.ts generated vendored
View File

@ -3,7 +3,8 @@ import Document from './document.js'
import { ProcessOptions } from './postcss.js' import { ProcessOptions } from './postcss.js'
import Result from './result.js' import Result from './result.js'
interface RootRaws extends Record<string, any> { declare namespace Root {
export interface RootRaws extends Record<string, any> {
/** /**
* The space symbols after the last child to the end of file. * The space symbols after the last child to the end of file.
*/ */
@ -29,14 +30,18 @@ interface RootRaws extends Record<string, any> {
* Is the last child has an (optional) semicolon. * Is the last child has an (optional) semicolon.
*/ */
semicolon?: boolean semicolon?: boolean
} }
export interface RootProps extends ContainerProps { export interface RootProps extends ContainerProps {
/** /**
* Information used to generate byte-to-byte equal node string * Information used to generate byte-to-byte equal node string
* as it was in the origin input. * as it was in the origin input.
* */ * */
raws?: RootRaws raws?: RootRaws
}
// eslint-disable-next-line @typescript-eslint/no-use-before-define
export { Root_ as default }
} }
/** /**
@ -48,10 +53,10 @@ export interface RootProps extends ContainerProps {
* root.nodes.length //=> 2 * root.nodes.length //=> 2
* ``` * ```
*/ */
export default class Root extends Container { declare class Root_ extends Container {
type: 'root' type: 'root'
parent: Document | undefined parent: Document | undefined
raws: RootRaws raws: Root.RootRaws
/** /**
* Returns a `Result` instance representing the roots CSS. * Returns a `Result` instance representing the roots CSS.
@ -68,6 +73,10 @@ export default class Root extends Container {
*/ */
toResult(options?: ProcessOptions): Result toResult(options?: ProcessOptions): Result
constructor(defaults?: RootProps) constructor(defaults?: Root.RootProps)
assign(overrides: object | RootProps): this assign(overrides: object | Root.RootProps): this
} }
declare class Root extends Root_ {}
export = Root

2
node_modules/postcss/lib/root.js generated vendored
View File

@ -57,3 +57,5 @@ Root.registerProcessor = dependant => {
module.exports = Root module.exports = Root
Root.default = Root Root.default = Root
Container.registerRoot(Root)

Some files were not shown because too many files have changed in this diff Show More