Don't track node_modules
This commit is contained in:
parent
97d72958dd
commit
b5a9ee4613
10060 changed files with 1 additions and 1345979 deletions
1
syntax/vscode/.gitignore
vendored
1
syntax/vscode/.gitignore
vendored
|
|
@ -1,3 +1,4 @@
|
|||
/test.stpl
|
||||
*.vsix
|
||||
/dist
|
||||
/node_modules
|
||||
|
|
|
|||
1
syntax/vscode/node_modules/.bin/_mocha
generated
vendored
1
syntax/vscode/node_modules/.bin/_mocha
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../mocha/bin/_mocha
|
||||
1
syntax/vscode/node_modules/.bin/acorn
generated
vendored
1
syntax/vscode/node_modules/.bin/acorn
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../acorn/bin/acorn
|
||||
1
syntax/vscode/node_modules/.bin/c8
generated
vendored
1
syntax/vscode/node_modules/.bin/c8
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../c8/bin/c8.js
|
||||
1
syntax/vscode/node_modules/.bin/esbuild
generated
vendored
1
syntax/vscode/node_modules/.bin/esbuild
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../esbuild/bin/esbuild
|
||||
1
syntax/vscode/node_modules/.bin/eslint
generated
vendored
1
syntax/vscode/node_modules/.bin/eslint
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../eslint/bin/eslint.js
|
||||
1
syntax/vscode/node_modules/.bin/flat
generated
vendored
1
syntax/vscode/node_modules/.bin/flat
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../flat/cli.js
|
||||
1
syntax/vscode/node_modules/.bin/glob
generated
vendored
1
syntax/vscode/node_modules/.bin/glob
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../glob/dist/esm/bin.mjs
|
||||
1
syntax/vscode/node_modules/.bin/he
generated
vendored
1
syntax/vscode/node_modules/.bin/he
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../he/bin/he
|
||||
1
syntax/vscode/node_modules/.bin/js-yaml
generated
vendored
1
syntax/vscode/node_modules/.bin/js-yaml
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../js-yaml/bin/js-yaml.js
|
||||
1
syntax/vscode/node_modules/.bin/mocha
generated
vendored
1
syntax/vscode/node_modules/.bin/mocha
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../mocha/bin/mocha.js
|
||||
1
syntax/vscode/node_modules/.bin/node-which
generated
vendored
1
syntax/vscode/node_modules/.bin/node-which
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../which/bin/node-which
|
||||
1
syntax/vscode/node_modules/.bin/npm-run-all
generated
vendored
1
syntax/vscode/node_modules/.bin/npm-run-all
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../npm-run-all/bin/npm-run-all/index.js
|
||||
1
syntax/vscode/node_modules/.bin/pidtree
generated
vendored
1
syntax/vscode/node_modules/.bin/pidtree
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../pidtree/bin/pidtree.js
|
||||
1
syntax/vscode/node_modules/.bin/prettier
generated
vendored
1
syntax/vscode/node_modules/.bin/prettier
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../prettier/bin/prettier.cjs
|
||||
1
syntax/vscode/node_modules/.bin/resolve
generated
vendored
1
syntax/vscode/node_modules/.bin/resolve
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../resolve/bin/resolve
|
||||
1
syntax/vscode/node_modules/.bin/rimraf
generated
vendored
1
syntax/vscode/node_modules/.bin/rimraf
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../rimraf/bin.js
|
||||
1
syntax/vscode/node_modules/.bin/run-p
generated
vendored
1
syntax/vscode/node_modules/.bin/run-p
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../npm-run-all/bin/run-p/index.js
|
||||
1
syntax/vscode/node_modules/.bin/run-s
generated
vendored
1
syntax/vscode/node_modules/.bin/run-s
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../npm-run-all/bin/run-s/index.js
|
||||
1
syntax/vscode/node_modules/.bin/semver
generated
vendored
1
syntax/vscode/node_modules/.bin/semver
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../semver/bin/semver.js
|
||||
1
syntax/vscode/node_modules/.bin/tsc
generated
vendored
1
syntax/vscode/node_modules/.bin/tsc
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../typescript/bin/tsc
|
||||
1
syntax/vscode/node_modules/.bin/tsserver
generated
vendored
1
syntax/vscode/node_modules/.bin/tsserver
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../typescript/bin/tsserver
|
||||
1
syntax/vscode/node_modules/.bin/vscode-test
generated
vendored
1
syntax/vscode/node_modules/.bin/vscode-test
generated
vendored
|
|
@ -1 +0,0 @@
|
|||
../@vscode/test-cli/out/bin.mjs
|
||||
4752
syntax/vscode/node_modules/.package-lock.json
generated
vendored
4752
syntax/vscode/node_modules/.package-lock.json
generated
vendored
File diff suppressed because it is too large
Load diff
9
syntax/vscode/node_modules/@bcoe/v8-coverage/.editorconfig
generated
vendored
9
syntax/vscode/node_modules/@bcoe/v8-coverage/.editorconfig
generated
vendored
|
|
@ -1,9 +0,0 @@
|
|||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
end_of_line = lf
|
||||
indent_style = space
|
||||
indent_size = 2
|
||||
insert_final_newline = true
|
||||
trim_trailing_whitespace = true
|
||||
2
syntax/vscode/node_modules/@bcoe/v8-coverage/.gitattributes
generated
vendored
2
syntax/vscode/node_modules/@bcoe/v8-coverage/.gitattributes
generated
vendored
|
|
@ -1,2 +0,0 @@
|
|||
# Enforce `lf` for text files (even on Windows)
|
||||
text eol=lf
|
||||
250
syntax/vscode/node_modules/@bcoe/v8-coverage/CHANGELOG.md
generated
vendored
250
syntax/vscode/node_modules/@bcoe/v8-coverage/CHANGELOG.md
generated
vendored
|
|
@ -1,250 +0,0 @@
|
|||
## Next
|
||||
|
||||
- **[Breaking change]** Replace `OutModules` enum by custom compiler option `mjsModule`.
|
||||
- **[Breaking change]** Drop support for Pug, Sass, Angular & Webpack.
|
||||
- **[Feature]** Expose custom registries for each target.
|
||||
- **[Feature]** Add `dist.tscOptions` for `lib` target to override options for
|
||||
distribution builds.
|
||||
- **[Feature]** Native ESM tests with mocha.
|
||||
- **[Fix]** Disable deprecated TsLint rules from the default config
|
||||
- **[Fix]** Remove use of experimental `fs/promises` module.
|
||||
- **[Internal]** Fix continuous deployment script (stop confusing PRs to master
|
||||
with push to master)
|
||||
- **[Internal]** Update dependencies
|
||||
- **[Internal]** Fix deprecated Mocha types.
|
||||
|
||||
## 0.17.1 (2017-05-03)
|
||||
|
||||
- **[Fix]** Update dependencies, remove `std/esm` warning.
|
||||
|
||||
## 0.17.0 (2017-04-22)
|
||||
|
||||
- **[Breaking change]** Update dependencies. Use `esm` instead of `@std/esm`, update Typescript to `2.8.3`.
|
||||
- **[Fix]** Fix Node processes spawn on Windows (Mocha, Nyc)
|
||||
|
||||
## 0.16.2 (2017-02-07)
|
||||
|
||||
- **[Fix]** Fix Typedoc generation: use `tsconfig.json` generated for the lib.
|
||||
- **[Fix]** Write source map for `.mjs` files
|
||||
- **[Fix]** Copy sources to `_src` when publishing a lib (#87).
|
||||
- **[Internal]** Restore continuous deployment of documentation.
|
||||
|
||||
## 0.16.1 (2017-01-20)
|
||||
|
||||
- **[Feature]** Support `mocha` tests on `.mjs` files (using `@std/esm`). Enabled by default
|
||||
if `outModules` is configured to emit `.mjs`. **You currently need to add
|
||||
`"@std/esm": {"esm": "cjs"}` to your `package.json`.**
|
||||
|
||||
## 0.16.0 (2017-01-09)
|
||||
|
||||
- **[Breaking change]** Enable `allowSyntheticDefaultImports` and `esModuleInterop` by default
|
||||
- **[Fix]** Allow deep module imports in default Tslint rules
|
||||
- **[Fix]** Drop dependency on deprecated `gulp-util`
|
||||
- **[Internal]** Replace most custom typings by types from `@types`
|
||||
|
||||
## 0.15.8 (2017-12-05)
|
||||
|
||||
- **[Fix]** Exit with non-zero code if command tested with coverage fails
|
||||
- **[Fix]** Solve duplicated error message when using the `run` mocha task.
|
||||
- **[Fix]** Exit with non-zero code when building scripts fails.
|
||||
|
||||
## 0.15.7 (2017-11-29)
|
||||
|
||||
- **[Feature]** Add `coverage` task to `mocha` target, use it for the default task
|
||||
|
||||
## 0.15.6 (2017-11-29)
|
||||
|
||||
- **[Fix]** Fix path to source in source maps.
|
||||
- **[Fix]** Disable `number-literal-format` in default Tslint rules. It enforced uppercase for hex.
|
||||
- **[Internal]** Enable integration with Greenkeeper.
|
||||
- **[Internal]** Enable integration with Codecov
|
||||
- **[Internal]** Enable code coverage
|
||||
|
||||
## 0.15.5 (2017-11-10)
|
||||
|
||||
- **[Feature]** Enable the following TsLint rules: `no-duplicate-switch-case`, `no-implicit-dependencies`,
|
||||
`no-return-await`
|
||||
- **[Internal]** Update self-dependency `0.15.4`, this restores the README on _npm_
|
||||
- **[Internal]** Add homepage and author fields to package.json
|
||||
|
||||
## 0.15.4 (2017-11-10)
|
||||
|
||||
- **[Fix]** Add support for custom additional copy for distribution builds. [#49](https://github.com/demurgos/turbo-gulp/issues/49)
|
||||
- **[Internal]** Update self-dependency to `turbo-gulp`
|
||||
- **[Internal]** Add link to license in `README.md`
|
||||
|
||||
## 0.15.3 (2017-11-09)
|
||||
|
||||
**Rename to `turbo-gulp`**. This package was previously named `demurgos-web-build-tools`.
|
||||
This version is fully compatible: you can just change the name of your dependency.
|
||||
|
||||
## 0.15.2 (2017-11-09)
|
||||
|
||||
**The package is prepared to be renamed `turbo-gulp`.**
|
||||
This is the last version released as `demurgos-web-build-tools`.
|
||||
|
||||
- **[Feature]** Add support for watch mode for library targets.
|
||||
- **[Fix]** Disable experimental support for `*.mjs` by default.
|
||||
- **[Fix]** Do not emit duplicate TS errors
|
||||
|
||||
## 0.15.1 (2017-10-19)
|
||||
|
||||
- **[Feature]** Add experimental support for `*.mjs` files
|
||||
- **[Fix]** Fix support of releases from Continuous Deployment using Travis.
|
||||
|
||||
## 0.15.0 (2017-10-18)
|
||||
|
||||
- **[Fix]** Add error handling for git deployment.
|
||||
- **[Internal]** Enable continuous deployment of the `master` branch.
|
||||
|
||||
## 0.15.0-beta.11 (2017-08-29)
|
||||
|
||||
- **[Feature]** Add `LibTarget.dist.copySrc` option to disable copy of source files to the dist directory.
|
||||
This allows to prevent issues with missing custom typings.
|
||||
- **[Fix]** Mark `deploy` property of `LibTarget.typedoc` as optional.
|
||||
- **[Internal]** Update self-dependency to `v0.15.0-beta.10`.
|
||||
|
||||
## 0.15.0-beta.10 (2017-08-28)
|
||||
|
||||
- **[Breaking]** Update Tslint rules to use `tslint@5.7.0`.
|
||||
- **[Fix]** Set `allowJs` to false in default TSC options.
|
||||
- **[Fix]** Do not pipe output of git commands to stdout.
|
||||
- **[Internal]** Update self-dependency to `v0.15.0-beta.9`.
|
||||
|
||||
## 0.15.0-beta.9 (2017-08-28)
|
||||
|
||||
- **[Breaking]** Drop old-style `test` target.
|
||||
- **[Breaking]** Drop old-style `node` target.
|
||||
- **[Feature]** Add `mocha` target to run tests in `spec.ts` files.
|
||||
- **[Feature]** Add `node` target to build and run top-level Node applications.
|
||||
- **[Feature]** Provide `generateNodeTasks`, `generateLibTasks` and `generateMochaTasks` functions.
|
||||
They create the tasks but do not register them.
|
||||
- **[Fix]** Run `clean` before `dist`, if defined.
|
||||
- **[Fix]** Run `dist` before `publish`.
|
||||
|
||||
## 0.15.0-beta.8 (2017-08-26)
|
||||
|
||||
- **[Fix]** Remove auth token and registry options for `<lib>:dist:publish`. It is better served
|
||||
by configuring the environment appropriately.
|
||||
|
||||
## 0.15.0-beta.7 (2017-08-26)
|
||||
|
||||
- **[Feature]** Add `clean` task to `lib` targets.
|
||||
- **[Fix]** Ensure that `gitHead` is defined when publishing a package to npm.
|
||||
|
||||
## 0.15.0-beta.6 (2017-08-22)
|
||||
|
||||
- **[Feature]** Add support for Typedoc deployment to a remote git branch (such as `gh-pages`)
|
||||
- **[Feature]** Add support for `copy` tasks in new library target.
|
||||
- **[Fix]** Resolve absolute paths when compiling scripts with custom typings.
|
||||
|
||||
## 0.15.0-beta.5 (2017-08-14)
|
||||
|
||||
- **[Fix]** Fix package entry for the main module.
|
||||
|
||||
## 0.15.0-beta.4 (2017-08-14)
|
||||
|
||||
- **[Breaking]** Drop ES5 build exposed to browsers with the `browser` field in `package.json`.
|
||||
- **[Feature]** Introduce first new-style target (`LibTarget`). it supports typedoc generation, dev builds and
|
||||
simple distribution.
|
||||
|
||||
## 0.15.0-beta.3 (2017-08-11)
|
||||
|
||||
- **[Breaking]** Update default lib target to use target-specific `srcDir`.
|
||||
- **[Feature]** Allow to complete `srcDir` in target.
|
||||
- **[Feature]** Add experimental library distribution supporting deep requires.
|
||||
|
||||
## 0.15.0-beta.2 (2017-08-10)
|
||||
|
||||
- **[Fix]** Default to CommonJS for project tsconfig.json
|
||||
- **[Fix]** Add Typescript configuration for default project.
|
||||
- **[Internal]** Update self-dependency to `0.15.0-beta.1`.
|
||||
|
||||
## 0.15.0-beta.1 (2017-08-09)
|
||||
|
||||
- **[Feature]** Support typed TSLint rules.
|
||||
- **[Internal]** Update gulpfile.ts to use build tools `0.15.0-beta.0`.
|
||||
- **[Fix]** Fix regressions caused by `0.15.0-beta.0` (missing type definition).
|
||||
|
||||
## 0.15.0-beta.0 (2017-08-09)
|
||||
|
||||
- **[Breaking]** Expose option interfaces directly in the main module instead of the `config` namespace.
|
||||
- **[Breaking]** Rename `DEFAULT_PROJECT_OPTIONS` to `DEFAULT_PROJECT`.
|
||||
- **[Feature]** Emit project-wide `tsconfig.json`.
|
||||
- **[Internal]** Convert gulpfile to Typescript, use `ts-node` to run it.
|
||||
- **[Internal]** Update dependencies
|
||||
|
||||
## 0.14.3 (2017-07-16)
|
||||
|
||||
- **[Feature]** Add `:lint:fix` project task to fix some lint errors.
|
||||
|
||||
## 0.14.2 (2017-07-10)
|
||||
|
||||
- **[Internal]** Update dependencies: add `package-lock.json` and update `tslint`.
|
||||
|
||||
## 0.14.1 (2017-06-17)
|
||||
|
||||
- **[Internal]** Update dependencies.
|
||||
- **[Internal]** Drop dependency on _Bluebird_.
|
||||
- **[Internal]** Drop dependency on _typings_.
|
||||
|
||||
## 0.14.0 (2017-05-10)
|
||||
|
||||
- **[Breaking]** Enforce trailing commas by default for multiline objects
|
||||
- **[Feature]** Allow bump from either `master` or a branch with the same name as the tag (exampel: `v1.2.3`)
|
||||
- **[Feature]** Support TSLint 8, allow to extend the default rules
|
||||
- **[Patch]** Allow mergeable namespaces
|
||||
|
||||
# 0.13.1
|
||||
|
||||
- **[Patch]** Allow namespaces in the default TS-Lint config
|
||||
|
||||
# 0.13.0
|
||||
|
||||
- **[Breaking]** Major overhaul of the angular target. The server build no longer depends on the client.
|
||||
- **[Breaking]** Update to `gulp@4` (from `gulp@3`)
|
||||
- **[Breaking]** Update to `tslint@7` (from `tslint@6`), add stricter default rules
|
||||
- **[Breaking]** Update signature of targetGenerators and project tasks: it only uses
|
||||
`ProjectOptions` and `Target` now, the additional options are embedded in those two objects.
|
||||
- **[Breaking]** Remove `:install`, `:instal:npm` and `:install:typings`. Use the `prepare` script in
|
||||
your `package.json` file instead.
|
||||
- Add `:tslint.json` project task to generate configuration for `tslint`
|
||||
- Add first class support for processing of `pug` and `sass` files, similar to `copy`
|
||||
- Implement end-to-end tests
|
||||
- Enable `emitDecoratorMetadata` in default typescript options.
|
||||
- Allow configuration of `:lint` with the `tslintOptions` property of the project configuration.
|
||||
- Add `<target>:watch` tasks for incremental builds.
|
||||
|
||||
# 0.12.3
|
||||
|
||||
- Support `templateUrl` and `styleUrls` in angular modules.
|
||||
|
||||
# 0.12.2
|
||||
|
||||
- Add `<target>:build:copy` task. It copies user-defined files.
|
||||
|
||||
# 0.12.1
|
||||
|
||||
- Fix `<target>:watch` task.
|
||||
|
||||
# 0.12.0
|
||||
|
||||
- **[Breaking]**: Change naming convention for tasks. The names primary part is
|
||||
the target, then the action (`lib:build` instead of `build:lib`) to group
|
||||
the tasks per target.
|
||||
- **[Breaking]**: Use `typeRoots` instead of `definitions` in configuration to
|
||||
specify Typescript definition files.
|
||||
- Generate `tsconfig.json` file (mainly for editors)
|
||||
- Implement the `test` target to run unit-tests with `mocha`.
|
||||
|
||||
# 0.11.2
|
||||
|
||||
- Target `angular`: Add `build:<target>:assets:sass` for `.scss` files (Sassy CSS)
|
||||
|
||||
# 0.11.1
|
||||
|
||||
- Rename project to `web-build-tools` (`demurgos-web-build-tools` on _npm_)
|
||||
- Target `angular`: Add `build:<target>:assets`, `build:<target>:pug` and `build:<target>:static`.
|
||||
- Update `gulp-typescript`: solve error message during compilation
|
||||
- Targets `node` and `angular`: `build:<target>:scripts` now include in-lined source maps
|
||||
- Target `node`: `watch:<target>` to support incremental builds
|
||||
21
syntax/vscode/node_modules/@bcoe/v8-coverage/LICENSE.md
generated
vendored
21
syntax/vscode/node_modules/@bcoe/v8-coverage/LICENSE.md
generated
vendored
|
|
@ -1,21 +0,0 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright © 2015-2017 Charles Samborski
|
||||
|
||||
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.
|
||||
14
syntax/vscode/node_modules/@bcoe/v8-coverage/LICENSE.txt
generated
vendored
14
syntax/vscode/node_modules/@bcoe/v8-coverage/LICENSE.txt
generated
vendored
|
|
@ -1,14 +0,0 @@
|
|||
Copyright (c) 2017, Contributors
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software
|
||||
for any purpose with or without fee is hereby granted, provided
|
||||
that the above copyright notice and this permission notice
|
||||
appear in all copies.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES
|
||||
OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE
|
||||
LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
|
||||
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
11
syntax/vscode/node_modules/@bcoe/v8-coverage/README.md
generated
vendored
11
syntax/vscode/node_modules/@bcoe/v8-coverage/README.md
generated
vendored
|
|
@ -1,11 +0,0 @@
|
|||
# V8 Coverage
|
||||
|
||||
[](https://www.npmjs.com/package/@c88/v8-coverage)
|
||||
[](https://github.com/demurgos/v8-coverage)
|
||||
[](https://travis-ci.org/demurgos/v8-coverage)
|
||||
[](https://ci.appveyor.com/project/demurgos/v8-coverage)
|
||||
[](https://codecov.io/gh/demurgos/v8-coverage)
|
||||
|
||||
## License
|
||||
|
||||
[MIT License](./LICENSE.md)
|
||||
250
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/CHANGELOG.md
generated
vendored
250
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/CHANGELOG.md
generated
vendored
|
|
@ -1,250 +0,0 @@
|
|||
## Next
|
||||
|
||||
- **[Breaking change]** Replace `OutModules` enum by custom compiler option `mjsModule`.
|
||||
- **[Breaking change]** Drop support for Pug, Sass, Angular & Webpack.
|
||||
- **[Feature]** Expose custom registries for each target.
|
||||
- **[Feature]** Add `dist.tscOptions` for `lib` target to override options for
|
||||
distribution builds.
|
||||
- **[Feature]** Native ESM tests with mocha.
|
||||
- **[Fix]** Disable deprecated TsLint rules from the default config
|
||||
- **[Fix]** Remove use of experimental `fs/promises` module.
|
||||
- **[Internal]** Fix continuous deployment script (stop confusing PRs to master
|
||||
with push to master)
|
||||
- **[Internal]** Update dependencies
|
||||
- **[Internal]** Fix deprecated Mocha types.
|
||||
|
||||
## 0.17.1 (2017-05-03)
|
||||
|
||||
- **[Fix]** Update dependencies, remove `std/esm` warning.
|
||||
|
||||
## 0.17.0 (2017-04-22)
|
||||
|
||||
- **[Breaking change]** Update dependencies. Use `esm` instead of `@std/esm`, update Typescript to `2.8.3`.
|
||||
- **[Fix]** Fix Node processes spawn on Windows (Mocha, Nyc)
|
||||
|
||||
## 0.16.2 (2017-02-07)
|
||||
|
||||
- **[Fix]** Fix Typedoc generation: use `tsconfig.json` generated for the lib.
|
||||
- **[Fix]** Write source map for `.mjs` files
|
||||
- **[Fix]** Copy sources to `_src` when publishing a lib (#87).
|
||||
- **[Internal]** Restore continuous deployment of documentation.
|
||||
|
||||
## 0.16.1 (2017-01-20)
|
||||
|
||||
- **[Feature]** Support `mocha` tests on `.mjs` files (using `@std/esm`). Enabled by default
|
||||
if `outModules` is configured to emit `.mjs`. **You currently need to add
|
||||
`"@std/esm": {"esm": "cjs"}` to your `package.json`.**
|
||||
|
||||
## 0.16.0 (2017-01-09)
|
||||
|
||||
- **[Breaking change]** Enable `allowSyntheticDefaultImports` and `esModuleInterop` by default
|
||||
- **[Fix]** Allow deep module imports in default Tslint rules
|
||||
- **[Fix]** Drop dependency on deprecated `gulp-util`
|
||||
- **[Internal]** Replace most custom typings by types from `@types`
|
||||
|
||||
## 0.15.8 (2017-12-05)
|
||||
|
||||
- **[Fix]** Exit with non-zero code if command tested with coverage fails
|
||||
- **[Fix]** Solve duplicated error message when using the `run` mocha task.
|
||||
- **[Fix]** Exit with non-zero code when building scripts fails.
|
||||
|
||||
## 0.15.7 (2017-11-29)
|
||||
|
||||
- **[Feature]** Add `coverage` task to `mocha` target, use it for the default task
|
||||
|
||||
## 0.15.6 (2017-11-29)
|
||||
|
||||
- **[Fix]** Fix path to source in source maps.
|
||||
- **[Fix]** Disable `number-literal-format` in default Tslint rules. It enforced uppercase for hex.
|
||||
- **[Internal]** Enable integration with Greenkeeper.
|
||||
- **[Internal]** Enable integration with Codecov
|
||||
- **[Internal]** Enable code coverage
|
||||
|
||||
## 0.15.5 (2017-11-10)
|
||||
|
||||
- **[Feature]** Enable the following TsLint rules: `no-duplicate-switch-case`, `no-implicit-dependencies`,
|
||||
`no-return-await`
|
||||
- **[Internal]** Update self-dependency `0.15.4`, this restores the README on _npm_
|
||||
- **[Internal]** Add homepage and author fields to package.json
|
||||
|
||||
## 0.15.4 (2017-11-10)
|
||||
|
||||
- **[Fix]** Add support for custom additional copy for distribution builds. [#49](https://github.com/demurgos/turbo-gulp/issues/49)
|
||||
- **[Internal]** Update self-dependency to `turbo-gulp`
|
||||
- **[Internal]** Add link to license in `README.md`
|
||||
|
||||
## 0.15.3 (2017-11-09)
|
||||
|
||||
**Rename to `turbo-gulp`**. This package was previously named `demurgos-web-build-tools`.
|
||||
This version is fully compatible: you can just change the name of your dependency.
|
||||
|
||||
## 0.15.2 (2017-11-09)
|
||||
|
||||
**The package is prepared to be renamed `turbo-gulp`.**
|
||||
This is the last version released as `demurgos-web-build-tools`.
|
||||
|
||||
- **[Feature]** Add support for watch mode for library targets.
|
||||
- **[Fix]** Disable experimental support for `*.mjs` by default.
|
||||
- **[Fix]** Do not emit duplicate TS errors
|
||||
|
||||
## 0.15.1 (2017-10-19)
|
||||
|
||||
- **[Feature]** Add experimental support for `*.mjs` files
|
||||
- **[Fix]** Fix support of releases from Continuous Deployment using Travis.
|
||||
|
||||
## 0.15.0 (2017-10-18)
|
||||
|
||||
- **[Fix]** Add error handling for git deployment.
|
||||
- **[Internal]** Enable continuous deployment of the `master` branch.
|
||||
|
||||
## 0.15.0-beta.11 (2017-08-29)
|
||||
|
||||
- **[Feature]** Add `LibTarget.dist.copySrc` option to disable copy of source files to the dist directory.
|
||||
This allows to prevent issues with missing custom typings.
|
||||
- **[Fix]** Mark `deploy` property of `LibTarget.typedoc` as optional.
|
||||
- **[Internal]** Update self-dependency to `v0.15.0-beta.10`.
|
||||
|
||||
## 0.15.0-beta.10 (2017-08-28)
|
||||
|
||||
- **[Breaking]** Update Tslint rules to use `tslint@5.7.0`.
|
||||
- **[Fix]** Set `allowJs` to false in default TSC options.
|
||||
- **[Fix]** Do not pipe output of git commands to stdout.
|
||||
- **[Internal]** Update self-dependency to `v0.15.0-beta.9`.
|
||||
|
||||
## 0.15.0-beta.9 (2017-08-28)
|
||||
|
||||
- **[Breaking]** Drop old-style `test` target.
|
||||
- **[Breaking]** Drop old-style `node` target.
|
||||
- **[Feature]** Add `mocha` target to run tests in `spec.ts` files.
|
||||
- **[Feature]** Add `node` target to build and run top-level Node applications.
|
||||
- **[Feature]** Provide `generateNodeTasks`, `generateLibTasks` and `generateMochaTasks` functions.
|
||||
They create the tasks but do not register them.
|
||||
- **[Fix]** Run `clean` before `dist`, if defined.
|
||||
- **[Fix]** Run `dist` before `publish`.
|
||||
|
||||
## 0.15.0-beta.8 (2017-08-26)
|
||||
|
||||
- **[Fix]** Remove auth token and registry options for `<lib>:dist:publish`. It is better served
|
||||
by configuring the environment appropriately.
|
||||
|
||||
## 0.15.0-beta.7 (2017-08-26)
|
||||
|
||||
- **[Feature]** Add `clean` task to `lib` targets.
|
||||
- **[Fix]** Ensure that `gitHead` is defined when publishing a package to npm.
|
||||
|
||||
## 0.15.0-beta.6 (2017-08-22)
|
||||
|
||||
- **[Feature]** Add support for Typedoc deployment to a remote git branch (such as `gh-pages`)
|
||||
- **[Feature]** Add support for `copy` tasks in new library target.
|
||||
- **[Fix]** Resolve absolute paths when compiling scripts with custom typings.
|
||||
|
||||
## 0.15.0-beta.5 (2017-08-14)
|
||||
|
||||
- **[Fix]** Fix package entry for the main module.
|
||||
|
||||
## 0.15.0-beta.4 (2017-08-14)
|
||||
|
||||
- **[Breaking]** Drop ES5 build exposed to browsers with the `browser` field in `package.json`.
|
||||
- **[Feature]** Introduce first new-style target (`LibTarget`). it supports typedoc generation, dev builds and
|
||||
simple distribution.
|
||||
|
||||
## 0.15.0-beta.3 (2017-08-11)
|
||||
|
||||
- **[Breaking]** Update default lib target to use target-specific `srcDir`.
|
||||
- **[Feature]** Allow to complete `srcDir` in target.
|
||||
- **[Feature]** Add experimental library distribution supporting deep requires.
|
||||
|
||||
## 0.15.0-beta.2 (2017-08-10)
|
||||
|
||||
- **[Fix]** Default to CommonJS for project tsconfig.json
|
||||
- **[Fix]** Add Typescript configuration for default project.
|
||||
- **[Internal]** Update self-dependency to `0.15.0-beta.1`.
|
||||
|
||||
## 0.15.0-beta.1 (2017-08-09)
|
||||
|
||||
- **[Feature]** Support typed TSLint rules.
|
||||
- **[Internal]** Update gulpfile.ts to use build tools `0.15.0-beta.0`.
|
||||
- **[Fix]** Fix regressions caused by `0.15.0-beta.0` (missing type definition).
|
||||
|
||||
## 0.15.0-beta.0 (2017-08-09)
|
||||
|
||||
- **[Breaking]** Expose option interfaces directly in the main module instead of the `config` namespace.
|
||||
- **[Breaking]** Rename `DEFAULT_PROJECT_OPTIONS` to `DEFAULT_PROJECT`.
|
||||
- **[Feature]** Emit project-wide `tsconfig.json`.
|
||||
- **[Internal]** Convert gulpfile to Typescript, use `ts-node` to run it.
|
||||
- **[Internal]** Update dependencies
|
||||
|
||||
## 0.14.3 (2017-07-16)
|
||||
|
||||
- **[Feature]** Add `:lint:fix` project task to fix some lint errors.
|
||||
|
||||
## 0.14.2 (2017-07-10)
|
||||
|
||||
- **[Internal]** Update dependencies: add `package-lock.json` and update `tslint`.
|
||||
|
||||
## 0.14.1 (2017-06-17)
|
||||
|
||||
- **[Internal]** Update dependencies.
|
||||
- **[Internal]** Drop dependency on _Bluebird_.
|
||||
- **[Internal]** Drop dependency on _typings_.
|
||||
|
||||
## 0.14.0 (2017-05-10)
|
||||
|
||||
- **[Breaking]** Enforce trailing commas by default for multiline objects
|
||||
- **[Feature]** Allow bump from either `master` or a branch with the same name as the tag (exampel: `v1.2.3`)
|
||||
- **[Feature]** Support TSLint 8, allow to extend the default rules
|
||||
- **[Patch]** Allow mergeable namespaces
|
||||
|
||||
# 0.13.1
|
||||
|
||||
- **[Patch]** Allow namespaces in the default TS-Lint config
|
||||
|
||||
# 0.13.0
|
||||
|
||||
- **[Breaking]** Major overhaul of the angular target. The server build no longer depends on the client.
|
||||
- **[Breaking]** Update to `gulp@4` (from `gulp@3`)
|
||||
- **[Breaking]** Update to `tslint@7` (from `tslint@6`), add stricter default rules
|
||||
- **[Breaking]** Update signature of targetGenerators and project tasks: it only uses
|
||||
`ProjectOptions` and `Target` now, the additional options are embedded in those two objects.
|
||||
- **[Breaking]** Remove `:install`, `:instal:npm` and `:install:typings`. Use the `prepare` script in
|
||||
your `package.json` file instead.
|
||||
- Add `:tslint.json` project task to generate configuration for `tslint`
|
||||
- Add first class support for processing of `pug` and `sass` files, similar to `copy`
|
||||
- Implement end-to-end tests
|
||||
- Enable `emitDecoratorMetadata` in default typescript options.
|
||||
- Allow configuration of `:lint` with the `tslintOptions` property of the project configuration.
|
||||
- Add `<target>:watch` tasks for incremental builds.
|
||||
|
||||
# 0.12.3
|
||||
|
||||
- Support `templateUrl` and `styleUrls` in angular modules.
|
||||
|
||||
# 0.12.2
|
||||
|
||||
- Add `<target>:build:copy` task. It copies user-defined files.
|
||||
|
||||
# 0.12.1
|
||||
|
||||
- Fix `<target>:watch` task.
|
||||
|
||||
# 0.12.0
|
||||
|
||||
- **[Breaking]**: Change naming convention for tasks. The names primary part is
|
||||
the target, then the action (`lib:build` instead of `build:lib`) to group
|
||||
the tasks per target.
|
||||
- **[Breaking]**: Use `typeRoots` instead of `definitions` in configuration to
|
||||
specify Typescript definition files.
|
||||
- Generate `tsconfig.json` file (mainly for editors)
|
||||
- Implement the `test` target to run unit-tests with `mocha`.
|
||||
|
||||
# 0.11.2
|
||||
|
||||
- Target `angular`: Add `build:<target>:assets:sass` for `.scss` files (Sassy CSS)
|
||||
|
||||
# 0.11.1
|
||||
|
||||
- Rename project to `web-build-tools` (`demurgos-web-build-tools` on _npm_)
|
||||
- Target `angular`: Add `build:<target>:assets`, `build:<target>:pug` and `build:<target>:static`.
|
||||
- Update `gulp-typescript`: solve error message during compilation
|
||||
- Targets `node` and `angular`: `build:<target>:scripts` now include in-lined source maps
|
||||
- Target `node`: `watch:<target>` to support incremental builds
|
||||
21
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/LICENSE.md
generated
vendored
21
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/LICENSE.md
generated
vendored
|
|
@ -1,21 +0,0 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright © 2015-2017 Charles Samborski
|
||||
|
||||
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.
|
||||
11
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/README.md
generated
vendored
11
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/README.md
generated
vendored
|
|
@ -1,11 +0,0 @@
|
|||
# V8 Coverage
|
||||
|
||||
[](https://www.npmjs.com/package/@c88/v8-coverage)
|
||||
[](https://github.com/demurgos/v8-coverage)
|
||||
[](https://travis-ci.org/demurgos/v8-coverage)
|
||||
[](https://ci.appveyor.com/project/demurgos/v8-coverage)
|
||||
[](https://codecov.io/gh/demurgos/v8-coverage)
|
||||
|
||||
## License
|
||||
|
||||
[MIT License](./LICENSE.md)
|
||||
146
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/_src/ascii.ts
generated
vendored
146
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/_src/ascii.ts
generated
vendored
|
|
@ -1,146 +0,0 @@
|
|||
import { compareRangeCovs } from "./compare";
|
||||
import { RangeCov } from "./types";
|
||||
|
||||
interface ReadonlyRangeTree {
|
||||
readonly start: number;
|
||||
readonly end: number;
|
||||
readonly count: number;
|
||||
readonly children: ReadonlyRangeTree[];
|
||||
}
|
||||
|
||||
export function emitForest(trees: ReadonlyArray<ReadonlyRangeTree>): string {
|
||||
return emitForestLines(trees).join("\n");
|
||||
}
|
||||
|
||||
export function emitForestLines(trees: ReadonlyArray<ReadonlyRangeTree>): string[] {
|
||||
const colMap: Map<number, number> = getColMap(trees);
|
||||
const header: string = emitOffsets(colMap);
|
||||
return [header, ...trees.map(tree => emitTree(tree, colMap).join("\n"))];
|
||||
}
|
||||
|
||||
function getColMap(trees: Iterable<ReadonlyRangeTree>): Map<number, number> {
|
||||
const eventSet: Set<number> = new Set();
|
||||
for (const tree of trees) {
|
||||
const stack: ReadonlyRangeTree[] = [tree];
|
||||
while (stack.length > 0) {
|
||||
const cur: ReadonlyRangeTree = stack.pop()!;
|
||||
eventSet.add(cur.start);
|
||||
eventSet.add(cur.end);
|
||||
for (const child of cur.children) {
|
||||
stack.push(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
const events: number[] = [...eventSet];
|
||||
events.sort((a, b) => a - b);
|
||||
let maxDigits: number = 1;
|
||||
for (const event of events) {
|
||||
maxDigits = Math.max(maxDigits, event.toString(10).length);
|
||||
}
|
||||
const colWidth: number = maxDigits + 3;
|
||||
const colMap: Map<number, number> = new Map();
|
||||
for (const [i, event] of events.entries()) {
|
||||
colMap.set(event, i * colWidth);
|
||||
}
|
||||
return colMap;
|
||||
}
|
||||
|
||||
function emitTree(tree: ReadonlyRangeTree, colMap: Map<number, number>): string[] {
|
||||
const layers: ReadonlyRangeTree[][] = [];
|
||||
let nextLayer: ReadonlyRangeTree[] = [tree];
|
||||
while (nextLayer.length > 0) {
|
||||
const layer: ReadonlyRangeTree[] = nextLayer;
|
||||
layers.push(layer);
|
||||
nextLayer = [];
|
||||
for (const node of layer) {
|
||||
for (const child of node.children) {
|
||||
nextLayer.push(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
return layers.map(layer => emitTreeLayer(layer, colMap));
|
||||
}
|
||||
|
||||
export function parseFunctionRanges(text: string, offsetMap: Map<number, number>): RangeCov[] {
|
||||
const result: RangeCov[] = [];
|
||||
for (const line of text.split("\n")) {
|
||||
for (const range of parseTreeLayer(line, offsetMap)) {
|
||||
result.push(range);
|
||||
}
|
||||
}
|
||||
result.sort(compareRangeCovs);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param layer Sorted list of disjoint trees.
|
||||
* @param colMap
|
||||
*/
|
||||
function emitTreeLayer(layer: ReadonlyRangeTree[], colMap: Map<number, number>): string {
|
||||
const line: string[] = [];
|
||||
let curIdx: number = 0;
|
||||
for (const {start, end, count} of layer) {
|
||||
const startIdx: number = colMap.get(start)!;
|
||||
const endIdx: number = colMap.get(end)!;
|
||||
if (startIdx > curIdx) {
|
||||
line.push(" ".repeat(startIdx - curIdx));
|
||||
}
|
||||
line.push(emitRange(count, endIdx - startIdx));
|
||||
curIdx = endIdx;
|
||||
}
|
||||
return line.join("");
|
||||
}
|
||||
|
||||
function parseTreeLayer(text: string, offsetMap: Map<number, number>): RangeCov[] {
|
||||
const result: RangeCov[] = [];
|
||||
const regex: RegExp = /\[(\d+)-*\)/gs;
|
||||
while (true) {
|
||||
const match: RegExpMatchArray | null = regex.exec(text);
|
||||
if (match === null) {
|
||||
break;
|
||||
}
|
||||
const startIdx: number = match.index!;
|
||||
const endIdx: number = startIdx + match[0].length;
|
||||
const count: number = parseInt(match[1], 10);
|
||||
const startOffset: number | undefined = offsetMap.get(startIdx);
|
||||
const endOffset: number | undefined = offsetMap.get(endIdx);
|
||||
if (startOffset === undefined || endOffset === undefined) {
|
||||
throw new Error(`Invalid offsets for: ${JSON.stringify(text)}`);
|
||||
}
|
||||
result.push({startOffset, endOffset, count});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function emitRange(count: number, len: number): string {
|
||||
const rangeStart: string = `[${count.toString(10)}`;
|
||||
const rangeEnd: string = ")";
|
||||
const hyphensLen: number = len - (rangeStart.length + rangeEnd.length);
|
||||
const hyphens: string = "-".repeat(Math.max(0, hyphensLen));
|
||||
return `${rangeStart}${hyphens}${rangeEnd}`;
|
||||
}
|
||||
|
||||
function emitOffsets(colMap: Map<number, number>): string {
|
||||
let line: string = "";
|
||||
for (const [event, col] of colMap) {
|
||||
if (line.length < col) {
|
||||
line += " ".repeat(col - line.length);
|
||||
}
|
||||
line += event.toString(10);
|
||||
}
|
||||
return line;
|
||||
}
|
||||
|
||||
export function parseOffsets(text: string): Map<number, number> {
|
||||
const result: Map<number, number> = new Map();
|
||||
const regex: RegExp = /\d+/gs;
|
||||
while (true) {
|
||||
const match: RegExpExecArray | null = regex.exec(text);
|
||||
if (match === null) {
|
||||
break;
|
||||
}
|
||||
result.set(match.index, parseInt(match[0], 10));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
70
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/_src/clone.ts
generated
vendored
70
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/_src/clone.ts
generated
vendored
|
|
@ -1,70 +0,0 @@
|
|||
import { FunctionCov, ProcessCov, RangeCov, ScriptCov } from "./types";
|
||||
|
||||
/**
|
||||
* Creates a deep copy of a process coverage.
|
||||
*
|
||||
* @param processCov Process coverage to clone.
|
||||
* @return Cloned process coverage.
|
||||
*/
|
||||
export function cloneProcessCov(processCov: Readonly<ProcessCov>): ProcessCov {
|
||||
const result: ScriptCov[] = [];
|
||||
for (const scriptCov of processCov.result) {
|
||||
result.push(cloneScriptCov(scriptCov));
|
||||
}
|
||||
|
||||
return {
|
||||
result,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a deep copy of a script coverage.
|
||||
*
|
||||
* @param scriptCov Script coverage to clone.
|
||||
* @return Cloned script coverage.
|
||||
*/
|
||||
export function cloneScriptCov(scriptCov: Readonly<ScriptCov>): ScriptCov {
|
||||
const functions: FunctionCov[] = [];
|
||||
for (const functionCov of scriptCov.functions) {
|
||||
functions.push(cloneFunctionCov(functionCov));
|
||||
}
|
||||
|
||||
return {
|
||||
scriptId: scriptCov.scriptId,
|
||||
url: scriptCov.url,
|
||||
functions,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a deep copy of a function coverage.
|
||||
*
|
||||
* @param functionCov Function coverage to clone.
|
||||
* @return Cloned function coverage.
|
||||
*/
|
||||
export function cloneFunctionCov(functionCov: Readonly<FunctionCov>): FunctionCov {
|
||||
const ranges: RangeCov[] = [];
|
||||
for (const rangeCov of functionCov.ranges) {
|
||||
ranges.push(cloneRangeCov(rangeCov));
|
||||
}
|
||||
|
||||
return {
|
||||
functionName: functionCov.functionName,
|
||||
ranges,
|
||||
isBlockCoverage: functionCov.isBlockCoverage,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a deep copy of a function coverage.
|
||||
*
|
||||
* @param rangeCov Range coverage to clone.
|
||||
* @return Cloned range coverage.
|
||||
*/
|
||||
export function cloneRangeCov(rangeCov: Readonly<RangeCov>): RangeCov {
|
||||
return {
|
||||
startOffset: rangeCov.startOffset,
|
||||
endOffset: rangeCov.endOffset,
|
||||
count: rangeCov.count,
|
||||
};
|
||||
}
|
||||
40
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/_src/compare.ts
generated
vendored
40
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/_src/compare.ts
generated
vendored
|
|
@ -1,40 +0,0 @@
|
|||
import { FunctionCov, RangeCov, ScriptCov } from "./types";
|
||||
|
||||
/**
|
||||
* Compares two script coverages.
|
||||
*
|
||||
* The result corresponds to the comparison of their `url` value (alphabetical sort).
|
||||
*/
|
||||
export function compareScriptCovs(a: Readonly<ScriptCov>, b: Readonly<ScriptCov>): number {
|
||||
if (a.url === b.url) {
|
||||
return 0;
|
||||
} else if (a.url < b.url) {
|
||||
return -1;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Compares two function coverages.
|
||||
*
|
||||
* The result corresponds to the comparison of the root ranges.
|
||||
*/
|
||||
export function compareFunctionCovs(a: Readonly<FunctionCov>, b: Readonly<FunctionCov>): number {
|
||||
return compareRangeCovs(a.ranges[0], b.ranges[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compares two range coverages.
|
||||
*
|
||||
* The ranges are first ordered by ascending `startOffset` and then by
|
||||
* descending `endOffset`.
|
||||
* This corresponds to a pre-order tree traversal.
|
||||
*/
|
||||
export function compareRangeCovs(a: Readonly<RangeCov>, b: Readonly<RangeCov>): number {
|
||||
if (a.startOffset !== b.startOffset) {
|
||||
return a.startOffset - b.startOffset;
|
||||
} else {
|
||||
return b.endOffset - a.endOffset;
|
||||
}
|
||||
}
|
||||
6
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/_src/index.ts
generated
vendored
6
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/_src/index.ts
generated
vendored
|
|
@ -1,6 +0,0 @@
|
|||
export { emitForest, emitForestLines, parseFunctionRanges, parseOffsets } from "./ascii";
|
||||
export { cloneFunctionCov, cloneProcessCov, cloneScriptCov, cloneRangeCov } from "./clone";
|
||||
export { compareScriptCovs, compareFunctionCovs, compareRangeCovs } from "./compare";
|
||||
export { mergeFunctionCovs, mergeProcessCovs, mergeScriptCovs } from "./merge";
|
||||
export { RangeTree } from "./range-tree";
|
||||
export { ProcessCov, ScriptCov, FunctionCov, RangeCov } from "./types";
|
||||
343
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/_src/merge.ts
generated
vendored
343
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/_src/merge.ts
generated
vendored
|
|
@ -1,343 +0,0 @@
|
|||
import {
|
||||
deepNormalizeScriptCov,
|
||||
normalizeFunctionCov,
|
||||
normalizeProcessCov,
|
||||
normalizeRangeTree,
|
||||
normalizeScriptCov,
|
||||
} from "./normalize";
|
||||
import { RangeTree } from "./range-tree";
|
||||
import { FunctionCov, ProcessCov, Range, RangeCov, ScriptCov } from "./types";
|
||||
|
||||
/**
|
||||
* Merges a list of process coverages.
|
||||
*
|
||||
* The result is normalized.
|
||||
* The input values may be mutated, it is not safe to use them after passing
|
||||
* them to this function.
|
||||
* The computation is synchronous.
|
||||
*
|
||||
* @param processCovs Process coverages to merge.
|
||||
* @return Merged process coverage.
|
||||
*/
|
||||
export function mergeProcessCovs(processCovs: ReadonlyArray<ProcessCov>): ProcessCov {
|
||||
if (processCovs.length === 0) {
|
||||
return {result: []};
|
||||
}
|
||||
|
||||
const urlToScripts: Map<string, ScriptCov[]> = new Map();
|
||||
for (const processCov of processCovs) {
|
||||
for (const scriptCov of processCov.result) {
|
||||
let scriptCovs: ScriptCov[] | undefined = urlToScripts.get(scriptCov.url);
|
||||
if (scriptCovs === undefined) {
|
||||
scriptCovs = [];
|
||||
urlToScripts.set(scriptCov.url, scriptCovs);
|
||||
}
|
||||
scriptCovs.push(scriptCov);
|
||||
}
|
||||
}
|
||||
|
||||
const result: ScriptCov[] = [];
|
||||
for (const scripts of urlToScripts.values()) {
|
||||
// assert: `scripts.length > 0`
|
||||
result.push(mergeScriptCovs(scripts)!);
|
||||
}
|
||||
const merged: ProcessCov = {result};
|
||||
|
||||
normalizeProcessCov(merged);
|
||||
return merged;
|
||||
}
|
||||
|
||||
/**
|
||||
* Merges a list of matching script coverages.
|
||||
*
|
||||
* Scripts are matching if they have the same `url`.
|
||||
* The result is normalized.
|
||||
* The input values may be mutated, it is not safe to use them after passing
|
||||
* them to this function.
|
||||
* The computation is synchronous.
|
||||
*
|
||||
* @param scriptCovs Process coverages to merge.
|
||||
* @return Merged script coverage, or `undefined` if the input list was empty.
|
||||
*/
|
||||
export function mergeScriptCovs(scriptCovs: ReadonlyArray<ScriptCov>): ScriptCov | undefined {
|
||||
if (scriptCovs.length === 0) {
|
||||
return undefined;
|
||||
} else if (scriptCovs.length === 1) {
|
||||
const merged: ScriptCov = scriptCovs[0];
|
||||
deepNormalizeScriptCov(merged);
|
||||
return merged;
|
||||
}
|
||||
|
||||
const first: ScriptCov = scriptCovs[0];
|
||||
const scriptId: string = first.scriptId;
|
||||
const url: string = first.url;
|
||||
|
||||
const rangeToFuncs: Map<string, FunctionCov[]> = new Map();
|
||||
for (const scriptCov of scriptCovs) {
|
||||
for (const funcCov of scriptCov.functions) {
|
||||
const rootRange: string = stringifyFunctionRootRange(funcCov);
|
||||
let funcCovs: FunctionCov[] | undefined = rangeToFuncs.get(rootRange);
|
||||
|
||||
if (funcCovs === undefined ||
|
||||
// if the entry in rangeToFuncs is function-level granularity and
|
||||
// the new coverage is block-level, prefer block-level.
|
||||
(!funcCovs[0].isBlockCoverage && funcCov.isBlockCoverage)) {
|
||||
funcCovs = [];
|
||||
rangeToFuncs.set(rootRange, funcCovs);
|
||||
} else if (funcCovs[0].isBlockCoverage && !funcCov.isBlockCoverage) {
|
||||
// if the entry in rangeToFuncs is block-level granularity, we should
|
||||
// not append function level granularity.
|
||||
continue;
|
||||
}
|
||||
funcCovs.push(funcCov);
|
||||
}
|
||||
}
|
||||
|
||||
const functions: FunctionCov[] = [];
|
||||
for (const funcCovs of rangeToFuncs.values()) {
|
||||
// assert: `funcCovs.length > 0`
|
||||
functions.push(mergeFunctionCovs(funcCovs)!);
|
||||
}
|
||||
|
||||
const merged: ScriptCov = {scriptId, url, functions};
|
||||
normalizeScriptCov(merged);
|
||||
return merged;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of the root range of the function.
|
||||
*
|
||||
* This string can be used to match function with same root range.
|
||||
* The string is derived from the start and end offsets of the root range of
|
||||
* the function.
|
||||
* This assumes that `ranges` is non-empty (true for valid function coverages).
|
||||
*
|
||||
* @param funcCov Function coverage with the range to stringify
|
||||
* @internal
|
||||
*/
|
||||
function stringifyFunctionRootRange(funcCov: Readonly<FunctionCov>): string {
|
||||
const rootRange: RangeCov = funcCov.ranges[0];
|
||||
return `${rootRange.startOffset.toString(10)};${rootRange.endOffset.toString(10)}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Merges a list of matching function coverages.
|
||||
*
|
||||
* Functions are matching if their root ranges have the same span.
|
||||
* The result is normalized.
|
||||
* The input values may be mutated, it is not safe to use them after passing
|
||||
* them to this function.
|
||||
* The computation is synchronous.
|
||||
*
|
||||
* @param funcCovs Function coverages to merge.
|
||||
* @return Merged function coverage, or `undefined` if the input list was empty.
|
||||
*/
|
||||
export function mergeFunctionCovs(funcCovs: ReadonlyArray<FunctionCov>): FunctionCov | undefined {
|
||||
if (funcCovs.length === 0) {
|
||||
return undefined;
|
||||
} else if (funcCovs.length === 1) {
|
||||
const merged: FunctionCov = funcCovs[0];
|
||||
normalizeFunctionCov(merged);
|
||||
return merged;
|
||||
}
|
||||
|
||||
const functionName: string = funcCovs[0].functionName;
|
||||
|
||||
const trees: RangeTree[] = [];
|
||||
for (const funcCov of funcCovs) {
|
||||
// assert: `fn.ranges.length > 0`
|
||||
// assert: `fn.ranges` is sorted
|
||||
trees.push(RangeTree.fromSortedRanges(funcCov.ranges)!);
|
||||
}
|
||||
|
||||
// assert: `trees.length > 0`
|
||||
const mergedTree: RangeTree = mergeRangeTrees(trees)!;
|
||||
normalizeRangeTree(mergedTree);
|
||||
const ranges: RangeCov[] = mergedTree.toRanges();
|
||||
const isBlockCoverage: boolean = !(ranges.length === 1 && ranges[0].count === 0);
|
||||
|
||||
const merged: FunctionCov = {functionName, ranges, isBlockCoverage};
|
||||
// assert: `merged` is normalized
|
||||
return merged;
|
||||
}
|
||||
|
||||
/**
|
||||
* @precondition Same `start` and `end` for all the trees
|
||||
*/
|
||||
function mergeRangeTrees(trees: ReadonlyArray<RangeTree>): RangeTree | undefined {
|
||||
if (trees.length <= 1) {
|
||||
return trees[0];
|
||||
}
|
||||
const first: RangeTree = trees[0];
|
||||
let delta: number = 0;
|
||||
for (const tree of trees) {
|
||||
delta += tree.delta;
|
||||
}
|
||||
const children: RangeTree[] = mergeRangeTreeChildren(trees);
|
||||
return new RangeTree(first.start, first.end, delta, children);
|
||||
}
|
||||
|
||||
class RangeTreeWithParent {
|
||||
readonly parentIndex: number;
|
||||
readonly tree: RangeTree;
|
||||
|
||||
constructor(parentIndex: number, tree: RangeTree) {
|
||||
this.parentIndex = parentIndex;
|
||||
this.tree = tree;
|
||||
}
|
||||
}
|
||||
|
||||
class StartEvent {
|
||||
readonly offset: number;
|
||||
readonly trees: RangeTreeWithParent[];
|
||||
|
||||
constructor(offset: number, trees: RangeTreeWithParent[]) {
|
||||
this.offset = offset;
|
||||
this.trees = trees;
|
||||
}
|
||||
|
||||
static compare(a: StartEvent, b: StartEvent): number {
|
||||
return a.offset - b.offset;
|
||||
}
|
||||
}
|
||||
|
||||
class StartEventQueue {
|
||||
private readonly queue: StartEvent[];
|
||||
private nextIndex: number;
|
||||
private pendingOffset: number;
|
||||
private pendingTrees: RangeTreeWithParent[] | undefined;
|
||||
|
||||
private constructor(queue: StartEvent[]) {
|
||||
this.queue = queue;
|
||||
this.nextIndex = 0;
|
||||
this.pendingOffset = 0;
|
||||
this.pendingTrees = undefined;
|
||||
}
|
||||
|
||||
static fromParentTrees(parentTrees: ReadonlyArray<RangeTree>): StartEventQueue {
|
||||
const startToTrees: Map<number, RangeTreeWithParent[]> = new Map();
|
||||
for (const [parentIndex, parentTree] of parentTrees.entries()) {
|
||||
for (const child of parentTree.children) {
|
||||
let trees: RangeTreeWithParent[] | undefined = startToTrees.get(child.start);
|
||||
if (trees === undefined) {
|
||||
trees = [];
|
||||
startToTrees.set(child.start, trees);
|
||||
}
|
||||
trees.push(new RangeTreeWithParent(parentIndex, child));
|
||||
}
|
||||
}
|
||||
const queue: StartEvent[] = [];
|
||||
for (const [startOffset, trees] of startToTrees) {
|
||||
queue.push(new StartEvent(startOffset, trees));
|
||||
}
|
||||
queue.sort(StartEvent.compare);
|
||||
return new StartEventQueue(queue);
|
||||
}
|
||||
|
||||
setPendingOffset(offset: number): void {
|
||||
this.pendingOffset = offset;
|
||||
}
|
||||
|
||||
pushPendingTree(tree: RangeTreeWithParent): void {
|
||||
if (this.pendingTrees === undefined) {
|
||||
this.pendingTrees = [];
|
||||
}
|
||||
this.pendingTrees.push(tree);
|
||||
}
|
||||
|
||||
next(): StartEvent | undefined {
|
||||
const pendingTrees: RangeTreeWithParent[] | undefined = this.pendingTrees;
|
||||
const nextEvent: StartEvent | undefined = this.queue[this.nextIndex];
|
||||
if (pendingTrees === undefined) {
|
||||
this.nextIndex++;
|
||||
return nextEvent;
|
||||
} else if (nextEvent === undefined) {
|
||||
this.pendingTrees = undefined;
|
||||
return new StartEvent(this.pendingOffset, pendingTrees);
|
||||
} else {
|
||||
if (this.pendingOffset < nextEvent.offset) {
|
||||
this.pendingTrees = undefined;
|
||||
return new StartEvent(this.pendingOffset, pendingTrees);
|
||||
} else {
|
||||
if (this.pendingOffset === nextEvent.offset) {
|
||||
this.pendingTrees = undefined;
|
||||
for (const tree of pendingTrees) {
|
||||
nextEvent.trees.push(tree);
|
||||
}
|
||||
}
|
||||
this.nextIndex++;
|
||||
return nextEvent;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function mergeRangeTreeChildren(parentTrees: ReadonlyArray<RangeTree>): RangeTree[] {
|
||||
const result: RangeTree[] = [];
|
||||
const startEventQueue: StartEventQueue = StartEventQueue.fromParentTrees(parentTrees);
|
||||
const parentToNested: Map<number, RangeTree[]> = new Map();
|
||||
let openRange: Range | undefined;
|
||||
|
||||
while (true) {
|
||||
const event: StartEvent | undefined = startEventQueue.next();
|
||||
if (event === undefined) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (openRange !== undefined && openRange.end <= event.offset) {
|
||||
result.push(nextChild(openRange, parentToNested));
|
||||
openRange = undefined;
|
||||
}
|
||||
|
||||
if (openRange === undefined) {
|
||||
let openRangeEnd: number = event.offset + 1;
|
||||
for (const {parentIndex, tree} of event.trees) {
|
||||
openRangeEnd = Math.max(openRangeEnd, tree.end);
|
||||
insertChild(parentToNested, parentIndex, tree);
|
||||
}
|
||||
startEventQueue.setPendingOffset(openRangeEnd);
|
||||
openRange = {start: event.offset, end: openRangeEnd};
|
||||
} else {
|
||||
for (const {parentIndex, tree} of event.trees) {
|
||||
if (tree.end > openRange.end) {
|
||||
const right: RangeTree = tree.split(openRange.end);
|
||||
startEventQueue.pushPendingTree(new RangeTreeWithParent(parentIndex, right));
|
||||
}
|
||||
insertChild(parentToNested, parentIndex, tree);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (openRange !== undefined) {
|
||||
result.push(nextChild(openRange, parentToNested));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
function insertChild(parentToNested: Map<number, RangeTree[]>, parentIndex: number, tree: RangeTree): void {
|
||||
let nested: RangeTree[] | undefined = parentToNested.get(parentIndex);
|
||||
if (nested === undefined) {
|
||||
nested = [];
|
||||
parentToNested.set(parentIndex, nested);
|
||||
}
|
||||
nested.push(tree);
|
||||
}
|
||||
|
||||
function nextChild(openRange: Range, parentToNested: Map<number, RangeTree[]>): RangeTree {
|
||||
const matchingTrees: RangeTree[] = [];
|
||||
|
||||
for (const nested of parentToNested.values()) {
|
||||
if (nested.length === 1 && nested[0].start === openRange.start && nested[0].end === openRange.end) {
|
||||
matchingTrees.push(nested[0]);
|
||||
} else {
|
||||
matchingTrees.push(new RangeTree(
|
||||
openRange.start,
|
||||
openRange.end,
|
||||
0,
|
||||
nested,
|
||||
));
|
||||
}
|
||||
}
|
||||
parentToNested.clear();
|
||||
return mergeRangeTrees(matchingTrees)!;
|
||||
}
|
||||
84
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/_src/normalize.ts
generated
vendored
84
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/_src/normalize.ts
generated
vendored
|
|
@ -1,84 +0,0 @@
|
|||
import { compareFunctionCovs, compareRangeCovs, compareScriptCovs } from "./compare";
|
||||
import { RangeTree } from "./range-tree";
|
||||
import { FunctionCov, ProcessCov, ScriptCov } from "./types";
|
||||
|
||||
/**
|
||||
* Normalizes a process coverage.
|
||||
*
|
||||
* Sorts the scripts alphabetically by `url`.
|
||||
* Reassigns script ids: the script at index `0` receives `"0"`, the script at
|
||||
* index `1` receives `"1"` etc.
|
||||
* This does not normalize the script coverages.
|
||||
*
|
||||
* @param processCov Process coverage to normalize.
|
||||
*/
|
||||
export function normalizeProcessCov(processCov: ProcessCov): void {
|
||||
processCov.result.sort(compareScriptCovs);
|
||||
for (const [scriptId, scriptCov] of processCov.result.entries()) {
|
||||
scriptCov.scriptId = scriptId.toString(10);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizes a process coverage deeply.
|
||||
*
|
||||
* Normalizes the script coverages deeply, then normalizes the process coverage
|
||||
* itself.
|
||||
*
|
||||
* @param processCov Process coverage to normalize.
|
||||
*/
|
||||
export function deepNormalizeProcessCov(processCov: ProcessCov): void {
|
||||
for (const scriptCov of processCov.result) {
|
||||
deepNormalizeScriptCov(scriptCov);
|
||||
}
|
||||
normalizeProcessCov(processCov);
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizes a script coverage.
|
||||
*
|
||||
* Sorts the function by root range (pre-order sort).
|
||||
* This does not normalize the function coverages.
|
||||
*
|
||||
* @param scriptCov Script coverage to normalize.
|
||||
*/
|
||||
export function normalizeScriptCov(scriptCov: ScriptCov): void {
|
||||
scriptCov.functions.sort(compareFunctionCovs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizes a script coverage deeply.
|
||||
*
|
||||
* Normalizes the function coverages deeply, then normalizes the script coverage
|
||||
* itself.
|
||||
*
|
||||
* @param scriptCov Script coverage to normalize.
|
||||
*/
|
||||
export function deepNormalizeScriptCov(scriptCov: ScriptCov): void {
|
||||
for (const funcCov of scriptCov.functions) {
|
||||
normalizeFunctionCov(funcCov);
|
||||
}
|
||||
normalizeScriptCov(scriptCov);
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizes a function coverage.
|
||||
*
|
||||
* Sorts the ranges (pre-order sort).
|
||||
* TODO: Tree-based normalization of the ranges.
|
||||
*
|
||||
* @param funcCov Function coverage to normalize.
|
||||
*/
|
||||
export function normalizeFunctionCov(funcCov: FunctionCov): void {
|
||||
funcCov.ranges.sort(compareRangeCovs);
|
||||
const tree: RangeTree = RangeTree.fromSortedRanges(funcCov.ranges)!;
|
||||
normalizeRangeTree(tree);
|
||||
funcCov.ranges = tree.toRanges();
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
export function normalizeRangeTree(tree: RangeTree): void {
|
||||
tree.normalize();
|
||||
}
|
||||
156
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/_src/range-tree.ts
generated
vendored
156
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/_src/range-tree.ts
generated
vendored
|
|
@ -1,156 +0,0 @@
|
|||
import { RangeCov } from "./types";
|
||||
|
||||
export class RangeTree {
|
||||
start: number;
|
||||
end: number;
|
||||
delta: number;
|
||||
children: RangeTree[];
|
||||
|
||||
constructor(
|
||||
start: number,
|
||||
end: number,
|
||||
delta: number,
|
||||
children: RangeTree[],
|
||||
) {
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
this.delta = delta;
|
||||
this.children = children;
|
||||
}
|
||||
|
||||
/**
|
||||
* @precodition `ranges` are well-formed and pre-order sorted
|
||||
*/
|
||||
static fromSortedRanges(ranges: ReadonlyArray<RangeCov>): RangeTree | undefined {
|
||||
let root: RangeTree | undefined;
|
||||
// Stack of parent trees and parent counts.
|
||||
const stack: [RangeTree, number][] = [];
|
||||
for (const range of ranges) {
|
||||
const node: RangeTree = new RangeTree(range.startOffset, range.endOffset, range.count, []);
|
||||
if (root === undefined) {
|
||||
root = node;
|
||||
stack.push([node, range.count]);
|
||||
continue;
|
||||
}
|
||||
let parent: RangeTree;
|
||||
let parentCount: number;
|
||||
while (true) {
|
||||
[parent, parentCount] = stack[stack.length - 1];
|
||||
// assert: `top !== undefined` (the ranges are sorted)
|
||||
if (range.startOffset < parent.end) {
|
||||
break;
|
||||
} else {
|
||||
stack.pop();
|
||||
}
|
||||
}
|
||||
node.delta -= parentCount;
|
||||
parent.children.push(node);
|
||||
stack.push([node, range.count]);
|
||||
}
|
||||
return root;
|
||||
}
|
||||
|
||||
normalize(): void {
|
||||
const children: RangeTree[] = [];
|
||||
let curEnd: number;
|
||||
let head: RangeTree | undefined;
|
||||
const tail: RangeTree[] = [];
|
||||
for (const child of this.children) {
|
||||
if (head === undefined) {
|
||||
head = child;
|
||||
} else if (child.delta === head.delta && child.start === curEnd!) {
|
||||
tail.push(child);
|
||||
} else {
|
||||
endChain();
|
||||
head = child;
|
||||
}
|
||||
curEnd = child.end;
|
||||
}
|
||||
if (head !== undefined) {
|
||||
endChain();
|
||||
}
|
||||
|
||||
if (children.length === 1) {
|
||||
const child: RangeTree = children[0];
|
||||
if (child.start === this.start && child.end === this.end) {
|
||||
this.delta += child.delta;
|
||||
this.children = child.children;
|
||||
// `.lazyCount` is zero for both (both are after normalization)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
this.children = children;
|
||||
|
||||
function endChain(): void {
|
||||
if (tail.length !== 0) {
|
||||
head!.end = tail[tail.length - 1].end;
|
||||
for (const tailTree of tail) {
|
||||
for (const subChild of tailTree.children) {
|
||||
subChild.delta += tailTree.delta - head!.delta;
|
||||
head!.children.push(subChild);
|
||||
}
|
||||
}
|
||||
tail.length = 0;
|
||||
}
|
||||
head!.normalize();
|
||||
children.push(head!);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @precondition `tree.start < value && value < tree.end`
|
||||
* @return RangeTree Right part
|
||||
*/
|
||||
split(value: number): RangeTree {
|
||||
let leftChildLen: number = this.children.length;
|
||||
let mid: RangeTree | undefined;
|
||||
|
||||
// TODO(perf): Binary search (check overhead)
|
||||
for (let i: number = 0; i < this.children.length; i++) {
|
||||
const child: RangeTree = this.children[i];
|
||||
if (child.start < value && value < child.end) {
|
||||
mid = child.split(value);
|
||||
leftChildLen = i + 1;
|
||||
break;
|
||||
} else if (child.start >= value) {
|
||||
leftChildLen = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const rightLen: number = this.children.length - leftChildLen;
|
||||
const rightChildren: RangeTree[] = this.children.splice(leftChildLen, rightLen);
|
||||
if (mid !== undefined) {
|
||||
rightChildren.unshift(mid);
|
||||
}
|
||||
const result: RangeTree = new RangeTree(
|
||||
value,
|
||||
this.end,
|
||||
this.delta,
|
||||
rightChildren,
|
||||
);
|
||||
this.end = value;
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the range coverages corresponding to the tree.
|
||||
*
|
||||
* The ranges are pre-order sorted.
|
||||
*/
|
||||
toRanges(): RangeCov[] {
|
||||
const ranges: RangeCov[] = [];
|
||||
// Stack of parent trees and counts.
|
||||
const stack: [RangeTree, number][] = [[this, 0]];
|
||||
while (stack.length > 0) {
|
||||
const [cur, parentCount]: [RangeTree, number] = stack.pop()!;
|
||||
const count: number = parentCount + cur.delta;
|
||||
ranges.push({startOffset: cur.start, endOffset: cur.end, count});
|
||||
for (let i: number = cur.children.length - 1; i >= 0; i--) {
|
||||
stack.push([cur.children[i], count]);
|
||||
}
|
||||
}
|
||||
return ranges;
|
||||
}
|
||||
}
|
||||
26
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/_src/types.ts
generated
vendored
26
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/_src/types.ts
generated
vendored
|
|
@ -1,26 +0,0 @@
|
|||
export interface ProcessCov {
|
||||
result: ScriptCov[];
|
||||
}
|
||||
|
||||
export interface ScriptCov {
|
||||
scriptId: string;
|
||||
url: string;
|
||||
functions: FunctionCov[];
|
||||
}
|
||||
|
||||
export interface FunctionCov {
|
||||
functionName: string;
|
||||
ranges: RangeCov[];
|
||||
isBlockCoverage: boolean;
|
||||
}
|
||||
|
||||
export interface Range {
|
||||
readonly start: number;
|
||||
readonly end: number;
|
||||
}
|
||||
|
||||
export interface RangeCov {
|
||||
startOffset: number;
|
||||
endOffset: number;
|
||||
count: number;
|
||||
}
|
||||
12
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/ascii.d.ts
generated
vendored
12
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/ascii.d.ts
generated
vendored
|
|
@ -1,12 +0,0 @@
|
|||
import { RangeCov } from "./types";
|
||||
interface ReadonlyRangeTree {
|
||||
readonly start: number;
|
||||
readonly end: number;
|
||||
readonly count: number;
|
||||
readonly children: ReadonlyRangeTree[];
|
||||
}
|
||||
export declare function emitForest(trees: ReadonlyArray<ReadonlyRangeTree>): string;
|
||||
export declare function emitForestLines(trees: ReadonlyArray<ReadonlyRangeTree>): string[];
|
||||
export declare function parseFunctionRanges(text: string, offsetMap: Map<number, number>): RangeCov[];
|
||||
export declare function parseOffsets(text: string): Map<number, number>;
|
||||
export {};
|
||||
136
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/ascii.js
generated
vendored
136
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/ascii.js
generated
vendored
File diff suppressed because one or more lines are too long
130
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/ascii.mjs
generated
vendored
130
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/ascii.mjs
generated
vendored
File diff suppressed because one or more lines are too long
29
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/clone.d.ts
generated
vendored
29
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/clone.d.ts
generated
vendored
|
|
@ -1,29 +0,0 @@
|
|||
import { FunctionCov, ProcessCov, RangeCov, ScriptCov } from "./types";
|
||||
/**
|
||||
* Creates a deep copy of a process coverage.
|
||||
*
|
||||
* @param processCov Process coverage to clone.
|
||||
* @return Cloned process coverage.
|
||||
*/
|
||||
export declare function cloneProcessCov(processCov: Readonly<ProcessCov>): ProcessCov;
|
||||
/**
|
||||
* Creates a deep copy of a script coverage.
|
||||
*
|
||||
* @param scriptCov Script coverage to clone.
|
||||
* @return Cloned script coverage.
|
||||
*/
|
||||
export declare function cloneScriptCov(scriptCov: Readonly<ScriptCov>): ScriptCov;
|
||||
/**
|
||||
* Creates a deep copy of a function coverage.
|
||||
*
|
||||
* @param functionCov Function coverage to clone.
|
||||
* @return Cloned function coverage.
|
||||
*/
|
||||
export declare function cloneFunctionCov(functionCov: Readonly<FunctionCov>): FunctionCov;
|
||||
/**
|
||||
* Creates a deep copy of a function coverage.
|
||||
*
|
||||
* @param rangeCov Range coverage to clone.
|
||||
* @return Cloned range coverage.
|
||||
*/
|
||||
export declare function cloneRangeCov(rangeCov: Readonly<RangeCov>): RangeCov;
|
||||
70
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/clone.js
generated
vendored
70
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/clone.js
generated
vendored
|
|
@ -1,70 +0,0 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
/**
|
||||
* Creates a deep copy of a process coverage.
|
||||
*
|
||||
* @param processCov Process coverage to clone.
|
||||
* @return Cloned process coverage.
|
||||
*/
|
||||
function cloneProcessCov(processCov) {
|
||||
const result = [];
|
||||
for (const scriptCov of processCov.result) {
|
||||
result.push(cloneScriptCov(scriptCov));
|
||||
}
|
||||
return {
|
||||
result,
|
||||
};
|
||||
}
|
||||
exports.cloneProcessCov = cloneProcessCov;
|
||||
/**
|
||||
* Creates a deep copy of a script coverage.
|
||||
*
|
||||
* @param scriptCov Script coverage to clone.
|
||||
* @return Cloned script coverage.
|
||||
*/
|
||||
function cloneScriptCov(scriptCov) {
|
||||
const functions = [];
|
||||
for (const functionCov of scriptCov.functions) {
|
||||
functions.push(cloneFunctionCov(functionCov));
|
||||
}
|
||||
return {
|
||||
scriptId: scriptCov.scriptId,
|
||||
url: scriptCov.url,
|
||||
functions,
|
||||
};
|
||||
}
|
||||
exports.cloneScriptCov = cloneScriptCov;
|
||||
/**
|
||||
* Creates a deep copy of a function coverage.
|
||||
*
|
||||
* @param functionCov Function coverage to clone.
|
||||
* @return Cloned function coverage.
|
||||
*/
|
||||
function cloneFunctionCov(functionCov) {
|
||||
const ranges = [];
|
||||
for (const rangeCov of functionCov.ranges) {
|
||||
ranges.push(cloneRangeCov(rangeCov));
|
||||
}
|
||||
return {
|
||||
functionName: functionCov.functionName,
|
||||
ranges,
|
||||
isBlockCoverage: functionCov.isBlockCoverage,
|
||||
};
|
||||
}
|
||||
exports.cloneFunctionCov = cloneFunctionCov;
|
||||
/**
|
||||
* Creates a deep copy of a function coverage.
|
||||
*
|
||||
* @param rangeCov Range coverage to clone.
|
||||
* @return Cloned range coverage.
|
||||
*/
|
||||
function cloneRangeCov(rangeCov) {
|
||||
return {
|
||||
startOffset: rangeCov.startOffset,
|
||||
endOffset: rangeCov.endOffset,
|
||||
count: rangeCov.count,
|
||||
};
|
||||
}
|
||||
exports.cloneRangeCov = cloneRangeCov;
|
||||
|
||||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9zcmMvY2xvbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFFQTs7Ozs7R0FLRztBQUNILFNBQWdCLGVBQWUsQ0FBQyxVQUFnQztJQUM5RCxNQUFNLE1BQU0sR0FBZ0IsRUFBRSxDQUFDO0lBQy9CLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxDQUFDLE1BQU0sRUFBRTtRQUN6QyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO0tBQ3hDO0lBRUQsT0FBTztRQUNMLE1BQU07S0FDUCxDQUFDO0FBQ0osQ0FBQztBQVRELDBDQVNDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixjQUFjLENBQUMsU0FBOEI7SUFDM0QsTUFBTSxTQUFTLEdBQWtCLEVBQUUsQ0FBQztJQUNwQyxLQUFLLE1BQU0sV0FBVyxJQUFJLFNBQVMsQ0FBQyxTQUFTLEVBQUU7UUFDN0MsU0FBUyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO0tBQy9DO0lBRUQsT0FBTztRQUNMLFFBQVEsRUFBRSxTQUFTLENBQUMsUUFBUTtRQUM1QixHQUFHLEVBQUUsU0FBUyxDQUFDLEdBQUc7UUFDbEIsU0FBUztLQUNWLENBQUM7QUFDSixDQUFDO0FBWEQsd0NBV0M7QUFFRDs7Ozs7R0FLRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLFdBQWtDO0lBQ2pFLE1BQU0sTUFBTSxHQUFlLEVBQUUsQ0FBQztJQUM5QixLQUFLLE1BQU0sUUFBUSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUU7UUFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztLQUN0QztJQUVELE9BQU87UUFDTCxZQUFZLEVBQUUsV0FBVyxDQUFDLFlBQVk7UUFDdEMsTUFBTTtRQUNOLGVBQWUsRUFBRSxXQUFXLENBQUMsZUFBZTtLQUM3QyxDQUFDO0FBQ0osQ0FBQztBQVhELDRDQVdDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxTQUFnQixhQUFhLENBQUMsUUFBNEI7SUFDeEQsT0FBTztRQUNMLFdBQVcsRUFBRSxRQUFRLENBQUMsV0FBVztRQUNqQyxTQUFTLEVBQUUsUUFBUSxDQUFDLFNBQVM7UUFDN0IsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO0tBQ3RCLENBQUM7QUFDSixDQUFDO0FBTkQsc0NBTUMiLCJmaWxlIjoiY2xvbmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGdW5jdGlvbkNvdiwgUHJvY2Vzc0NvdiwgUmFuZ2VDb3YsIFNjcmlwdENvdiB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlZXAgY29weSBvZiBhIHByb2Nlc3MgY292ZXJhZ2UuXG4gKlxuICogQHBhcmFtIHByb2Nlc3NDb3YgUHJvY2VzcyBjb3ZlcmFnZSB0byBjbG9uZS5cbiAqIEByZXR1cm4gQ2xvbmVkIHByb2Nlc3MgY292ZXJhZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZVByb2Nlc3NDb3YocHJvY2Vzc0NvdjogUmVhZG9ubHk8UHJvY2Vzc0Nvdj4pOiBQcm9jZXNzQ292IHtcbiAgY29uc3QgcmVzdWx0OiBTY3JpcHRDb3ZbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHNjcmlwdENvdiBvZiBwcm9jZXNzQ292LnJlc3VsdCkge1xuICAgIHJlc3VsdC5wdXNoKGNsb25lU2NyaXB0Q292KHNjcmlwdENvdikpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICByZXN1bHQsXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlZXAgY29weSBvZiBhIHNjcmlwdCBjb3ZlcmFnZS5cbiAqXG4gKiBAcGFyYW0gc2NyaXB0Q292IFNjcmlwdCBjb3ZlcmFnZSB0byBjbG9uZS5cbiAqIEByZXR1cm4gQ2xvbmVkIHNjcmlwdCBjb3ZlcmFnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb25lU2NyaXB0Q292KHNjcmlwdENvdjogUmVhZG9ubHk8U2NyaXB0Q292Pik6IFNjcmlwdENvdiB7XG4gIGNvbnN0IGZ1bmN0aW9uczogRnVuY3Rpb25Db3ZbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZ1bmN0aW9uQ292IG9mIHNjcmlwdENvdi5mdW5jdGlvbnMpIHtcbiAgICBmdW5jdGlvbnMucHVzaChjbG9uZUZ1bmN0aW9uQ292KGZ1bmN0aW9uQ292KSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNjcmlwdElkOiBzY3JpcHRDb3Yuc2NyaXB0SWQsXG4gICAgdXJsOiBzY3JpcHRDb3YudXJsLFxuICAgIGZ1bmN0aW9ucyxcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVlcCBjb3B5IG9mIGEgZnVuY3Rpb24gY292ZXJhZ2UuXG4gKlxuICogQHBhcmFtIGZ1bmN0aW9uQ292IEZ1bmN0aW9uIGNvdmVyYWdlIHRvIGNsb25lLlxuICogQHJldHVybiBDbG9uZWQgZnVuY3Rpb24gY292ZXJhZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZUZ1bmN0aW9uQ292KGZ1bmN0aW9uQ292OiBSZWFkb25seTxGdW5jdGlvbkNvdj4pOiBGdW5jdGlvbkNvdiB7XG4gIGNvbnN0IHJhbmdlczogUmFuZ2VDb3ZbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHJhbmdlQ292IG9mIGZ1bmN0aW9uQ292LnJhbmdlcykge1xuICAgIHJhbmdlcy5wdXNoKGNsb25lUmFuZ2VDb3YocmFuZ2VDb3YpKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbkNvdi5mdW5jdGlvbk5hbWUsXG4gICAgcmFuZ2VzLFxuICAgIGlzQmxvY2tDb3ZlcmFnZTogZnVuY3Rpb25Db3YuaXNCbG9ja0NvdmVyYWdlLFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBkZWVwIGNvcHkgb2YgYSBmdW5jdGlvbiBjb3ZlcmFnZS5cbiAqXG4gKiBAcGFyYW0gcmFuZ2VDb3YgUmFuZ2UgY292ZXJhZ2UgdG8gY2xvbmUuXG4gKiBAcmV0dXJuIENsb25lZCByYW5nZSBjb3ZlcmFnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb25lUmFuZ2VDb3YocmFuZ2VDb3Y6IFJlYWRvbmx5PFJhbmdlQ292Pik6IFJhbmdlQ292IHtcbiAgcmV0dXJuIHtcbiAgICBzdGFydE9mZnNldDogcmFuZ2VDb3Yuc3RhcnRPZmZzZXQsXG4gICAgZW5kT2Zmc2V0OiByYW5nZUNvdi5lbmRPZmZzZXQsXG4gICAgY291bnQ6IHJhbmdlQ292LmNvdW50LFxuICB9O1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
|
||||
64
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/clone.mjs
generated
vendored
64
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/clone.mjs
generated
vendored
|
|
@ -1,64 +0,0 @@
|
|||
/**
|
||||
* Creates a deep copy of a process coverage.
|
||||
*
|
||||
* @param processCov Process coverage to clone.
|
||||
* @return Cloned process coverage.
|
||||
*/
|
||||
export function cloneProcessCov(processCov) {
|
||||
const result = [];
|
||||
for (const scriptCov of processCov.result) {
|
||||
result.push(cloneScriptCov(scriptCov));
|
||||
}
|
||||
return {
|
||||
result,
|
||||
};
|
||||
}
|
||||
/**
|
||||
* Creates a deep copy of a script coverage.
|
||||
*
|
||||
* @param scriptCov Script coverage to clone.
|
||||
* @return Cloned script coverage.
|
||||
*/
|
||||
export function cloneScriptCov(scriptCov) {
|
||||
const functions = [];
|
||||
for (const functionCov of scriptCov.functions) {
|
||||
functions.push(cloneFunctionCov(functionCov));
|
||||
}
|
||||
return {
|
||||
scriptId: scriptCov.scriptId,
|
||||
url: scriptCov.url,
|
||||
functions,
|
||||
};
|
||||
}
|
||||
/**
|
||||
* Creates a deep copy of a function coverage.
|
||||
*
|
||||
* @param functionCov Function coverage to clone.
|
||||
* @return Cloned function coverage.
|
||||
*/
|
||||
export function cloneFunctionCov(functionCov) {
|
||||
const ranges = [];
|
||||
for (const rangeCov of functionCov.ranges) {
|
||||
ranges.push(cloneRangeCov(rangeCov));
|
||||
}
|
||||
return {
|
||||
functionName: functionCov.functionName,
|
||||
ranges,
|
||||
isBlockCoverage: functionCov.isBlockCoverage,
|
||||
};
|
||||
}
|
||||
/**
|
||||
* Creates a deep copy of a function coverage.
|
||||
*
|
||||
* @param rangeCov Range coverage to clone.
|
||||
* @return Cloned range coverage.
|
||||
*/
|
||||
export function cloneRangeCov(rangeCov) {
|
||||
return {
|
||||
startOffset: rangeCov.startOffset,
|
||||
endOffset: rangeCov.endOffset,
|
||||
count: rangeCov.count,
|
||||
};
|
||||
}
|
||||
|
||||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9zcmMvY2xvbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUFDLFVBQWdDO0lBQzlELE1BQU0sTUFBTSxHQUFnQixFQUFFLENBQUM7SUFDL0IsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLENBQUMsTUFBTSxFQUFFO1FBQ3pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7S0FDeEM7SUFFRCxPQUFPO1FBQ0wsTUFBTTtLQUNQLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLFNBQThCO0lBQzNELE1BQU0sU0FBUyxHQUFrQixFQUFFLENBQUM7SUFDcEMsS0FBSyxNQUFNLFdBQVcsSUFBSSxTQUFTLENBQUMsU0FBUyxFQUFFO1FBQzdDLFNBQVMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztLQUMvQztJQUVELE9BQU87UUFDTCxRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVE7UUFDNUIsR0FBRyxFQUFFLFNBQVMsQ0FBQyxHQUFHO1FBQ2xCLFNBQVM7S0FDVixDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLFdBQWtDO0lBQ2pFLE1BQU0sTUFBTSxHQUFlLEVBQUUsQ0FBQztJQUM5QixLQUFLLE1BQU0sUUFBUSxJQUFJLFdBQVcsQ0FBQyxNQUFNLEVBQUU7UUFDekMsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztLQUN0QztJQUVELE9BQU87UUFDTCxZQUFZLEVBQUUsV0FBVyxDQUFDLFlBQVk7UUFDdEMsTUFBTTtRQUNOLGVBQWUsRUFBRSxXQUFXLENBQUMsZUFBZTtLQUM3QyxDQUFDO0FBQ0osQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGFBQWEsQ0FBQyxRQUE0QjtJQUN4RCxPQUFPO1FBQ0wsV0FBVyxFQUFFLFFBQVEsQ0FBQyxXQUFXO1FBQ2pDLFNBQVMsRUFBRSxRQUFRLENBQUMsU0FBUztRQUM3QixLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7S0FDdEIsQ0FBQztBQUNKLENBQUMiLCJmaWxlIjoiY2xvbmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGdW5jdGlvbkNvdiwgUHJvY2Vzc0NvdiwgUmFuZ2VDb3YsIFNjcmlwdENvdiB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlZXAgY29weSBvZiBhIHByb2Nlc3MgY292ZXJhZ2UuXG4gKlxuICogQHBhcmFtIHByb2Nlc3NDb3YgUHJvY2VzcyBjb3ZlcmFnZSB0byBjbG9uZS5cbiAqIEByZXR1cm4gQ2xvbmVkIHByb2Nlc3MgY292ZXJhZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZVByb2Nlc3NDb3YocHJvY2Vzc0NvdjogUmVhZG9ubHk8UHJvY2Vzc0Nvdj4pOiBQcm9jZXNzQ292IHtcbiAgY29uc3QgcmVzdWx0OiBTY3JpcHRDb3ZbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHNjcmlwdENvdiBvZiBwcm9jZXNzQ292LnJlc3VsdCkge1xuICAgIHJlc3VsdC5wdXNoKGNsb25lU2NyaXB0Q292KHNjcmlwdENvdikpO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICByZXN1bHQsXG4gIH07XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIGRlZXAgY29weSBvZiBhIHNjcmlwdCBjb3ZlcmFnZS5cbiAqXG4gKiBAcGFyYW0gc2NyaXB0Q292IFNjcmlwdCBjb3ZlcmFnZSB0byBjbG9uZS5cbiAqIEByZXR1cm4gQ2xvbmVkIHNjcmlwdCBjb3ZlcmFnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb25lU2NyaXB0Q292KHNjcmlwdENvdjogUmVhZG9ubHk8U2NyaXB0Q292Pik6IFNjcmlwdENvdiB7XG4gIGNvbnN0IGZ1bmN0aW9uczogRnVuY3Rpb25Db3ZbXSA9IFtdO1xuICBmb3IgKGNvbnN0IGZ1bmN0aW9uQ292IG9mIHNjcmlwdENvdi5mdW5jdGlvbnMpIHtcbiAgICBmdW5jdGlvbnMucHVzaChjbG9uZUZ1bmN0aW9uQ292KGZ1bmN0aW9uQ292KSk7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHNjcmlwdElkOiBzY3JpcHRDb3Yuc2NyaXB0SWQsXG4gICAgdXJsOiBzY3JpcHRDb3YudXJsLFxuICAgIGZ1bmN0aW9ucyxcbiAgfTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgZGVlcCBjb3B5IG9mIGEgZnVuY3Rpb24gY292ZXJhZ2UuXG4gKlxuICogQHBhcmFtIGZ1bmN0aW9uQ292IEZ1bmN0aW9uIGNvdmVyYWdlIHRvIGNsb25lLlxuICogQHJldHVybiBDbG9uZWQgZnVuY3Rpb24gY292ZXJhZ2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjbG9uZUZ1bmN0aW9uQ292KGZ1bmN0aW9uQ292OiBSZWFkb25seTxGdW5jdGlvbkNvdj4pOiBGdW5jdGlvbkNvdiB7XG4gIGNvbnN0IHJhbmdlczogUmFuZ2VDb3ZbXSA9IFtdO1xuICBmb3IgKGNvbnN0IHJhbmdlQ292IG9mIGZ1bmN0aW9uQ292LnJhbmdlcykge1xuICAgIHJhbmdlcy5wdXNoKGNsb25lUmFuZ2VDb3YocmFuZ2VDb3YpKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZnVuY3Rpb25OYW1lOiBmdW5jdGlvbkNvdi5mdW5jdGlvbk5hbWUsXG4gICAgcmFuZ2VzLFxuICAgIGlzQmxvY2tDb3ZlcmFnZTogZnVuY3Rpb25Db3YuaXNCbG9ja0NvdmVyYWdlLFxuICB9O1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBkZWVwIGNvcHkgb2YgYSBmdW5jdGlvbiBjb3ZlcmFnZS5cbiAqXG4gKiBAcGFyYW0gcmFuZ2VDb3YgUmFuZ2UgY292ZXJhZ2UgdG8gY2xvbmUuXG4gKiBAcmV0dXJuIENsb25lZCByYW5nZSBjb3ZlcmFnZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb25lUmFuZ2VDb3YocmFuZ2VDb3Y6IFJlYWRvbmx5PFJhbmdlQ292Pik6IFJhbmdlQ292IHtcbiAgcmV0dXJuIHtcbiAgICBzdGFydE9mZnNldDogcmFuZ2VDb3Yuc3RhcnRPZmZzZXQsXG4gICAgZW5kT2Zmc2V0OiByYW5nZUNvdi5lbmRPZmZzZXQsXG4gICAgY291bnQ6IHJhbmdlQ292LmNvdW50LFxuICB9O1xufVxuIl0sInNvdXJjZVJvb3QiOiIifQ==
|
||||
21
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/compare.d.ts
generated
vendored
21
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/compare.d.ts
generated
vendored
|
|
@ -1,21 +0,0 @@
|
|||
import { FunctionCov, RangeCov, ScriptCov } from "./types";
|
||||
/**
|
||||
* Compares two script coverages.
|
||||
*
|
||||
* The result corresponds to the comparison of their `url` value (alphabetical sort).
|
||||
*/
|
||||
export declare function compareScriptCovs(a: Readonly<ScriptCov>, b: Readonly<ScriptCov>): number;
|
||||
/**
|
||||
* Compares two function coverages.
|
||||
*
|
||||
* The result corresponds to the comparison of the root ranges.
|
||||
*/
|
||||
export declare function compareFunctionCovs(a: Readonly<FunctionCov>, b: Readonly<FunctionCov>): number;
|
||||
/**
|
||||
* Compares two range coverages.
|
||||
*
|
||||
* The ranges are first ordered by ascending `startOffset` and then by
|
||||
* descending `endOffset`.
|
||||
* This corresponds to a pre-order tree traversal.
|
||||
*/
|
||||
export declare function compareRangeCovs(a: Readonly<RangeCov>, b: Readonly<RangeCov>): number;
|
||||
46
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/compare.js
generated
vendored
46
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/compare.js
generated
vendored
|
|
@ -1,46 +0,0 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
/**
|
||||
* Compares two script coverages.
|
||||
*
|
||||
* The result corresponds to the comparison of their `url` value (alphabetical sort).
|
||||
*/
|
||||
function compareScriptCovs(a, b) {
|
||||
if (a.url === b.url) {
|
||||
return 0;
|
||||
}
|
||||
else if (a.url < b.url) {
|
||||
return -1;
|
||||
}
|
||||
else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
exports.compareScriptCovs = compareScriptCovs;
|
||||
/**
|
||||
* Compares two function coverages.
|
||||
*
|
||||
* The result corresponds to the comparison of the root ranges.
|
||||
*/
|
||||
function compareFunctionCovs(a, b) {
|
||||
return compareRangeCovs(a.ranges[0], b.ranges[0]);
|
||||
}
|
||||
exports.compareFunctionCovs = compareFunctionCovs;
|
||||
/**
|
||||
* Compares two range coverages.
|
||||
*
|
||||
* The ranges are first ordered by ascending `startOffset` and then by
|
||||
* descending `endOffset`.
|
||||
* This corresponds to a pre-order tree traversal.
|
||||
*/
|
||||
function compareRangeCovs(a, b) {
|
||||
if (a.startOffset !== b.startOffset) {
|
||||
return a.startOffset - b.startOffset;
|
||||
}
|
||||
else {
|
||||
return b.endOffset - a.endOffset;
|
||||
}
|
||||
}
|
||||
exports.compareRangeCovs = compareRangeCovs;
|
||||
|
||||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9zcmMvY29tcGFyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUVBOzs7O0dBSUc7QUFDSCxTQUFnQixpQkFBaUIsQ0FBQyxDQUFzQixFQUFFLENBQXNCO0lBQzlFLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxFQUFFO1FBQ25CLE9BQU8sQ0FBQyxDQUFDO0tBQ1Y7U0FBTSxJQUFJLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRTtRQUN4QixPQUFPLENBQUMsQ0FBQyxDQUFDO0tBQ1g7U0FBTTtRQUNMLE9BQU8sQ0FBQyxDQUFDO0tBQ1Y7QUFDSCxDQUFDO0FBUkQsOENBUUM7QUFFRDs7OztHQUlHO0FBQ0gsU0FBZ0IsbUJBQW1CLENBQUMsQ0FBd0IsRUFBRSxDQUF3QjtJQUNwRixPQUFPLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFGRCxrREFFQztBQUVEOzs7Ozs7R0FNRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLENBQXFCLEVBQUUsQ0FBcUI7SUFDM0UsSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUU7UUFDbkMsT0FBTyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUM7S0FDdEM7U0FBTTtRQUNMLE9BQU8sQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO0tBQ2xDO0FBQ0gsQ0FBQztBQU5ELDRDQU1DIiwiZmlsZSI6ImNvbXBhcmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGdW5jdGlvbkNvdiwgUmFuZ2VDb3YsIFNjcmlwdENvdiB9IGZyb20gXCIuL3R5cGVzXCI7XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIHNjcmlwdCBjb3ZlcmFnZXMuXG4gKlxuICogVGhlIHJlc3VsdCBjb3JyZXNwb25kcyB0byB0aGUgY29tcGFyaXNvbiBvZiB0aGVpciBgdXJsYCB2YWx1ZSAoYWxwaGFiZXRpY2FsIHNvcnQpLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZVNjcmlwdENvdnMoYTogUmVhZG9ubHk8U2NyaXB0Q292PiwgYjogUmVhZG9ubHk8U2NyaXB0Q292Pik6IG51bWJlciB7XG4gIGlmIChhLnVybCA9PT0gYi51cmwpIHtcbiAgICByZXR1cm4gMDtcbiAgfSBlbHNlIGlmIChhLnVybCA8IGIudXJsKSB7XG4gICAgcmV0dXJuIC0xO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAxO1xuICB9XG59XG5cbi8qKlxuICogQ29tcGFyZXMgdHdvIGZ1bmN0aW9uIGNvdmVyYWdlcy5cbiAqXG4gKiBUaGUgcmVzdWx0IGNvcnJlc3BvbmRzIHRvIHRoZSBjb21wYXJpc29uIG9mIHRoZSByb290IHJhbmdlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVGdW5jdGlvbkNvdnMoYTogUmVhZG9ubHk8RnVuY3Rpb25Db3Y+LCBiOiBSZWFkb25seTxGdW5jdGlvbkNvdj4pOiBudW1iZXIge1xuICByZXR1cm4gY29tcGFyZVJhbmdlQ292cyhhLnJhbmdlc1swXSwgYi5yYW5nZXNbMF0pO1xufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byByYW5nZSBjb3ZlcmFnZXMuXG4gKlxuICogVGhlIHJhbmdlcyBhcmUgZmlyc3Qgb3JkZXJlZCBieSBhc2NlbmRpbmcgYHN0YXJ0T2Zmc2V0YCBhbmQgdGhlbiBieVxuICogZGVzY2VuZGluZyBgZW5kT2Zmc2V0YC5cbiAqIFRoaXMgY29ycmVzcG9uZHMgdG8gYSBwcmUtb3JkZXIgdHJlZSB0cmF2ZXJzYWwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlUmFuZ2VDb3ZzKGE6IFJlYWRvbmx5PFJhbmdlQ292PiwgYjogUmVhZG9ubHk8UmFuZ2VDb3Y+KTogbnVtYmVyIHtcbiAgaWYgKGEuc3RhcnRPZmZzZXQgIT09IGIuc3RhcnRPZmZzZXQpIHtcbiAgICByZXR1cm4gYS5zdGFydE9mZnNldCAtIGIuc3RhcnRPZmZzZXQ7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGIuZW5kT2Zmc2V0IC0gYS5lbmRPZmZzZXQ7XG4gIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiIn0=
|
||||
41
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/compare.mjs
generated
vendored
41
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/compare.mjs
generated
vendored
|
|
@ -1,41 +0,0 @@
|
|||
/**
|
||||
* Compares two script coverages.
|
||||
*
|
||||
* The result corresponds to the comparison of their `url` value (alphabetical sort).
|
||||
*/
|
||||
export function compareScriptCovs(a, b) {
|
||||
if (a.url === b.url) {
|
||||
return 0;
|
||||
}
|
||||
else if (a.url < b.url) {
|
||||
return -1;
|
||||
}
|
||||
else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Compares two function coverages.
|
||||
*
|
||||
* The result corresponds to the comparison of the root ranges.
|
||||
*/
|
||||
export function compareFunctionCovs(a, b) {
|
||||
return compareRangeCovs(a.ranges[0], b.ranges[0]);
|
||||
}
|
||||
/**
|
||||
* Compares two range coverages.
|
||||
*
|
||||
* The ranges are first ordered by ascending `startOffset` and then by
|
||||
* descending `endOffset`.
|
||||
* This corresponds to a pre-order tree traversal.
|
||||
*/
|
||||
export function compareRangeCovs(a, b) {
|
||||
if (a.startOffset !== b.startOffset) {
|
||||
return a.startOffset - b.startOffset;
|
||||
}
|
||||
else {
|
||||
return b.endOffset - a.endOffset;
|
||||
}
|
||||
}
|
||||
|
||||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9zcmMvY29tcGFyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGlCQUFpQixDQUFDLENBQXNCLEVBQUUsQ0FBc0I7SUFDOUUsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLEVBQUU7UUFDbkIsT0FBTyxDQUFDLENBQUM7S0FDVjtTQUFNLElBQUksQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFO1FBQ3hCLE9BQU8sQ0FBQyxDQUFDLENBQUM7S0FDWDtTQUFNO1FBQ0wsT0FBTyxDQUFDLENBQUM7S0FDVjtBQUNILENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLG1CQUFtQixDQUFDLENBQXdCLEVBQUUsQ0FBd0I7SUFDcEYsT0FBTyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNwRCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGdCQUFnQixDQUFDLENBQXFCLEVBQUUsQ0FBcUI7SUFDM0UsSUFBSSxDQUFDLENBQUMsV0FBVyxLQUFLLENBQUMsQ0FBQyxXQUFXLEVBQUU7UUFDbkMsT0FBTyxDQUFDLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxXQUFXLENBQUM7S0FDdEM7U0FBTTtRQUNMLE9BQU8sQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO0tBQ2xDO0FBQ0gsQ0FBQyIsImZpbGUiOiJjb21wYXJlLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRnVuY3Rpb25Db3YsIFJhbmdlQ292LCBTY3JpcHRDb3YgfSBmcm9tIFwiLi90eXBlc1wiO1xuXG4vKipcbiAqIENvbXBhcmVzIHR3byBzY3JpcHQgY292ZXJhZ2VzLlxuICpcbiAqIFRoZSByZXN1bHQgY29ycmVzcG9uZHMgdG8gdGhlIGNvbXBhcmlzb24gb2YgdGhlaXIgYHVybGAgdmFsdWUgKGFscGhhYmV0aWNhbCBzb3J0KS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNvbXBhcmVTY3JpcHRDb3ZzKGE6IFJlYWRvbmx5PFNjcmlwdENvdj4sIGI6IFJlYWRvbmx5PFNjcmlwdENvdj4pOiBudW1iZXIge1xuICBpZiAoYS51cmwgPT09IGIudXJsKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0gZWxzZSBpZiAoYS51cmwgPCBiLnVybCkge1xuICAgIHJldHVybiAtMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMTtcbiAgfVxufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBmdW5jdGlvbiBjb3ZlcmFnZXMuXG4gKlxuICogVGhlIHJlc3VsdCBjb3JyZXNwb25kcyB0byB0aGUgY29tcGFyaXNvbiBvZiB0aGUgcm9vdCByYW5nZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb21wYXJlRnVuY3Rpb25Db3ZzKGE6IFJlYWRvbmx5PEZ1bmN0aW9uQ292PiwgYjogUmVhZG9ubHk8RnVuY3Rpb25Db3Y+KTogbnVtYmVyIHtcbiAgcmV0dXJuIGNvbXBhcmVSYW5nZUNvdnMoYS5yYW5nZXNbMF0sIGIucmFuZ2VzWzBdKTtcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gcmFuZ2UgY292ZXJhZ2VzLlxuICpcbiAqIFRoZSByYW5nZXMgYXJlIGZpcnN0IG9yZGVyZWQgYnkgYXNjZW5kaW5nIGBzdGFydE9mZnNldGAgYW5kIHRoZW4gYnlcbiAqIGRlc2NlbmRpbmcgYGVuZE9mZnNldGAuXG4gKiBUaGlzIGNvcnJlc3BvbmRzIHRvIGEgcHJlLW9yZGVyIHRyZWUgdHJhdmVyc2FsLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY29tcGFyZVJhbmdlQ292cyhhOiBSZWFkb25seTxSYW5nZUNvdj4sIGI6IFJlYWRvbmx5PFJhbmdlQ292Pik6IG51bWJlciB7XG4gIGlmIChhLnN0YXJ0T2Zmc2V0ICE9PSBiLnN0YXJ0T2Zmc2V0KSB7XG4gICAgcmV0dXJuIGEuc3RhcnRPZmZzZXQgLSBiLnN0YXJ0T2Zmc2V0O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBiLmVuZE9mZnNldCAtIGEuZW5kT2Zmc2V0O1xuICB9XG59XG4iXSwic291cmNlUm9vdCI6IiJ9
|
||||
6
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/index.d.ts
generated
vendored
6
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/index.d.ts
generated
vendored
|
|
@ -1,6 +0,0 @@
|
|||
export { emitForest, emitForestLines, parseFunctionRanges, parseOffsets } from "./ascii";
|
||||
export { cloneFunctionCov, cloneProcessCov, cloneScriptCov, cloneRangeCov } from "./clone";
|
||||
export { compareScriptCovs, compareFunctionCovs, compareRangeCovs } from "./compare";
|
||||
export { mergeFunctionCovs, mergeProcessCovs, mergeScriptCovs } from "./merge";
|
||||
export { RangeTree } from "./range-tree";
|
||||
export { ProcessCov, ScriptCov, FunctionCov, RangeCov } from "./types";
|
||||
24
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/index.js
generated
vendored
24
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/index.js
generated
vendored
|
|
@ -1,24 +0,0 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
var ascii_1 = require("./ascii");
|
||||
exports.emitForest = ascii_1.emitForest;
|
||||
exports.emitForestLines = ascii_1.emitForestLines;
|
||||
exports.parseFunctionRanges = ascii_1.parseFunctionRanges;
|
||||
exports.parseOffsets = ascii_1.parseOffsets;
|
||||
var clone_1 = require("./clone");
|
||||
exports.cloneFunctionCov = clone_1.cloneFunctionCov;
|
||||
exports.cloneProcessCov = clone_1.cloneProcessCov;
|
||||
exports.cloneScriptCov = clone_1.cloneScriptCov;
|
||||
exports.cloneRangeCov = clone_1.cloneRangeCov;
|
||||
var compare_1 = require("./compare");
|
||||
exports.compareScriptCovs = compare_1.compareScriptCovs;
|
||||
exports.compareFunctionCovs = compare_1.compareFunctionCovs;
|
||||
exports.compareRangeCovs = compare_1.compareRangeCovs;
|
||||
var merge_1 = require("./merge");
|
||||
exports.mergeFunctionCovs = merge_1.mergeFunctionCovs;
|
||||
exports.mergeProcessCovs = merge_1.mergeProcessCovs;
|
||||
exports.mergeScriptCovs = merge_1.mergeScriptCovs;
|
||||
var range_tree_1 = require("./range-tree");
|
||||
exports.RangeTree = range_tree_1.RangeTree;
|
||||
|
||||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxpQ0FBeUY7QUFBaEYsNkJBQUEsVUFBVSxDQUFBO0FBQUUsa0NBQUEsZUFBZSxDQUFBO0FBQUUsc0NBQUEsbUJBQW1CLENBQUE7QUFBRSwrQkFBQSxZQUFZLENBQUE7QUFDdkUsaUNBQTJGO0FBQWxGLG1DQUFBLGdCQUFnQixDQUFBO0FBQUUsa0NBQUEsZUFBZSxDQUFBO0FBQUUsaUNBQUEsY0FBYyxDQUFBO0FBQUUsZ0NBQUEsYUFBYSxDQUFBO0FBQ3pFLHFDQUFxRjtBQUE1RSxzQ0FBQSxpQkFBaUIsQ0FBQTtBQUFFLHdDQUFBLG1CQUFtQixDQUFBO0FBQUUscUNBQUEsZ0JBQWdCLENBQUE7QUFDakUsaUNBQStFO0FBQXRFLG9DQUFBLGlCQUFpQixDQUFBO0FBQUUsbUNBQUEsZ0JBQWdCLENBQUE7QUFBRSxrQ0FBQSxlQUFlLENBQUE7QUFDN0QsMkNBQXlDO0FBQWhDLGlDQUFBLFNBQVMsQ0FBQSIsImZpbGUiOiJpbmRleC5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IGVtaXRGb3Jlc3QsIGVtaXRGb3Jlc3RMaW5lcywgcGFyc2VGdW5jdGlvblJhbmdlcywgcGFyc2VPZmZzZXRzIH0gZnJvbSBcIi4vYXNjaWlcIjtcbmV4cG9ydCB7IGNsb25lRnVuY3Rpb25Db3YsIGNsb25lUHJvY2Vzc0NvdiwgY2xvbmVTY3JpcHRDb3YsIGNsb25lUmFuZ2VDb3YgfSBmcm9tIFwiLi9jbG9uZVwiO1xuZXhwb3J0IHsgY29tcGFyZVNjcmlwdENvdnMsIGNvbXBhcmVGdW5jdGlvbkNvdnMsIGNvbXBhcmVSYW5nZUNvdnMgfSBmcm9tIFwiLi9jb21wYXJlXCI7XG5leHBvcnQgeyBtZXJnZUZ1bmN0aW9uQ292cywgbWVyZ2VQcm9jZXNzQ292cywgbWVyZ2VTY3JpcHRDb3ZzIH0gZnJvbSBcIi4vbWVyZ2VcIjtcbmV4cG9ydCB7IFJhbmdlVHJlZSB9IGZyb20gXCIuL3JhbmdlLXRyZWVcIjtcbmV4cG9ydCB7IFByb2Nlc3NDb3YsIFNjcmlwdENvdiwgRnVuY3Rpb25Db3YsIFJhbmdlQ292IH0gZnJvbSBcIi4vdHlwZXNcIjtcbiJdLCJzb3VyY2VSb290IjoiIn0=
|
||||
7
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/index.mjs
generated
vendored
7
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/index.mjs
generated
vendored
|
|
@ -1,7 +0,0 @@
|
|||
export { emitForest, emitForestLines, parseFunctionRanges, parseOffsets } from "./ascii";
|
||||
export { cloneFunctionCov, cloneProcessCov, cloneScriptCov, cloneRangeCov } from "./clone";
|
||||
export { compareScriptCovs, compareFunctionCovs, compareRangeCovs } from "./compare";
|
||||
export { mergeFunctionCovs, mergeProcessCovs, mergeScriptCovs } from "./merge";
|
||||
export { RangeTree } from "./range-tree";
|
||||
|
||||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUUsbUJBQW1CLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsY0FBYyxFQUFFLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMzRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsbUJBQW1CLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDckYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGVBQWUsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sY0FBYyxDQUFDIiwiZmlsZSI6ImluZGV4LmpzIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgZW1pdEZvcmVzdCwgZW1pdEZvcmVzdExpbmVzLCBwYXJzZUZ1bmN0aW9uUmFuZ2VzLCBwYXJzZU9mZnNldHMgfSBmcm9tIFwiLi9hc2NpaVwiO1xuZXhwb3J0IHsgY2xvbmVGdW5jdGlvbkNvdiwgY2xvbmVQcm9jZXNzQ292LCBjbG9uZVNjcmlwdENvdiwgY2xvbmVSYW5nZUNvdiB9IGZyb20gXCIuL2Nsb25lXCI7XG5leHBvcnQgeyBjb21wYXJlU2NyaXB0Q292cywgY29tcGFyZUZ1bmN0aW9uQ292cywgY29tcGFyZVJhbmdlQ292cyB9IGZyb20gXCIuL2NvbXBhcmVcIjtcbmV4cG9ydCB7IG1lcmdlRnVuY3Rpb25Db3ZzLCBtZXJnZVByb2Nlc3NDb3ZzLCBtZXJnZVNjcmlwdENvdnMgfSBmcm9tIFwiLi9tZXJnZVwiO1xuZXhwb3J0IHsgUmFuZ2VUcmVlIH0gZnJvbSBcIi4vcmFuZ2UtdHJlZVwiO1xuZXhwb3J0IHsgUHJvY2Vzc0NvdiwgU2NyaXB0Q292LCBGdW5jdGlvbkNvdiwgUmFuZ2VDb3YgfSBmcm9tIFwiLi90eXBlc1wiO1xuIl0sInNvdXJjZVJvb3QiOiIifQ==
|
||||
39
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/merge.d.ts
generated
vendored
39
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/merge.d.ts
generated
vendored
|
|
@ -1,39 +0,0 @@
|
|||
import { FunctionCov, ProcessCov, ScriptCov } from "./types";
|
||||
/**
|
||||
* Merges a list of process coverages.
|
||||
*
|
||||
* The result is normalized.
|
||||
* The input values may be mutated, it is not safe to use them after passing
|
||||
* them to this function.
|
||||
* The computation is synchronous.
|
||||
*
|
||||
* @param processCovs Process coverages to merge.
|
||||
* @return Merged process coverage.
|
||||
*/
|
||||
export declare function mergeProcessCovs(processCovs: ReadonlyArray<ProcessCov>): ProcessCov;
|
||||
/**
|
||||
* Merges a list of matching script coverages.
|
||||
*
|
||||
* Scripts are matching if they have the same `url`.
|
||||
* The result is normalized.
|
||||
* The input values may be mutated, it is not safe to use them after passing
|
||||
* them to this function.
|
||||
* The computation is synchronous.
|
||||
*
|
||||
* @param scriptCovs Process coverages to merge.
|
||||
* @return Merged script coverage, or `undefined` if the input list was empty.
|
||||
*/
|
||||
export declare function mergeScriptCovs(scriptCovs: ReadonlyArray<ScriptCov>): ScriptCov | undefined;
|
||||
/**
|
||||
* Merges a list of matching function coverages.
|
||||
*
|
||||
* Functions are matching if their root ranges have the same span.
|
||||
* The result is normalized.
|
||||
* The input values may be mutated, it is not safe to use them after passing
|
||||
* them to this function.
|
||||
* The computation is synchronous.
|
||||
*
|
||||
* @param funcCovs Function coverages to merge.
|
||||
* @return Merged function coverage, or `undefined` if the input list was empty.
|
||||
*/
|
||||
export declare function mergeFunctionCovs(funcCovs: ReadonlyArray<FunctionCov>): FunctionCov | undefined;
|
||||
302
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/merge.js
generated
vendored
302
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/merge.js
generated
vendored
File diff suppressed because one or more lines are too long
297
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/merge.mjs
generated
vendored
297
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/merge.mjs
generated
vendored
File diff suppressed because one or more lines are too long
53
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/normalize.d.ts
generated
vendored
53
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/normalize.d.ts
generated
vendored
|
|
@ -1,53 +0,0 @@
|
|||
import { RangeTree } from "./range-tree";
|
||||
import { FunctionCov, ProcessCov, ScriptCov } from "./types";
|
||||
/**
|
||||
* Normalizes a process coverage.
|
||||
*
|
||||
* Sorts the scripts alphabetically by `url`.
|
||||
* Reassigns script ids: the script at index `0` receives `"0"`, the script at
|
||||
* index `1` receives `"1"` etc.
|
||||
* This does not normalize the script coverages.
|
||||
*
|
||||
* @param processCov Process coverage to normalize.
|
||||
*/
|
||||
export declare function normalizeProcessCov(processCov: ProcessCov): void;
|
||||
/**
|
||||
* Normalizes a process coverage deeply.
|
||||
*
|
||||
* Normalizes the script coverages deeply, then normalizes the process coverage
|
||||
* itself.
|
||||
*
|
||||
* @param processCov Process coverage to normalize.
|
||||
*/
|
||||
export declare function deepNormalizeProcessCov(processCov: ProcessCov): void;
|
||||
/**
|
||||
* Normalizes a script coverage.
|
||||
*
|
||||
* Sorts the function by root range (pre-order sort).
|
||||
* This does not normalize the function coverages.
|
||||
*
|
||||
* @param scriptCov Script coverage to normalize.
|
||||
*/
|
||||
export declare function normalizeScriptCov(scriptCov: ScriptCov): void;
|
||||
/**
|
||||
* Normalizes a script coverage deeply.
|
||||
*
|
||||
* Normalizes the function coverages deeply, then normalizes the script coverage
|
||||
* itself.
|
||||
*
|
||||
* @param scriptCov Script coverage to normalize.
|
||||
*/
|
||||
export declare function deepNormalizeScriptCov(scriptCov: ScriptCov): void;
|
||||
/**
|
||||
* Normalizes a function coverage.
|
||||
*
|
||||
* Sorts the ranges (pre-order sort).
|
||||
* TODO: Tree-based normalization of the ranges.
|
||||
*
|
||||
* @param funcCov Function coverage to normalize.
|
||||
*/
|
||||
export declare function normalizeFunctionCov(funcCov: FunctionCov): void;
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
export declare function normalizeRangeTree(tree: RangeTree): void;
|
||||
87
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/normalize.js
generated
vendored
87
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/normalize.js
generated
vendored
File diff suppressed because one or more lines are too long
79
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/normalize.mjs
generated
vendored
79
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/normalize.mjs
generated
vendored
File diff suppressed because one or more lines are too long
44
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/package.json
generated
vendored
44
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/package.json
generated
vendored
|
|
@ -1,44 +0,0 @@
|
|||
{
|
||||
"name": "@bcoe/v8-coverage",
|
||||
"version": "0.2.3",
|
||||
"description": "Helper functions for V8 coverage files.",
|
||||
"author": "Charles Samborski <demurgos@demurgos.net> (https://demurgos.net)",
|
||||
"license": "MIT",
|
||||
"main": "index",
|
||||
"types": "index.d.ts",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/demurgos/v8-coverage.git"
|
||||
},
|
||||
"homepage": "https://demurgos.github.io/v8-coverage",
|
||||
"devDependencies": {
|
||||
"@types/chai": "^4.1.4",
|
||||
"@types/gulp": "^4.0.5",
|
||||
"@types/minimist": "^1.2.0",
|
||||
"@types/mocha": "^5.2.2",
|
||||
"@types/node": "^10.5.4",
|
||||
"chai": "^4.1.2",
|
||||
"codecov": "^3.0.2",
|
||||
"gulp": "^4.0.0",
|
||||
"gulp-cli": "^2.0.1",
|
||||
"minimist": "^1.2.0",
|
||||
"pre-commit": "^1.2.2",
|
||||
"ts-node": "^8.3.0",
|
||||
"turbo-gulp": "^0.20.1"
|
||||
},
|
||||
"nyc": {
|
||||
"include": [
|
||||
"build/test/lib/**/*.js",
|
||||
"build/test/lib/**/*.mjs"
|
||||
],
|
||||
"reporter": [
|
||||
"text",
|
||||
"html"
|
||||
],
|
||||
"extension": [
|
||||
".mjs"
|
||||
]
|
||||
},
|
||||
"gitHead": "529387e2bd3e0ba0b9336d80ec563aee593331e1",
|
||||
"private": false
|
||||
}
|
||||
24
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/range-tree.d.ts
generated
vendored
24
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/range-tree.d.ts
generated
vendored
|
|
@ -1,24 +0,0 @@
|
|||
import { RangeCov } from "./types";
|
||||
export declare class RangeTree {
|
||||
start: number;
|
||||
end: number;
|
||||
delta: number;
|
||||
children: RangeTree[];
|
||||
constructor(start: number, end: number, delta: number, children: RangeTree[]);
|
||||
/**
|
||||
* @precodition `ranges` are well-formed and pre-order sorted
|
||||
*/
|
||||
static fromSortedRanges(ranges: ReadonlyArray<RangeCov>): RangeTree | undefined;
|
||||
normalize(): void;
|
||||
/**
|
||||
* @precondition `tree.start < value && value < tree.end`
|
||||
* @return RangeTree Right part
|
||||
*/
|
||||
split(value: number): RangeTree;
|
||||
/**
|
||||
* Get the range coverages corresponding to the tree.
|
||||
*
|
||||
* The ranges are pre-order sorted.
|
||||
*/
|
||||
toRanges(): RangeCov[];
|
||||
}
|
||||
139
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/range-tree.js
generated
vendored
139
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/range-tree.js
generated
vendored
File diff suppressed because one or more lines are too long
136
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/range-tree.mjs
generated
vendored
136
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/range-tree.mjs
generated
vendored
File diff suppressed because one or more lines are too long
62
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/tsconfig.json
generated
vendored
62
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/tsconfig.json
generated
vendored
|
|
@ -1,62 +0,0 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"allowJs": false,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"allowUnreachableCode": false,
|
||||
"allowUnusedLabels": false,
|
||||
"alwaysStrict": true,
|
||||
"charset": "utf8",
|
||||
"checkJs": false,
|
||||
"declaration": true,
|
||||
"disableSizeLimit": false,
|
||||
"downlevelIteration": false,
|
||||
"emitBOM": false,
|
||||
"emitDecoratorMetadata": true,
|
||||
"esModuleInterop": true,
|
||||
"experimentalDecorators": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"importHelpers": false,
|
||||
"inlineSourceMap": false,
|
||||
"inlineSources": false,
|
||||
"isolatedModules": false,
|
||||
"lib": [
|
||||
"es2017",
|
||||
"esnext.asynciterable"
|
||||
],
|
||||
"locale": "en-us",
|
||||
"module": "commonjs",
|
||||
"moduleResolution": "node",
|
||||
"newLine": "lf",
|
||||
"noEmit": false,
|
||||
"noEmitHelpers": false,
|
||||
"noEmitOnError": true,
|
||||
"noErrorTruncation": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"noImplicitAny": true,
|
||||
"noImplicitReturns": true,
|
||||
"noImplicitThis": true,
|
||||
"noStrictGenericChecks": false,
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": true,
|
||||
"noImplicitUseStrict": false,
|
||||
"noLib": false,
|
||||
"noResolve": false,
|
||||
"preserveConstEnums": true,
|
||||
"removeComments": false,
|
||||
"skipLibCheck": true,
|
||||
"sourceMap": true,
|
||||
"strict": true,
|
||||
"strictNullChecks": true,
|
||||
"suppressExcessPropertyErrors": false,
|
||||
"suppressImplicitAnyIndexErrors": false,
|
||||
"target": "es2017",
|
||||
"traceResolution": false,
|
||||
"rootDir": "",
|
||||
"outDir": "../../build/lib",
|
||||
"typeRoots": []
|
||||
},
|
||||
"include": [
|
||||
"**/*.ts"
|
||||
],
|
||||
"exclude": []
|
||||
}
|
||||
22
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/types.d.ts
generated
vendored
22
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/types.d.ts
generated
vendored
|
|
@ -1,22 +0,0 @@
|
|||
export interface ProcessCov {
|
||||
result: ScriptCov[];
|
||||
}
|
||||
export interface ScriptCov {
|
||||
scriptId: string;
|
||||
url: string;
|
||||
functions: FunctionCov[];
|
||||
}
|
||||
export interface FunctionCov {
|
||||
functionName: string;
|
||||
ranges: RangeCov[];
|
||||
isBlockCoverage: boolean;
|
||||
}
|
||||
export interface Range {
|
||||
readonly start: number;
|
||||
readonly end: number;
|
||||
}
|
||||
export interface RangeCov {
|
||||
startOffset: number;
|
||||
endOffset: number;
|
||||
count: number;
|
||||
}
|
||||
4
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/types.js
generated
vendored
4
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/types.js
generated
vendored
|
|
@ -1,4 +0,0 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
|
||||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJ0eXBlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0NvdiB7XG4gIHJlc3VsdDogU2NyaXB0Q292W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NyaXB0Q292IHtcbiAgc2NyaXB0SWQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGZ1bmN0aW9uczogRnVuY3Rpb25Db3ZbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvbkNvdiB7XG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nO1xuICByYW5nZXM6IFJhbmdlQ292W107XG4gIGlzQmxvY2tDb3ZlcmFnZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSYW5nZSB7XG4gIHJlYWRvbmx5IHN0YXJ0OiBudW1iZXI7XG4gIHJlYWRvbmx5IGVuZDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJhbmdlQ292IHtcbiAgc3RhcnRPZmZzZXQ6IG51bWJlcjtcbiAgZW5kT2Zmc2V0OiBudW1iZXI7XG4gIGNvdW50OiBudW1iZXI7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9
|
||||
3
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/types.mjs
generated
vendored
3
syntax/vscode/node_modules/@bcoe/v8-coverage/dist/lib/types.mjs
generated
vendored
|
|
@ -1,3 +0,0 @@
|
|||
|
||||
|
||||
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIl9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJ0eXBlcy5qcyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgUHJvY2Vzc0NvdiB7XG4gIHJlc3VsdDogU2NyaXB0Q292W107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NyaXB0Q292IHtcbiAgc2NyaXB0SWQ6IHN0cmluZztcbiAgdXJsOiBzdHJpbmc7XG4gIGZ1bmN0aW9uczogRnVuY3Rpb25Db3ZbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGdW5jdGlvbkNvdiB7XG4gIGZ1bmN0aW9uTmFtZTogc3RyaW5nO1xuICByYW5nZXM6IFJhbmdlQ292W107XG4gIGlzQmxvY2tDb3ZlcmFnZTogYm9vbGVhbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBSYW5nZSB7XG4gIHJlYWRvbmx5IHN0YXJ0OiBudW1iZXI7XG4gIHJlYWRvbmx5IGVuZDogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFJhbmdlQ292IHtcbiAgc3RhcnRPZmZzZXQ6IG51bWJlcjtcbiAgZW5kT2Zmc2V0OiBudW1iZXI7XG4gIGNvdW50OiBudW1iZXI7XG59XG4iXSwic291cmNlUm9vdCI6IiJ9
|
||||
95
syntax/vscode/node_modules/@bcoe/v8-coverage/gulpfile.ts
generated
vendored
95
syntax/vscode/node_modules/@bcoe/v8-coverage/gulpfile.ts
generated
vendored
|
|
@ -1,95 +0,0 @@
|
|||
import * as buildTools from "turbo-gulp";
|
||||
import { LibTarget, registerLibTasks } from "turbo-gulp/targets/lib";
|
||||
import { MochaTarget, registerMochaTasks } from "turbo-gulp/targets/mocha";
|
||||
|
||||
import gulp from "gulp";
|
||||
import minimist from "minimist";
|
||||
|
||||
interface Options {
|
||||
devDist?: string;
|
||||
}
|
||||
|
||||
const options: Options & minimist.ParsedArgs = minimist(process.argv.slice(2), {
|
||||
string: ["devDist"],
|
||||
default: {devDist: undefined},
|
||||
alias: {devDist: "dev-dist"},
|
||||
});
|
||||
|
||||
const project: buildTools.Project = {
|
||||
root: __dirname,
|
||||
packageJson: "package.json",
|
||||
buildDir: "build",
|
||||
distDir: "dist",
|
||||
srcDir: "src",
|
||||
typescript: {}
|
||||
};
|
||||
|
||||
const lib: LibTarget = {
|
||||
project,
|
||||
name: "lib",
|
||||
srcDir: "src/lib",
|
||||
scripts: ["**/*.ts"],
|
||||
mainModule: "index",
|
||||
dist: {
|
||||
packageJsonMap: (old: buildTools.PackageJson): buildTools.PackageJson => {
|
||||
const version: string = options.devDist !== undefined ? `${old.version}-build.${options.devDist}` : old.version;
|
||||
return <any> {...old, version, scripts: undefined, private: false};
|
||||
},
|
||||
npmPublish: {
|
||||
tag: options.devDist !== undefined ? "next" : "latest",
|
||||
},
|
||||
},
|
||||
tscOptions: {
|
||||
declaration: true,
|
||||
skipLibCheck: true,
|
||||
},
|
||||
typedoc: {
|
||||
dir: "typedoc",
|
||||
name: "Helpers for V8 coverage files",
|
||||
deploy: {
|
||||
repository: "git@github.com:demurgos/v8-coverage.git",
|
||||
branch: "gh-pages",
|
||||
},
|
||||
},
|
||||
copy: [
|
||||
{
|
||||
files: ["**/*.json"],
|
||||
},
|
||||
],
|
||||
clean: {
|
||||
dirs: ["build/lib", "dist/lib"],
|
||||
},
|
||||
};
|
||||
|
||||
const test: MochaTarget = {
|
||||
project,
|
||||
name: "test",
|
||||
srcDir: "src",
|
||||
scripts: ["test/**/*.ts", "lib/**/*.ts", "e2e/*/*.ts"],
|
||||
customTypingsDir: "src/custom-typings",
|
||||
tscOptions: {
|
||||
allowSyntheticDefaultImports: true,
|
||||
esModuleInterop: true,
|
||||
skipLibCheck: true,
|
||||
},
|
||||
// generateTestMain: true,
|
||||
copy: [
|
||||
{
|
||||
src: "e2e",
|
||||
// <project-name>/(project|test-resources)/<any>
|
||||
files: ["*/project/**/*", "*/test-resources/**/*"],
|
||||
dest: "e2e",
|
||||
},
|
||||
],
|
||||
clean: {
|
||||
dirs: ["build/test"],
|
||||
},
|
||||
};
|
||||
|
||||
const libTasks: any = registerLibTasks(gulp, lib);
|
||||
registerMochaTasks(gulp, test);
|
||||
buildTools.projectTasks.registerAll(gulp, project);
|
||||
|
||||
gulp.task("all:tsconfig.json", gulp.parallel("lib:tsconfig.json", "test:tsconfig.json"));
|
||||
gulp.task("dist", libTasks.dist);
|
||||
gulp.task("default", libTasks.dist);
|
||||
48
syntax/vscode/node_modules/@bcoe/v8-coverage/package.json
generated
vendored
48
syntax/vscode/node_modules/@bcoe/v8-coverage/package.json
generated
vendored
|
|
@ -1,48 +0,0 @@
|
|||
{
|
||||
"name": "@bcoe/v8-coverage",
|
||||
"version": "0.2.3",
|
||||
"description": "Helper functions for V8 coverage files.",
|
||||
"author": "Charles Samborski <demurgos@demurgos.net> (https://demurgos.net)",
|
||||
"license": "MIT",
|
||||
"main": "dist/lib/index",
|
||||
"types": "dist/lib/index.d.ts",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git://github.com/demurgos/v8-coverage.git"
|
||||
},
|
||||
"homepage": "https://demurgos.github.io/v8-coverage",
|
||||
"scripts": {
|
||||
"prepare": "gulp all:tsconfig.json && gulp dist",
|
||||
"pretest": "gulp lib:build",
|
||||
"test": "gulp test",
|
||||
"lint": "gulp :lint:fix"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/chai": "^4.1.4",
|
||||
"@types/gulp": "^4.0.5",
|
||||
"@types/minimist": "^1.2.0",
|
||||
"@types/mocha": "^5.2.2",
|
||||
"@types/node": "^10.5.4",
|
||||
"chai": "^4.1.2",
|
||||
"codecov": "^3.0.2",
|
||||
"gulp": "^4.0.0",
|
||||
"gulp-cli": "^2.0.1",
|
||||
"minimist": "^1.2.0",
|
||||
"pre-commit": "^1.2.2",
|
||||
"ts-node": "^8.3.0",
|
||||
"turbo-gulp": "^0.20.1"
|
||||
},
|
||||
"nyc": {
|
||||
"include": [
|
||||
"build/test/lib/**/*.js",
|
||||
"build/test/lib/**/*.mjs"
|
||||
],
|
||||
"reporter": [
|
||||
"text",
|
||||
"html"
|
||||
],
|
||||
"extension": [
|
||||
".mjs"
|
||||
]
|
||||
}
|
||||
}
|
||||
146
syntax/vscode/node_modules/@bcoe/v8-coverage/src/lib/ascii.ts
generated
vendored
146
syntax/vscode/node_modules/@bcoe/v8-coverage/src/lib/ascii.ts
generated
vendored
|
|
@ -1,146 +0,0 @@
|
|||
import { compareRangeCovs } from "./compare";
|
||||
import { RangeCov } from "./types";
|
||||
|
||||
interface ReadonlyRangeTree {
|
||||
readonly start: number;
|
||||
readonly end: number;
|
||||
readonly count: number;
|
||||
readonly children: ReadonlyRangeTree[];
|
||||
}
|
||||
|
||||
export function emitForest(trees: ReadonlyArray<ReadonlyRangeTree>): string {
|
||||
return emitForestLines(trees).join("\n");
|
||||
}
|
||||
|
||||
export function emitForestLines(trees: ReadonlyArray<ReadonlyRangeTree>): string[] {
|
||||
const colMap: Map<number, number> = getColMap(trees);
|
||||
const header: string = emitOffsets(colMap);
|
||||
return [header, ...trees.map(tree => emitTree(tree, colMap).join("\n"))];
|
||||
}
|
||||
|
||||
function getColMap(trees: Iterable<ReadonlyRangeTree>): Map<number, number> {
|
||||
const eventSet: Set<number> = new Set();
|
||||
for (const tree of trees) {
|
||||
const stack: ReadonlyRangeTree[] = [tree];
|
||||
while (stack.length > 0) {
|
||||
const cur: ReadonlyRangeTree = stack.pop()!;
|
||||
eventSet.add(cur.start);
|
||||
eventSet.add(cur.end);
|
||||
for (const child of cur.children) {
|
||||
stack.push(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
const events: number[] = [...eventSet];
|
||||
events.sort((a, b) => a - b);
|
||||
let maxDigits: number = 1;
|
||||
for (const event of events) {
|
||||
maxDigits = Math.max(maxDigits, event.toString(10).length);
|
||||
}
|
||||
const colWidth: number = maxDigits + 3;
|
||||
const colMap: Map<number, number> = new Map();
|
||||
for (const [i, event] of events.entries()) {
|
||||
colMap.set(event, i * colWidth);
|
||||
}
|
||||
return colMap;
|
||||
}
|
||||
|
||||
function emitTree(tree: ReadonlyRangeTree, colMap: Map<number, number>): string[] {
|
||||
const layers: ReadonlyRangeTree[][] = [];
|
||||
let nextLayer: ReadonlyRangeTree[] = [tree];
|
||||
while (nextLayer.length > 0) {
|
||||
const layer: ReadonlyRangeTree[] = nextLayer;
|
||||
layers.push(layer);
|
||||
nextLayer = [];
|
||||
for (const node of layer) {
|
||||
for (const child of node.children) {
|
||||
nextLayer.push(child);
|
||||
}
|
||||
}
|
||||
}
|
||||
return layers.map(layer => emitTreeLayer(layer, colMap));
|
||||
}
|
||||
|
||||
export function parseFunctionRanges(text: string, offsetMap: Map<number, number>): RangeCov[] {
|
||||
const result: RangeCov[] = [];
|
||||
for (const line of text.split("\n")) {
|
||||
for (const range of parseTreeLayer(line, offsetMap)) {
|
||||
result.push(range);
|
||||
}
|
||||
}
|
||||
result.sort(compareRangeCovs);
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* @param layer Sorted list of disjoint trees.
|
||||
* @param colMap
|
||||
*/
|
||||
function emitTreeLayer(layer: ReadonlyRangeTree[], colMap: Map<number, number>): string {
|
||||
const line: string[] = [];
|
||||
let curIdx: number = 0;
|
||||
for (const {start, end, count} of layer) {
|
||||
const startIdx: number = colMap.get(start)!;
|
||||
const endIdx: number = colMap.get(end)!;
|
||||
if (startIdx > curIdx) {
|
||||
line.push(" ".repeat(startIdx - curIdx));
|
||||
}
|
||||
line.push(emitRange(count, endIdx - startIdx));
|
||||
curIdx = endIdx;
|
||||
}
|
||||
return line.join("");
|
||||
}
|
||||
|
||||
function parseTreeLayer(text: string, offsetMap: Map<number, number>): RangeCov[] {
|
||||
const result: RangeCov[] = [];
|
||||
const regex: RegExp = /\[(\d+)-*\)/gs;
|
||||
while (true) {
|
||||
const match: RegExpMatchArray | null = regex.exec(text);
|
||||
if (match === null) {
|
||||
break;
|
||||
}
|
||||
const startIdx: number = match.index!;
|
||||
const endIdx: number = startIdx + match[0].length;
|
||||
const count: number = parseInt(match[1], 10);
|
||||
const startOffset: number | undefined = offsetMap.get(startIdx);
|
||||
const endOffset: number | undefined = offsetMap.get(endIdx);
|
||||
if (startOffset === undefined || endOffset === undefined) {
|
||||
throw new Error(`Invalid offsets for: ${JSON.stringify(text)}`);
|
||||
}
|
||||
result.push({startOffset, endOffset, count});
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function emitRange(count: number, len: number): string {
|
||||
const rangeStart: string = `[${count.toString(10)}`;
|
||||
const rangeEnd: string = ")";
|
||||
const hyphensLen: number = len - (rangeStart.length + rangeEnd.length);
|
||||
const hyphens: string = "-".repeat(Math.max(0, hyphensLen));
|
||||
return `${rangeStart}${hyphens}${rangeEnd}`;
|
||||
}
|
||||
|
||||
function emitOffsets(colMap: Map<number, number>): string {
|
||||
let line: string = "";
|
||||
for (const [event, col] of colMap) {
|
||||
if (line.length < col) {
|
||||
line += " ".repeat(col - line.length);
|
||||
}
|
||||
line += event.toString(10);
|
||||
}
|
||||
return line;
|
||||
}
|
||||
|
||||
export function parseOffsets(text: string): Map<number, number> {
|
||||
const result: Map<number, number> = new Map();
|
||||
const regex: RegExp = /\d+/gs;
|
||||
while (true) {
|
||||
const match: RegExpExecArray | null = regex.exec(text);
|
||||
if (match === null) {
|
||||
break;
|
||||
}
|
||||
result.set(match.index, parseInt(match[0], 10));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
70
syntax/vscode/node_modules/@bcoe/v8-coverage/src/lib/clone.ts
generated
vendored
70
syntax/vscode/node_modules/@bcoe/v8-coverage/src/lib/clone.ts
generated
vendored
|
|
@ -1,70 +0,0 @@
|
|||
import { FunctionCov, ProcessCov, RangeCov, ScriptCov } from "./types";
|
||||
|
||||
/**
|
||||
* Creates a deep copy of a process coverage.
|
||||
*
|
||||
* @param processCov Process coverage to clone.
|
||||
* @return Cloned process coverage.
|
||||
*/
|
||||
export function cloneProcessCov(processCov: Readonly<ProcessCov>): ProcessCov {
|
||||
const result: ScriptCov[] = [];
|
||||
for (const scriptCov of processCov.result) {
|
||||
result.push(cloneScriptCov(scriptCov));
|
||||
}
|
||||
|
||||
return {
|
||||
result,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a deep copy of a script coverage.
|
||||
*
|
||||
* @param scriptCov Script coverage to clone.
|
||||
* @return Cloned script coverage.
|
||||
*/
|
||||
export function cloneScriptCov(scriptCov: Readonly<ScriptCov>): ScriptCov {
|
||||
const functions: FunctionCov[] = [];
|
||||
for (const functionCov of scriptCov.functions) {
|
||||
functions.push(cloneFunctionCov(functionCov));
|
||||
}
|
||||
|
||||
return {
|
||||
scriptId: scriptCov.scriptId,
|
||||
url: scriptCov.url,
|
||||
functions,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a deep copy of a function coverage.
|
||||
*
|
||||
* @param functionCov Function coverage to clone.
|
||||
* @return Cloned function coverage.
|
||||
*/
|
||||
export function cloneFunctionCov(functionCov: Readonly<FunctionCov>): FunctionCov {
|
||||
const ranges: RangeCov[] = [];
|
||||
for (const rangeCov of functionCov.ranges) {
|
||||
ranges.push(cloneRangeCov(rangeCov));
|
||||
}
|
||||
|
||||
return {
|
||||
functionName: functionCov.functionName,
|
||||
ranges,
|
||||
isBlockCoverage: functionCov.isBlockCoverage,
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Creates a deep copy of a function coverage.
|
||||
*
|
||||
* @param rangeCov Range coverage to clone.
|
||||
* @return Cloned range coverage.
|
||||
*/
|
||||
export function cloneRangeCov(rangeCov: Readonly<RangeCov>): RangeCov {
|
||||
return {
|
||||
startOffset: rangeCov.startOffset,
|
||||
endOffset: rangeCov.endOffset,
|
||||
count: rangeCov.count,
|
||||
};
|
||||
}
|
||||
40
syntax/vscode/node_modules/@bcoe/v8-coverage/src/lib/compare.ts
generated
vendored
40
syntax/vscode/node_modules/@bcoe/v8-coverage/src/lib/compare.ts
generated
vendored
|
|
@ -1,40 +0,0 @@
|
|||
import { FunctionCov, RangeCov, ScriptCov } from "./types";
|
||||
|
||||
/**
|
||||
* Compares two script coverages.
|
||||
*
|
||||
* The result corresponds to the comparison of their `url` value (alphabetical sort).
|
||||
*/
|
||||
export function compareScriptCovs(a: Readonly<ScriptCov>, b: Readonly<ScriptCov>): number {
|
||||
if (a.url === b.url) {
|
||||
return 0;
|
||||
} else if (a.url < b.url) {
|
||||
return -1;
|
||||
} else {
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Compares two function coverages.
|
||||
*
|
||||
* The result corresponds to the comparison of the root ranges.
|
||||
*/
|
||||
export function compareFunctionCovs(a: Readonly<FunctionCov>, b: Readonly<FunctionCov>): number {
|
||||
return compareRangeCovs(a.ranges[0], b.ranges[0]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Compares two range coverages.
|
||||
*
|
||||
* The ranges are first ordered by ascending `startOffset` and then by
|
||||
* descending `endOffset`.
|
||||
* This corresponds to a pre-order tree traversal.
|
||||
*/
|
||||
export function compareRangeCovs(a: Readonly<RangeCov>, b: Readonly<RangeCov>): number {
|
||||
if (a.startOffset !== b.startOffset) {
|
||||
return a.startOffset - b.startOffset;
|
||||
} else {
|
||||
return b.endOffset - a.endOffset;
|
||||
}
|
||||
}
|
||||
6
syntax/vscode/node_modules/@bcoe/v8-coverage/src/lib/index.ts
generated
vendored
6
syntax/vscode/node_modules/@bcoe/v8-coverage/src/lib/index.ts
generated
vendored
|
|
@ -1,6 +0,0 @@
|
|||
export { emitForest, emitForestLines, parseFunctionRanges, parseOffsets } from "./ascii";
|
||||
export { cloneFunctionCov, cloneProcessCov, cloneScriptCov, cloneRangeCov } from "./clone";
|
||||
export { compareScriptCovs, compareFunctionCovs, compareRangeCovs } from "./compare";
|
||||
export { mergeFunctionCovs, mergeProcessCovs, mergeScriptCovs } from "./merge";
|
||||
export { RangeTree } from "./range-tree";
|
||||
export { ProcessCov, ScriptCov, FunctionCov, RangeCov } from "./types";
|
||||
343
syntax/vscode/node_modules/@bcoe/v8-coverage/src/lib/merge.ts
generated
vendored
343
syntax/vscode/node_modules/@bcoe/v8-coverage/src/lib/merge.ts
generated
vendored
|
|
@ -1,343 +0,0 @@
|
|||
import {
|
||||
deepNormalizeScriptCov,
|
||||
normalizeFunctionCov,
|
||||
normalizeProcessCov,
|
||||
normalizeRangeTree,
|
||||
normalizeScriptCov,
|
||||
} from "./normalize";
|
||||
import { RangeTree } from "./range-tree";
|
||||
import { FunctionCov, ProcessCov, Range, RangeCov, ScriptCov } from "./types";
|
||||
|
||||
/**
|
||||
* Merges a list of process coverages.
|
||||
*
|
||||
* The result is normalized.
|
||||
* The input values may be mutated, it is not safe to use them after passing
|
||||
* them to this function.
|
||||
* The computation is synchronous.
|
||||
*
|
||||
* @param processCovs Process coverages to merge.
|
||||
* @return Merged process coverage.
|
||||
*/
|
||||
export function mergeProcessCovs(processCovs: ReadonlyArray<ProcessCov>): ProcessCov {
|
||||
if (processCovs.length === 0) {
|
||||
return {result: []};
|
||||
}
|
||||
|
||||
const urlToScripts: Map<string, ScriptCov[]> = new Map();
|
||||
for (const processCov of processCovs) {
|
||||
for (const scriptCov of processCov.result) {
|
||||
let scriptCovs: ScriptCov[] | undefined = urlToScripts.get(scriptCov.url);
|
||||
if (scriptCovs === undefined) {
|
||||
scriptCovs = [];
|
||||
urlToScripts.set(scriptCov.url, scriptCovs);
|
||||
}
|
||||
scriptCovs.push(scriptCov);
|
||||
}
|
||||
}
|
||||
|
||||
const result: ScriptCov[] = [];
|
||||
for (const scripts of urlToScripts.values()) {
|
||||
// assert: `scripts.length > 0`
|
||||
result.push(mergeScriptCovs(scripts)!);
|
||||
}
|
||||
const merged: ProcessCov = {result};
|
||||
|
||||
normalizeProcessCov(merged);
|
||||
return merged;
|
||||
}
|
||||
|
||||
/**
|
||||
* Merges a list of matching script coverages.
|
||||
*
|
||||
* Scripts are matching if they have the same `url`.
|
||||
* The result is normalized.
|
||||
* The input values may be mutated, it is not safe to use them after passing
|
||||
* them to this function.
|
||||
* The computation is synchronous.
|
||||
*
|
||||
* @param scriptCovs Process coverages to merge.
|
||||
* @return Merged script coverage, or `undefined` if the input list was empty.
|
||||
*/
|
||||
export function mergeScriptCovs(scriptCovs: ReadonlyArray<ScriptCov>): ScriptCov | undefined {
|
||||
if (scriptCovs.length === 0) {
|
||||
return undefined;
|
||||
} else if (scriptCovs.length === 1) {
|
||||
const merged: ScriptCov = scriptCovs[0];
|
||||
deepNormalizeScriptCov(merged);
|
||||
return merged;
|
||||
}
|
||||
|
||||
const first: ScriptCov = scriptCovs[0];
|
||||
const scriptId: string = first.scriptId;
|
||||
const url: string = first.url;
|
||||
|
||||
const rangeToFuncs: Map<string, FunctionCov[]> = new Map();
|
||||
for (const scriptCov of scriptCovs) {
|
||||
for (const funcCov of scriptCov.functions) {
|
||||
const rootRange: string = stringifyFunctionRootRange(funcCov);
|
||||
let funcCovs: FunctionCov[] | undefined = rangeToFuncs.get(rootRange);
|
||||
|
||||
if (funcCovs === undefined ||
|
||||
// if the entry in rangeToFuncs is function-level granularity and
|
||||
// the new coverage is block-level, prefer block-level.
|
||||
(!funcCovs[0].isBlockCoverage && funcCov.isBlockCoverage)) {
|
||||
funcCovs = [];
|
||||
rangeToFuncs.set(rootRange, funcCovs);
|
||||
} else if (funcCovs[0].isBlockCoverage && !funcCov.isBlockCoverage) {
|
||||
// if the entry in rangeToFuncs is block-level granularity, we should
|
||||
// not append function level granularity.
|
||||
continue;
|
||||
}
|
||||
funcCovs.push(funcCov);
|
||||
}
|
||||
}
|
||||
|
||||
const functions: FunctionCov[] = [];
|
||||
for (const funcCovs of rangeToFuncs.values()) {
|
||||
// assert: `funcCovs.length > 0`
|
||||
functions.push(mergeFunctionCovs(funcCovs)!);
|
||||
}
|
||||
|
||||
const merged: ScriptCov = {scriptId, url, functions};
|
||||
normalizeScriptCov(merged);
|
||||
return merged;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns a string representation of the root range of the function.
|
||||
*
|
||||
* This string can be used to match function with same root range.
|
||||
* The string is derived from the start and end offsets of the root range of
|
||||
* the function.
|
||||
* This assumes that `ranges` is non-empty (true for valid function coverages).
|
||||
*
|
||||
* @param funcCov Function coverage with the range to stringify
|
||||
* @internal
|
||||
*/
|
||||
function stringifyFunctionRootRange(funcCov: Readonly<FunctionCov>): string {
|
||||
const rootRange: RangeCov = funcCov.ranges[0];
|
||||
return `${rootRange.startOffset.toString(10)};${rootRange.endOffset.toString(10)}`;
|
||||
}
|
||||
|
||||
/**
|
||||
* Merges a list of matching function coverages.
|
||||
*
|
||||
* Functions are matching if their root ranges have the same span.
|
||||
* The result is normalized.
|
||||
* The input values may be mutated, it is not safe to use them after passing
|
||||
* them to this function.
|
||||
* The computation is synchronous.
|
||||
*
|
||||
* @param funcCovs Function coverages to merge.
|
||||
* @return Merged function coverage, or `undefined` if the input list was empty.
|
||||
*/
|
||||
export function mergeFunctionCovs(funcCovs: ReadonlyArray<FunctionCov>): FunctionCov | undefined {
|
||||
if (funcCovs.length === 0) {
|
||||
return undefined;
|
||||
} else if (funcCovs.length === 1) {
|
||||
const merged: FunctionCov = funcCovs[0];
|
||||
normalizeFunctionCov(merged);
|
||||
return merged;
|
||||
}
|
||||
|
||||
const functionName: string = funcCovs[0].functionName;
|
||||
|
||||
const trees: RangeTree[] = [];
|
||||
for (const funcCov of funcCovs) {
|
||||
// assert: `fn.ranges.length > 0`
|
||||
// assert: `fn.ranges` is sorted
|
||||
trees.push(RangeTree.fromSortedRanges(funcCov.ranges)!);
|
||||
}
|
||||
|
||||
// assert: `trees.length > 0`
|
||||
const mergedTree: RangeTree = mergeRangeTrees(trees)!;
|
||||
normalizeRangeTree(mergedTree);
|
||||
const ranges: RangeCov[] = mergedTree.toRanges();
|
||||
const isBlockCoverage: boolean = !(ranges.length === 1 && ranges[0].count === 0);
|
||||
|
||||
const merged: FunctionCov = {functionName, ranges, isBlockCoverage};
|
||||
// assert: `merged` is normalized
|
||||
return merged;
|
||||
}
|
||||
|
||||
/**
|
||||
* @precondition Same `start` and `end` for all the trees
|
||||
*/
|
||||
function mergeRangeTrees(trees: ReadonlyArray<RangeTree>): RangeTree | undefined {
|
||||
if (trees.length <= 1) {
|
||||
return trees[0];
|
||||
}
|
||||
const first: RangeTree = trees[0];
|
||||
let delta: number = 0;
|
||||
for (const tree of trees) {
|
||||
delta += tree.delta;
|
||||
}
|
||||
const children: RangeTree[] = mergeRangeTreeChildren(trees);
|
||||
return new RangeTree(first.start, first.end, delta, children);
|
||||
}
|
||||
|
||||
class RangeTreeWithParent {
|
||||
readonly parentIndex: number;
|
||||
readonly tree: RangeTree;
|
||||
|
||||
constructor(parentIndex: number, tree: RangeTree) {
|
||||
this.parentIndex = parentIndex;
|
||||
this.tree = tree;
|
||||
}
|
||||
}
|
||||
|
||||
class StartEvent {
|
||||
readonly offset: number;
|
||||
readonly trees: RangeTreeWithParent[];
|
||||
|
||||
constructor(offset: number, trees: RangeTreeWithParent[]) {
|
||||
this.offset = offset;
|
||||
this.trees = trees;
|
||||
}
|
||||
|
||||
static compare(a: StartEvent, b: StartEvent): number {
|
||||
return a.offset - b.offset;
|
||||
}
|
||||
}
|
||||
|
||||
class StartEventQueue {
|
||||
private readonly queue: StartEvent[];
|
||||
private nextIndex: number;
|
||||
private pendingOffset: number;
|
||||
private pendingTrees: RangeTreeWithParent[] | undefined;
|
||||
|
||||
private constructor(queue: StartEvent[]) {
|
||||
this.queue = queue;
|
||||
this.nextIndex = 0;
|
||||
this.pendingOffset = 0;
|
||||
this.pendingTrees = undefined;
|
||||
}
|
||||
|
||||
static fromParentTrees(parentTrees: ReadonlyArray<RangeTree>): StartEventQueue {
|
||||
const startToTrees: Map<number, RangeTreeWithParent[]> = new Map();
|
||||
for (const [parentIndex, parentTree] of parentTrees.entries()) {
|
||||
for (const child of parentTree.children) {
|
||||
let trees: RangeTreeWithParent[] | undefined = startToTrees.get(child.start);
|
||||
if (trees === undefined) {
|
||||
trees = [];
|
||||
startToTrees.set(child.start, trees);
|
||||
}
|
||||
trees.push(new RangeTreeWithParent(parentIndex, child));
|
||||
}
|
||||
}
|
||||
const queue: StartEvent[] = [];
|
||||
for (const [startOffset, trees] of startToTrees) {
|
||||
queue.push(new StartEvent(startOffset, trees));
|
||||
}
|
||||
queue.sort(StartEvent.compare);
|
||||
return new StartEventQueue(queue);
|
||||
}
|
||||
|
||||
setPendingOffset(offset: number): void {
|
||||
this.pendingOffset = offset;
|
||||
}
|
||||
|
||||
pushPendingTree(tree: RangeTreeWithParent): void {
|
||||
if (this.pendingTrees === undefined) {
|
||||
this.pendingTrees = [];
|
||||
}
|
||||
this.pendingTrees.push(tree);
|
||||
}
|
||||
|
||||
next(): StartEvent | undefined {
|
||||
const pendingTrees: RangeTreeWithParent[] | undefined = this.pendingTrees;
|
||||
const nextEvent: StartEvent | undefined = this.queue[this.nextIndex];
|
||||
if (pendingTrees === undefined) {
|
||||
this.nextIndex++;
|
||||
return nextEvent;
|
||||
} else if (nextEvent === undefined) {
|
||||
this.pendingTrees = undefined;
|
||||
return new StartEvent(this.pendingOffset, pendingTrees);
|
||||
} else {
|
||||
if (this.pendingOffset < nextEvent.offset) {
|
||||
this.pendingTrees = undefined;
|
||||
return new StartEvent(this.pendingOffset, pendingTrees);
|
||||
} else {
|
||||
if (this.pendingOffset === nextEvent.offset) {
|
||||
this.pendingTrees = undefined;
|
||||
for (const tree of pendingTrees) {
|
||||
nextEvent.trees.push(tree);
|
||||
}
|
||||
}
|
||||
this.nextIndex++;
|
||||
return nextEvent;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function mergeRangeTreeChildren(parentTrees: ReadonlyArray<RangeTree>): RangeTree[] {
|
||||
const result: RangeTree[] = [];
|
||||
const startEventQueue: StartEventQueue = StartEventQueue.fromParentTrees(parentTrees);
|
||||
const parentToNested: Map<number, RangeTree[]> = new Map();
|
||||
let openRange: Range | undefined;
|
||||
|
||||
while (true) {
|
||||
const event: StartEvent | undefined = startEventQueue.next();
|
||||
if (event === undefined) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (openRange !== undefined && openRange.end <= event.offset) {
|
||||
result.push(nextChild(openRange, parentToNested));
|
||||
openRange = undefined;
|
||||
}
|
||||
|
||||
if (openRange === undefined) {
|
||||
let openRangeEnd: number = event.offset + 1;
|
||||
for (const {parentIndex, tree} of event.trees) {
|
||||
openRangeEnd = Math.max(openRangeEnd, tree.end);
|
||||
insertChild(parentToNested, parentIndex, tree);
|
||||
}
|
||||
startEventQueue.setPendingOffset(openRangeEnd);
|
||||
openRange = {start: event.offset, end: openRangeEnd};
|
||||
} else {
|
||||
for (const {parentIndex, tree} of event.trees) {
|
||||
if (tree.end > openRange.end) {
|
||||
const right: RangeTree = tree.split(openRange.end);
|
||||
startEventQueue.pushPendingTree(new RangeTreeWithParent(parentIndex, right));
|
||||
}
|
||||
insertChild(parentToNested, parentIndex, tree);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (openRange !== undefined) {
|
||||
result.push(nextChild(openRange, parentToNested));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
function insertChild(parentToNested: Map<number, RangeTree[]>, parentIndex: number, tree: RangeTree): void {
|
||||
let nested: RangeTree[] | undefined = parentToNested.get(parentIndex);
|
||||
if (nested === undefined) {
|
||||
nested = [];
|
||||
parentToNested.set(parentIndex, nested);
|
||||
}
|
||||
nested.push(tree);
|
||||
}
|
||||
|
||||
function nextChild(openRange: Range, parentToNested: Map<number, RangeTree[]>): RangeTree {
|
||||
const matchingTrees: RangeTree[] = [];
|
||||
|
||||
for (const nested of parentToNested.values()) {
|
||||
if (nested.length === 1 && nested[0].start === openRange.start && nested[0].end === openRange.end) {
|
||||
matchingTrees.push(nested[0]);
|
||||
} else {
|
||||
matchingTrees.push(new RangeTree(
|
||||
openRange.start,
|
||||
openRange.end,
|
||||
0,
|
||||
nested,
|
||||
));
|
||||
}
|
||||
}
|
||||
parentToNested.clear();
|
||||
return mergeRangeTrees(matchingTrees)!;
|
||||
}
|
||||
84
syntax/vscode/node_modules/@bcoe/v8-coverage/src/lib/normalize.ts
generated
vendored
84
syntax/vscode/node_modules/@bcoe/v8-coverage/src/lib/normalize.ts
generated
vendored
|
|
@ -1,84 +0,0 @@
|
|||
import { compareFunctionCovs, compareRangeCovs, compareScriptCovs } from "./compare";
|
||||
import { RangeTree } from "./range-tree";
|
||||
import { FunctionCov, ProcessCov, ScriptCov } from "./types";
|
||||
|
||||
/**
|
||||
* Normalizes a process coverage.
|
||||
*
|
||||
* Sorts the scripts alphabetically by `url`.
|
||||
* Reassigns script ids: the script at index `0` receives `"0"`, the script at
|
||||
* index `1` receives `"1"` etc.
|
||||
* This does not normalize the script coverages.
|
||||
*
|
||||
* @param processCov Process coverage to normalize.
|
||||
*/
|
||||
export function normalizeProcessCov(processCov: ProcessCov): void {
|
||||
processCov.result.sort(compareScriptCovs);
|
||||
for (const [scriptId, scriptCov] of processCov.result.entries()) {
|
||||
scriptCov.scriptId = scriptId.toString(10);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizes a process coverage deeply.
|
||||
*
|
||||
* Normalizes the script coverages deeply, then normalizes the process coverage
|
||||
* itself.
|
||||
*
|
||||
* @param processCov Process coverage to normalize.
|
||||
*/
|
||||
export function deepNormalizeProcessCov(processCov: ProcessCov): void {
|
||||
for (const scriptCov of processCov.result) {
|
||||
deepNormalizeScriptCov(scriptCov);
|
||||
}
|
||||
normalizeProcessCov(processCov);
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizes a script coverage.
|
||||
*
|
||||
* Sorts the function by root range (pre-order sort).
|
||||
* This does not normalize the function coverages.
|
||||
*
|
||||
* @param scriptCov Script coverage to normalize.
|
||||
*/
|
||||
export function normalizeScriptCov(scriptCov: ScriptCov): void {
|
||||
scriptCov.functions.sort(compareFunctionCovs);
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizes a script coverage deeply.
|
||||
*
|
||||
* Normalizes the function coverages deeply, then normalizes the script coverage
|
||||
* itself.
|
||||
*
|
||||
* @param scriptCov Script coverage to normalize.
|
||||
*/
|
||||
export function deepNormalizeScriptCov(scriptCov: ScriptCov): void {
|
||||
for (const funcCov of scriptCov.functions) {
|
||||
normalizeFunctionCov(funcCov);
|
||||
}
|
||||
normalizeScriptCov(scriptCov);
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizes a function coverage.
|
||||
*
|
||||
* Sorts the ranges (pre-order sort).
|
||||
* TODO: Tree-based normalization of the ranges.
|
||||
*
|
||||
* @param funcCov Function coverage to normalize.
|
||||
*/
|
||||
export function normalizeFunctionCov(funcCov: FunctionCov): void {
|
||||
funcCov.ranges.sort(compareRangeCovs);
|
||||
const tree: RangeTree = RangeTree.fromSortedRanges(funcCov.ranges)!;
|
||||
normalizeRangeTree(tree);
|
||||
funcCov.ranges = tree.toRanges();
|
||||
}
|
||||
|
||||
/**
|
||||
* @internal
|
||||
*/
|
||||
export function normalizeRangeTree(tree: RangeTree): void {
|
||||
tree.normalize();
|
||||
}
|
||||
156
syntax/vscode/node_modules/@bcoe/v8-coverage/src/lib/range-tree.ts
generated
vendored
156
syntax/vscode/node_modules/@bcoe/v8-coverage/src/lib/range-tree.ts
generated
vendored
|
|
@ -1,156 +0,0 @@
|
|||
import { RangeCov } from "./types";
|
||||
|
||||
export class RangeTree {
|
||||
start: number;
|
||||
end: number;
|
||||
delta: number;
|
||||
children: RangeTree[];
|
||||
|
||||
constructor(
|
||||
start: number,
|
||||
end: number,
|
||||
delta: number,
|
||||
children: RangeTree[],
|
||||
) {
|
||||
this.start = start;
|
||||
this.end = end;
|
||||
this.delta = delta;
|
||||
this.children = children;
|
||||
}
|
||||
|
||||
/**
|
||||
* @precodition `ranges` are well-formed and pre-order sorted
|
||||
*/
|
||||
static fromSortedRanges(ranges: ReadonlyArray<RangeCov>): RangeTree | undefined {
|
||||
let root: RangeTree | undefined;
|
||||
// Stack of parent trees and parent counts.
|
||||
const stack: [RangeTree, number][] = [];
|
||||
for (const range of ranges) {
|
||||
const node: RangeTree = new RangeTree(range.startOffset, range.endOffset, range.count, []);
|
||||
if (root === undefined) {
|
||||
root = node;
|
||||
stack.push([node, range.count]);
|
||||
continue;
|
||||
}
|
||||
let parent: RangeTree;
|
||||
let parentCount: number;
|
||||
while (true) {
|
||||
[parent, parentCount] = stack[stack.length - 1];
|
||||
// assert: `top !== undefined` (the ranges are sorted)
|
||||
if (range.startOffset < parent.end) {
|
||||
break;
|
||||
} else {
|
||||
stack.pop();
|
||||
}
|
||||
}
|
||||
node.delta -= parentCount;
|
||||
parent.children.push(node);
|
||||
stack.push([node, range.count]);
|
||||
}
|
||||
return root;
|
||||
}
|
||||
|
||||
normalize(): void {
|
||||
const children: RangeTree[] = [];
|
||||
let curEnd: number;
|
||||
let head: RangeTree | undefined;
|
||||
const tail: RangeTree[] = [];
|
||||
for (const child of this.children) {
|
||||
if (head === undefined) {
|
||||
head = child;
|
||||
} else if (child.delta === head.delta && child.start === curEnd!) {
|
||||
tail.push(child);
|
||||
} else {
|
||||
endChain();
|
||||
head = child;
|
||||
}
|
||||
curEnd = child.end;
|
||||
}
|
||||
if (head !== undefined) {
|
||||
endChain();
|
||||
}
|
||||
|
||||
if (children.length === 1) {
|
||||
const child: RangeTree = children[0];
|
||||
if (child.start === this.start && child.end === this.end) {
|
||||
this.delta += child.delta;
|
||||
this.children = child.children;
|
||||
// `.lazyCount` is zero for both (both are after normalization)
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
this.children = children;
|
||||
|
||||
function endChain(): void {
|
||||
if (tail.length !== 0) {
|
||||
head!.end = tail[tail.length - 1].end;
|
||||
for (const tailTree of tail) {
|
||||
for (const subChild of tailTree.children) {
|
||||
subChild.delta += tailTree.delta - head!.delta;
|
||||
head!.children.push(subChild);
|
||||
}
|
||||
}
|
||||
tail.length = 0;
|
||||
}
|
||||
head!.normalize();
|
||||
children.push(head!);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @precondition `tree.start < value && value < tree.end`
|
||||
* @return RangeTree Right part
|
||||
*/
|
||||
split(value: number): RangeTree {
|
||||
let leftChildLen: number = this.children.length;
|
||||
let mid: RangeTree | undefined;
|
||||
|
||||
// TODO(perf): Binary search (check overhead)
|
||||
for (let i: number = 0; i < this.children.length; i++) {
|
||||
const child: RangeTree = this.children[i];
|
||||
if (child.start < value && value < child.end) {
|
||||
mid = child.split(value);
|
||||
leftChildLen = i + 1;
|
||||
break;
|
||||
} else if (child.start >= value) {
|
||||
leftChildLen = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
const rightLen: number = this.children.length - leftChildLen;
|
||||
const rightChildren: RangeTree[] = this.children.splice(leftChildLen, rightLen);
|
||||
if (mid !== undefined) {
|
||||
rightChildren.unshift(mid);
|
||||
}
|
||||
const result: RangeTree = new RangeTree(
|
||||
value,
|
||||
this.end,
|
||||
this.delta,
|
||||
rightChildren,
|
||||
);
|
||||
this.end = value;
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the range coverages corresponding to the tree.
|
||||
*
|
||||
* The ranges are pre-order sorted.
|
||||
*/
|
||||
toRanges(): RangeCov[] {
|
||||
const ranges: RangeCov[] = [];
|
||||
// Stack of parent trees and counts.
|
||||
const stack: [RangeTree, number][] = [[this, 0]];
|
||||
while (stack.length > 0) {
|
||||
const [cur, parentCount]: [RangeTree, number] = stack.pop()!;
|
||||
const count: number = parentCount + cur.delta;
|
||||
ranges.push({startOffset: cur.start, endOffset: cur.end, count});
|
||||
for (let i: number = cur.children.length - 1; i >= 0; i--) {
|
||||
stack.push([cur.children[i], count]);
|
||||
}
|
||||
}
|
||||
return ranges;
|
||||
}
|
||||
}
|
||||
26
syntax/vscode/node_modules/@bcoe/v8-coverage/src/lib/types.ts
generated
vendored
26
syntax/vscode/node_modules/@bcoe/v8-coverage/src/lib/types.ts
generated
vendored
|
|
@ -1,26 +0,0 @@
|
|||
export interface ProcessCov {
|
||||
result: ScriptCov[];
|
||||
}
|
||||
|
||||
export interface ScriptCov {
|
||||
scriptId: string;
|
||||
url: string;
|
||||
functions: FunctionCov[];
|
||||
}
|
||||
|
||||
export interface FunctionCov {
|
||||
functionName: string;
|
||||
ranges: RangeCov[];
|
||||
isBlockCoverage: boolean;
|
||||
}
|
||||
|
||||
export interface Range {
|
||||
readonly start: number;
|
||||
readonly end: number;
|
||||
}
|
||||
|
||||
export interface RangeCov {
|
||||
startOffset: number;
|
||||
endOffset: number;
|
||||
count: number;
|
||||
}
|
||||
280
syntax/vscode/node_modules/@bcoe/v8-coverage/src/test/merge.spec.ts
generated
vendored
280
syntax/vscode/node_modules/@bcoe/v8-coverage/src/test/merge.spec.ts
generated
vendored
|
|
@ -1,280 +0,0 @@
|
|||
import chai from "chai";
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
import { FunctionCov, mergeFunctionCovs, mergeProcessCovs, mergeScriptCovs, ProcessCov, ScriptCov } from "../lib";
|
||||
|
||||
const REPO_ROOT: string = path.join(__dirname, "..", "..", "..", "..");
|
||||
const BENCHES_INPUT_DIR: string = path.join(REPO_ROOT, "benches");
|
||||
const BENCHES_DIR: string = path.join(REPO_ROOT, "test-data", "merge", "benches");
|
||||
const RANGES_DIR: string = path.join(REPO_ROOT, "test-data", "merge", "ranges");
|
||||
const BENCHES_TIMEOUT: number = 20000; // 20sec
|
||||
|
||||
interface MergeRangeItem {
|
||||
name: string;
|
||||
status: "run" | "skip" | "only";
|
||||
inputs: ProcessCov[];
|
||||
expected: ProcessCov;
|
||||
}
|
||||
|
||||
const FIXTURES_DIR: string = path.join(REPO_ROOT, "test-data", "bugs");
|
||||
function loadFixture(name: string) {
|
||||
const content: string = fs.readFileSync(
|
||||
path.resolve(FIXTURES_DIR, `${name}.json`),
|
||||
{encoding: "UTF-8"},
|
||||
);
|
||||
return JSON.parse(content);
|
||||
}
|
||||
|
||||
describe("merge", () => {
|
||||
describe("Various", () => {
|
||||
it("accepts empty arrays for `mergeProcessCovs`", () => {
|
||||
const inputs: ProcessCov[] = [];
|
||||
const expected: ProcessCov = {result: []};
|
||||
const actual: ProcessCov = mergeProcessCovs(inputs);
|
||||
chai.assert.deepEqual(actual, expected);
|
||||
});
|
||||
|
||||
it("accepts empty arrays for `mergeScriptCovs`", () => {
|
||||
const inputs: ScriptCov[] = [];
|
||||
const expected: ScriptCov | undefined = undefined;
|
||||
const actual: ScriptCov | undefined = mergeScriptCovs(inputs);
|
||||
chai.assert.deepEqual(actual, expected);
|
||||
});
|
||||
|
||||
it("accepts empty arrays for `mergeFunctionCovs`", () => {
|
||||
const inputs: FunctionCov[] = [];
|
||||
const expected: FunctionCov | undefined = undefined;
|
||||
const actual: FunctionCov | undefined = mergeFunctionCovs(inputs);
|
||||
chai.assert.deepEqual(actual, expected);
|
||||
});
|
||||
|
||||
it("accepts arrays with a single item for `mergeProcessCovs`", () => {
|
||||
const inputs: ProcessCov[] = [
|
||||
{
|
||||
result: [
|
||||
{
|
||||
scriptId: "123",
|
||||
url: "/lib.js",
|
||||
functions: [
|
||||
{
|
||||
functionName: "test",
|
||||
isBlockCoverage: true,
|
||||
ranges: [
|
||||
{startOffset: 0, endOffset: 4, count: 2},
|
||||
{startOffset: 1, endOffset: 2, count: 1},
|
||||
{startOffset: 2, endOffset: 3, count: 1},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
const expected: ProcessCov = {
|
||||
result: [
|
||||
{
|
||||
scriptId: "0",
|
||||
url: "/lib.js",
|
||||
functions: [
|
||||
{
|
||||
functionName: "test",
|
||||
isBlockCoverage: true,
|
||||
ranges: [
|
||||
{startOffset: 0, endOffset: 4, count: 2},
|
||||
{startOffset: 1, endOffset: 3, count: 1},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
],
|
||||
};
|
||||
const actual: ProcessCov = mergeProcessCovs(inputs);
|
||||
chai.assert.deepEqual(actual, expected);
|
||||
});
|
||||
|
||||
describe("mergeProcessCovs", () => {
|
||||
// see: https://github.com/demurgos/v8-coverage/issues/2
|
||||
it("handles function coverage merged into block coverage", () => {
|
||||
const blockCoverage: ProcessCov = loadFixture("issue-2-block-coverage");
|
||||
const functionCoverage: ProcessCov = loadFixture("issue-2-func-coverage");
|
||||
const inputs: ProcessCov[] = [
|
||||
functionCoverage,
|
||||
blockCoverage,
|
||||
];
|
||||
const expected: ProcessCov = loadFixture("issue-2-expected");
|
||||
const actual: ProcessCov = mergeProcessCovs(inputs);
|
||||
chai.assert.deepEqual(actual, expected);
|
||||
});
|
||||
|
||||
// see: https://github.com/demurgos/v8-coverage/issues/2
|
||||
it("handles block coverage merged into function coverage", () => {
|
||||
const blockCoverage: ProcessCov = loadFixture("issue-2-block-coverage");
|
||||
const functionCoverage: ProcessCov = loadFixture("issue-2-func-coverage");
|
||||
const inputs: ProcessCov[] = [
|
||||
blockCoverage,
|
||||
functionCoverage,
|
||||
];
|
||||
const expected: ProcessCov = loadFixture("issue-2-expected");
|
||||
const actual: ProcessCov = mergeProcessCovs(inputs);
|
||||
chai.assert.deepEqual(actual, expected);
|
||||
});
|
||||
});
|
||||
|
||||
it("accepts arrays with a single item for `mergeScriptCovs`", () => {
|
||||
const inputs: ScriptCov[] = [
|
||||
{
|
||||
scriptId: "123",
|
||||
url: "/lib.js",
|
||||
functions: [
|
||||
{
|
||||
functionName: "test",
|
||||
isBlockCoverage: true,
|
||||
ranges: [
|
||||
{startOffset: 0, endOffset: 4, count: 2},
|
||||
{startOffset: 1, endOffset: 2, count: 1},
|
||||
{startOffset: 2, endOffset: 3, count: 1},
|
||||
],
|
||||
},
|
||||
],
|
||||
},
|
||||
];
|
||||
const expected: ScriptCov | undefined = {
|
||||
scriptId: "123",
|
||||
url: "/lib.js",
|
||||
functions: [
|
||||
{
|
||||
functionName: "test",
|
||||
isBlockCoverage: true,
|
||||
ranges: [
|
||||
{startOffset: 0, endOffset: 4, count: 2},
|
||||
{startOffset: 1, endOffset: 3, count: 1},
|
||||
],
|
||||
},
|
||||
],
|
||||
};
|
||||
const actual: ScriptCov | undefined = mergeScriptCovs(inputs);
|
||||
chai.assert.deepEqual(actual, expected);
|
||||
});
|
||||
|
||||
it("accepts arrays with a single item for `mergeFunctionCovs`", () => {
|
||||
const inputs: FunctionCov[] = [
|
||||
{
|
||||
functionName: "test",
|
||||
isBlockCoverage: true,
|
||||
ranges: [
|
||||
{startOffset: 0, endOffset: 4, count: 2},
|
||||
{startOffset: 1, endOffset: 2, count: 1},
|
||||
{startOffset: 2, endOffset: 3, count: 1},
|
||||
],
|
||||
},
|
||||
];
|
||||
const expected: FunctionCov = {
|
||||
functionName: "test",
|
||||
isBlockCoverage: true,
|
||||
ranges: [
|
||||
{startOffset: 0, endOffset: 4, count: 2},
|
||||
{startOffset: 1, endOffset: 3, count: 1},
|
||||
],
|
||||
};
|
||||
const actual: FunctionCov | undefined = mergeFunctionCovs(inputs);
|
||||
chai.assert.deepEqual(actual, expected);
|
||||
});
|
||||
});
|
||||
|
||||
describe("ranges", () => {
|
||||
for (const sourceFile of getSourceFiles()) {
|
||||
const relPath: string = path.relative(RANGES_DIR, sourceFile);
|
||||
describe(relPath, () => {
|
||||
const content: string = fs.readFileSync(sourceFile, {encoding: "UTF-8"});
|
||||
const items: MergeRangeItem[] = JSON.parse(content);
|
||||
for (const item of items) {
|
||||
const test: () => void = () => {
|
||||
const actual: ProcessCov | undefined = mergeProcessCovs(item.inputs);
|
||||
chai.assert.deepEqual(actual, item.expected);
|
||||
};
|
||||
switch (item.status) {
|
||||
case "run":
|
||||
it(item.name, test);
|
||||
break;
|
||||
case "only":
|
||||
it.only(item.name, test);
|
||||
break;
|
||||
case "skip":
|
||||
it.skip(item.name, test);
|
||||
break;
|
||||
default:
|
||||
throw new Error(`Unexpected status: ${item.status}`);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
describe("benches", () => {
|
||||
for (const bench of getBenches()) {
|
||||
const BENCHES_TO_SKIP: Set<string> = new Set();
|
||||
if (process.env.CI === "true") {
|
||||
// Skip very large benchmarks when running continuous integration
|
||||
BENCHES_TO_SKIP.add("node@10.11.0");
|
||||
BENCHES_TO_SKIP.add("npm@6.4.1");
|
||||
}
|
||||
|
||||
const name: string = path.basename(bench);
|
||||
|
||||
if (BENCHES_TO_SKIP.has(name)) {
|
||||
it.skip(`${name} (skipped: too large for CI)`, testBench);
|
||||
} else {
|
||||
it(name, testBench);
|
||||
}
|
||||
|
||||
async function testBench(this: Mocha.Context) {
|
||||
this.timeout(BENCHES_TIMEOUT);
|
||||
|
||||
const inputFileNames: string[] = await fs.promises.readdir(bench);
|
||||
const inputPromises: Promise<ProcessCov>[] = [];
|
||||
for (const inputFileName of inputFileNames) {
|
||||
const resolved: string = path.join(bench, inputFileName);
|
||||
inputPromises.push(fs.promises.readFile(resolved).then(buffer => JSON.parse(buffer.toString("UTF-8"))));
|
||||
}
|
||||
const inputs: ProcessCov[] = await Promise.all(inputPromises);
|
||||
const expectedPath: string = path.join(BENCHES_DIR, `${name}.json`);
|
||||
const expectedContent: string = await fs.promises.readFile(expectedPath, {encoding: "UTF-8"}) as string;
|
||||
const expected: ProcessCov = JSON.parse(expectedContent);
|
||||
const startTime: number = Date.now();
|
||||
const actual: ProcessCov | undefined = mergeProcessCovs(inputs);
|
||||
const endTime: number = Date.now();
|
||||
console.error(`Time (${name}): ${(endTime - startTime) / 1000}`);
|
||||
chai.assert.deepEqual(actual, expected);
|
||||
console.error(`OK: ${name}`);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function getSourceFiles() {
|
||||
return getSourcesFrom(RANGES_DIR);
|
||||
|
||||
function* getSourcesFrom(dir: string): Iterable<string> {
|
||||
const names: string[] = fs.readdirSync(dir);
|
||||
for (const name of names) {
|
||||
const resolved: string = path.join(dir, name);
|
||||
const stat: fs.Stats = fs.statSync(resolved);
|
||||
if (stat.isDirectory()) {
|
||||
yield* getSourcesFrom(dir);
|
||||
} else {
|
||||
yield resolved;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function* getBenches(): Iterable<string> {
|
||||
const names: string[] = fs.readdirSync(BENCHES_INPUT_DIR);
|
||||
for (const name of names) {
|
||||
const resolved: string = path.join(BENCHES_INPUT_DIR, name);
|
||||
const stat: fs.Stats = fs.statSync(resolved);
|
||||
if (stat.isDirectory()) {
|
||||
yield resolved;
|
||||
}
|
||||
}
|
||||
}
|
||||
59
syntax/vscode/node_modules/@bcoe/v8-coverage/tsconfig.json
generated
vendored
59
syntax/vscode/node_modules/@bcoe/v8-coverage/tsconfig.json
generated
vendored
|
|
@ -1,59 +0,0 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"allowJs": false,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"allowUnreachableCode": false,
|
||||
"allowUnusedLabels": false,
|
||||
"alwaysStrict": true,
|
||||
"charset": "utf8",
|
||||
"checkJs": false,
|
||||
"declaration": false,
|
||||
"disableSizeLimit": false,
|
||||
"downlevelIteration": false,
|
||||
"emitBOM": false,
|
||||
"emitDecoratorMetadata": true,
|
||||
"esModuleInterop": true,
|
||||
"experimentalDecorators": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"importHelpers": false,
|
||||
"inlineSourceMap": false,
|
||||
"inlineSources": false,
|
||||
"isolatedModules": false,
|
||||
"lib": [
|
||||
"es2017",
|
||||
"esnext.asynciterable"
|
||||
],
|
||||
"locale": "en-us",
|
||||
"module": "commonjs",
|
||||
"moduleResolution": "node",
|
||||
"newLine": "lf",
|
||||
"noEmit": false,
|
||||
"noEmitHelpers": false,
|
||||
"noEmitOnError": true,
|
||||
"noErrorTruncation": true,
|
||||
"noFallthroughCasesInSwitch": true,
|
||||
"noImplicitAny": true,
|
||||
"noImplicitReturns": true,
|
||||
"noImplicitThis": true,
|
||||
"noStrictGenericChecks": false,
|
||||
"noUnusedLocals": true,
|
||||
"noUnusedParameters": false,
|
||||
"noImplicitUseStrict": false,
|
||||
"noLib": false,
|
||||
"noResolve": false,
|
||||
"preserveConstEnums": false,
|
||||
"removeComments": false,
|
||||
"skipLibCheck": true,
|
||||
"sourceMap": true,
|
||||
"strict": true,
|
||||
"strictNullChecks": true,
|
||||
"suppressExcessPropertyErrors": false,
|
||||
"suppressImplicitAnyIndexErrors": false,
|
||||
"target": "es2017",
|
||||
"traceResolution": false,
|
||||
"typeRoots": [
|
||||
"src/lib/custom-typings",
|
||||
"node_modules/@types"
|
||||
]
|
||||
}
|
||||
}
|
||||
3
syntax/vscode/node_modules/@esbuild/linux-x64/README.md
generated
vendored
3
syntax/vscode/node_modules/@esbuild/linux-x64/README.md
generated
vendored
|
|
@ -1,3 +0,0 @@
|
|||
# esbuild
|
||||
|
||||
This is the Linux 64-bit binary for esbuild, a JavaScript bundler and minifier. See https://github.com/evanw/esbuild for details.
|
||||
BIN
syntax/vscode/node_modules/@esbuild/linux-x64/bin/esbuild
generated
vendored
BIN
syntax/vscode/node_modules/@esbuild/linux-x64/bin/esbuild
generated
vendored
Binary file not shown.
20
syntax/vscode/node_modules/@esbuild/linux-x64/package.json
generated
vendored
20
syntax/vscode/node_modules/@esbuild/linux-x64/package.json
generated
vendored
|
|
@ -1,20 +0,0 @@
|
|||
{
|
||||
"name": "@esbuild/linux-x64",
|
||||
"version": "0.24.0",
|
||||
"description": "The Linux 64-bit binary for esbuild, a JavaScript bundler.",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/evanw/esbuild.git"
|
||||
},
|
||||
"license": "MIT",
|
||||
"preferUnplugged": true,
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
},
|
||||
"os": [
|
||||
"linux"
|
||||
],
|
||||
"cpu": [
|
||||
"x64"
|
||||
]
|
||||
}
|
||||
21
syntax/vscode/node_modules/@eslint-community/eslint-utils/LICENSE
generated
vendored
21
syntax/vscode/node_modules/@eslint-community/eslint-utils/LICENSE
generated
vendored
|
|
@ -1,21 +0,0 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2018 Toru Nagashima
|
||||
|
||||
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.
|
||||
37
syntax/vscode/node_modules/@eslint-community/eslint-utils/README.md
generated
vendored
37
syntax/vscode/node_modules/@eslint-community/eslint-utils/README.md
generated
vendored
|
|
@ -1,37 +0,0 @@
|
|||
# @eslint-community/eslint-utils
|
||||
|
||||
[](https://www.npmjs.com/package/@eslint-community/eslint-utils)
|
||||
[](http://www.npmtrends.com/@eslint-community/eslint-utils)
|
||||
[](https://github.com/eslint-community/eslint-utils/actions)
|
||||
[](https://codecov.io/gh/eslint-community/eslint-utils)
|
||||
|
||||
## 🏁 Goal
|
||||
|
||||
This package provides utility functions and classes for make ESLint custom rules.
|
||||
|
||||
For examples:
|
||||
|
||||
- [`getStaticValue`](https://eslint-community.github.io/eslint-utils/api/ast-utils.html#getstaticvalue) evaluates static value on AST.
|
||||
- [`ReferenceTracker`](https://eslint-community.github.io/eslint-utils/api/scope-utils.html#referencetracker-class) checks the members of modules/globals as handling assignments and destructuring.
|
||||
|
||||
## 📖 Usage
|
||||
|
||||
See [documentation](https://eslint-community.github.io/eslint-utils).
|
||||
|
||||
## 📰 Changelog
|
||||
|
||||
See [releases](https://github.com/eslint-community/eslint-utils/releases).
|
||||
|
||||
## ❤️ Contributing
|
||||
|
||||
Welcome contributing!
|
||||
|
||||
Please use GitHub's Issues/PRs.
|
||||
|
||||
### Development Tools
|
||||
|
||||
- `npm test` runs tests and measures coverage.
|
||||
- `npm run clean` removes the coverage result of `npm test` command.
|
||||
- `npm run coverage` shows the coverage result of the last `npm test` command.
|
||||
- `npm run lint` runs ESLint.
|
||||
- `npm run watch` runs tests on each file change.
|
||||
2068
syntax/vscode/node_modules/@eslint-community/eslint-utils/index.js
generated
vendored
2068
syntax/vscode/node_modules/@eslint-community/eslint-utils/index.js
generated
vendored
File diff suppressed because it is too large
Load diff
1
syntax/vscode/node_modules/@eslint-community/eslint-utils/index.js.map
generated
vendored
1
syntax/vscode/node_modules/@eslint-community/eslint-utils/index.js.map
generated
vendored
File diff suppressed because one or more lines are too long
2027
syntax/vscode/node_modules/@eslint-community/eslint-utils/index.mjs
generated
vendored
2027
syntax/vscode/node_modules/@eslint-community/eslint-utils/index.mjs
generated
vendored
File diff suppressed because it is too large
Load diff
1
syntax/vscode/node_modules/@eslint-community/eslint-utils/index.mjs.map
generated
vendored
1
syntax/vscode/node_modules/@eslint-community/eslint-utils/index.mjs.map
generated
vendored
File diff suppressed because one or more lines are too long
73
syntax/vscode/node_modules/@eslint-community/eslint-utils/package.json
generated
vendored
73
syntax/vscode/node_modules/@eslint-community/eslint-utils/package.json
generated
vendored
|
|
@ -1,73 +0,0 @@
|
|||
{
|
||||
"name": "@eslint-community/eslint-utils",
|
||||
"version": "4.4.0",
|
||||
"description": "Utilities for ESLint plugins.",
|
||||
"keywords": [
|
||||
"eslint"
|
||||
],
|
||||
"homepage": "https://github.com/eslint-community/eslint-utils#readme",
|
||||
"bugs": {
|
||||
"url": "https://github.com/eslint-community/eslint-utils/issues"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/eslint-community/eslint-utils"
|
||||
},
|
||||
"license": "MIT",
|
||||
"author": "Toru Nagashima",
|
||||
"sideEffects": false,
|
||||
"exports": {
|
||||
".": {
|
||||
"import": "./index.mjs",
|
||||
"require": "./index.js"
|
||||
},
|
||||
"./package.json": "./package.json"
|
||||
},
|
||||
"main": "index",
|
||||
"module": "index.mjs",
|
||||
"files": [
|
||||
"index.*"
|
||||
],
|
||||
"scripts": {
|
||||
"prebuild": "npm run -s clean",
|
||||
"build": "rollup -c",
|
||||
"clean": "rimraf .nyc_output coverage index.*",
|
||||
"coverage": "opener ./coverage/lcov-report/index.html",
|
||||
"docs:build": "vitepress build docs",
|
||||
"docs:watch": "vitepress dev docs",
|
||||
"format": "npm run -s format:prettier -- --write",
|
||||
"format:prettier": "prettier .",
|
||||
"format:check": "npm run -s format:prettier -- --check",
|
||||
"lint": "eslint .",
|
||||
"test": "c8 mocha --reporter dot \"test/*.mjs\"",
|
||||
"preversion": "npm test && npm run -s build",
|
||||
"postversion": "git push && git push --tags",
|
||||
"prewatch": "npm run -s clean",
|
||||
"watch": "warun \"{src,test}/**/*.mjs\" -- npm run -s test:mocha"
|
||||
},
|
||||
"dependencies": {
|
||||
"eslint-visitor-keys": "^3.3.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint-community/eslint-plugin-mysticatea": "^15.2.0",
|
||||
"c8": "^7.12.0",
|
||||
"dot-prop": "^6.0.1",
|
||||
"eslint": "^8.28.0",
|
||||
"mocha": "^9.2.2",
|
||||
"npm-run-all": "^4.1.5",
|
||||
"opener": "^1.5.2",
|
||||
"prettier": "2.8.4",
|
||||
"rimraf": "^3.0.2",
|
||||
"rollup": "^2.79.1",
|
||||
"rollup-plugin-sourcemaps": "^0.6.3",
|
||||
"semver": "^7.3.8",
|
||||
"vitepress": "^1.0.0-alpha.40",
|
||||
"warun": "^1.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
|
||||
}
|
||||
}
|
||||
21
syntax/vscode/node_modules/@eslint-community/regexpp/LICENSE
generated
vendored
21
syntax/vscode/node_modules/@eslint-community/regexpp/LICENSE
generated
vendored
|
|
@ -1,21 +0,0 @@
|
|||
MIT License
|
||||
|
||||
Copyright (c) 2018 Toru Nagashima
|
||||
|
||||
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.
|
||||
177
syntax/vscode/node_modules/@eslint-community/regexpp/README.md
generated
vendored
177
syntax/vscode/node_modules/@eslint-community/regexpp/README.md
generated
vendored
|
|
@ -1,177 +0,0 @@
|
|||
# @eslint-community/regexpp
|
||||
|
||||
[](https://www.npmjs.com/package/@eslint-community/regexpp)
|
||||
[](http://www.npmtrends.com/@eslint-community/regexpp)
|
||||
[](https://github.com/eslint-community/regexpp/actions)
|
||||
[](https://codecov.io/gh/eslint-community/regexpp)
|
||||
|
||||
A regular expression parser for ECMAScript.
|
||||
|
||||
## 💿 Installation
|
||||
|
||||
```bash
|
||||
$ npm install @eslint-community/regexpp
|
||||
```
|
||||
|
||||
- require Node@^12.0.0 || ^14.0.0 || >=16.0.0.
|
||||
|
||||
## 📖 Usage
|
||||
|
||||
```ts
|
||||
import {
|
||||
AST,
|
||||
RegExpParser,
|
||||
RegExpValidator,
|
||||
RegExpVisitor,
|
||||
parseRegExpLiteral,
|
||||
validateRegExpLiteral,
|
||||
visitRegExpAST
|
||||
} from "@eslint-community/regexpp"
|
||||
```
|
||||
|
||||
### parseRegExpLiteral(source, options?)
|
||||
|
||||
Parse a given regular expression literal then make AST object.
|
||||
|
||||
This is equivalent to `new RegExpParser(options).parseLiteral(source)`.
|
||||
|
||||
- **Parameters:**
|
||||
- `source` (`string | RegExp`) The source code to parse.
|
||||
- `options?` ([`RegExpParser.Options`]) The options to parse.
|
||||
- **Return:**
|
||||
- The AST of the regular expression.
|
||||
|
||||
### validateRegExpLiteral(source, options?)
|
||||
|
||||
Validate a given regular expression literal.
|
||||
|
||||
This is equivalent to `new RegExpValidator(options).validateLiteral(source)`.
|
||||
|
||||
- **Parameters:**
|
||||
- `source` (`string`) The source code to validate.
|
||||
- `options?` ([`RegExpValidator.Options`]) The options to validate.
|
||||
|
||||
### visitRegExpAST(ast, handlers)
|
||||
|
||||
Visit each node of a given AST.
|
||||
|
||||
This is equivalent to `new RegExpVisitor(handlers).visit(ast)`.
|
||||
|
||||
- **Parameters:**
|
||||
- `ast` ([`AST.Node`]) The AST to visit.
|
||||
- `handlers` ([`RegExpVisitor.Handlers`]) The callbacks.
|
||||
|
||||
### RegExpParser
|
||||
|
||||
#### new RegExpParser(options?)
|
||||
|
||||
- **Parameters:**
|
||||
- `options?` ([`RegExpParser.Options`]) The options to parse.
|
||||
|
||||
#### parser.parseLiteral(source, start?, end?)
|
||||
|
||||
Parse a regular expression literal.
|
||||
|
||||
- **Parameters:**
|
||||
- `source` (`string`) The source code to parse. E.g. `"/abc/g"`.
|
||||
- `start?` (`number`) The start index in the source code. Default is `0`.
|
||||
- `end?` (`number`) The end index in the source code. Default is `source.length`.
|
||||
- **Return:**
|
||||
- The AST of the regular expression.
|
||||
|
||||
#### parser.parsePattern(source, start?, end?, flags?)
|
||||
|
||||
Parse a regular expression pattern.
|
||||
|
||||
- **Parameters:**
|
||||
- `source` (`string`) The source code to parse. E.g. `"abc"`.
|
||||
- `start?` (`number`) The start index in the source code. Default is `0`.
|
||||
- `end?` (`number`) The end index in the source code. Default is `source.length`.
|
||||
- `flags?` (`{ unicode?: boolean, unicodeSets?: boolean }`) The flags to enable Unicode mode, and Unicode Set mode.
|
||||
- **Return:**
|
||||
- The AST of the regular expression pattern.
|
||||
|
||||
#### parser.parseFlags(source, start?, end?)
|
||||
|
||||
Parse a regular expression flags.
|
||||
|
||||
- **Parameters:**
|
||||
- `source` (`string`) The source code to parse. E.g. `"gim"`.
|
||||
- `start?` (`number`) The start index in the source code. Default is `0`.
|
||||
- `end?` (`number`) The end index in the source code. Default is `source.length`.
|
||||
- **Return:**
|
||||
- The AST of the regular expression flags.
|
||||
|
||||
### RegExpValidator
|
||||
|
||||
#### new RegExpValidator(options)
|
||||
|
||||
- **Parameters:**
|
||||
- `options` ([`RegExpValidator.Options`]) The options to validate.
|
||||
|
||||
#### validator.validateLiteral(source, start, end)
|
||||
|
||||
Validate a regular expression literal.
|
||||
|
||||
- **Parameters:**
|
||||
- `source` (`string`) The source code to validate.
|
||||
- `start?` (`number`) The start index in the source code. Default is `0`.
|
||||
- `end?` (`number`) The end index in the source code. Default is `source.length`.
|
||||
|
||||
#### validator.validatePattern(source, start, end, flags)
|
||||
|
||||
Validate a regular expression pattern.
|
||||
|
||||
- **Parameters:**
|
||||
- `source` (`string`) The source code to validate.
|
||||
- `start?` (`number`) The start index in the source code. Default is `0`.
|
||||
- `end?` (`number`) The end index in the source code. Default is `source.length`.
|
||||
- `flags?` (`{ unicode?: boolean, unicodeSets?: boolean }`) The flags to enable Unicode mode, and Unicode Set mode.
|
||||
|
||||
#### validator.validateFlags(source, start, end)
|
||||
|
||||
Validate a regular expression flags.
|
||||
|
||||
- **Parameters:**
|
||||
- `source` (`string`) The source code to validate.
|
||||
- `start?` (`number`) The start index in the source code. Default is `0`.
|
||||
- `end?` (`number`) The end index in the source code. Default is `source.length`.
|
||||
|
||||
### RegExpVisitor
|
||||
|
||||
#### new RegExpVisitor(handlers)
|
||||
|
||||
- **Parameters:**
|
||||
- `handlers` ([`RegExpVisitor.Handlers`]) The callbacks.
|
||||
|
||||
#### visitor.visit(ast)
|
||||
|
||||
Validate a regular expression literal.
|
||||
|
||||
- **Parameters:**
|
||||
- `ast` ([`AST.Node`]) The AST to visit.
|
||||
|
||||
## 📰 Changelog
|
||||
|
||||
- [GitHub Releases](https://github.com/eslint-community/regexpp/releases)
|
||||
|
||||
## 🍻 Contributing
|
||||
|
||||
Welcome contributing!
|
||||
|
||||
Please use GitHub's Issues/PRs.
|
||||
|
||||
### Development Tools
|
||||
|
||||
- `npm test` runs tests and measures coverage.
|
||||
- `npm run build` compiles TypeScript source code to `index.js`, `index.js.map`, and `index.d.ts`.
|
||||
- `npm run clean` removes the temporary files which are created by `npm test` and `npm run build`.
|
||||
- `npm run lint` runs ESLint.
|
||||
- `npm run update:test` updates test fixtures.
|
||||
- `npm run update:ids` updates `src/unicode/ids.ts`.
|
||||
- `npm run watch` runs tests with `--watch` option.
|
||||
|
||||
[`AST.Node`]: src/ast.ts#L4
|
||||
[`RegExpParser.Options`]: src/parser.ts#L743
|
||||
[`RegExpValidator.Options`]: src/validator.ts#L220
|
||||
[`RegExpVisitor.Handlers`]: src/visitor.ts#L291
|
||||
1079
syntax/vscode/node_modules/@eslint-community/regexpp/index.d.ts
generated
vendored
1079
syntax/vscode/node_modules/@eslint-community/regexpp/index.d.ts
generated
vendored
File diff suppressed because it is too large
Load diff
2868
syntax/vscode/node_modules/@eslint-community/regexpp/index.js
generated
vendored
2868
syntax/vscode/node_modules/@eslint-community/regexpp/index.js
generated
vendored
File diff suppressed because it is too large
Load diff
1
syntax/vscode/node_modules/@eslint-community/regexpp/index.js.map
generated
vendored
1
syntax/vscode/node_modules/@eslint-community/regexpp/index.js.map
generated
vendored
File diff suppressed because one or more lines are too long
2858
syntax/vscode/node_modules/@eslint-community/regexpp/index.mjs
generated
vendored
2858
syntax/vscode/node_modules/@eslint-community/regexpp/index.mjs
generated
vendored
File diff suppressed because it is too large
Load diff
1
syntax/vscode/node_modules/@eslint-community/regexpp/index.mjs.map
generated
vendored
1
syntax/vscode/node_modules/@eslint-community/regexpp/index.mjs.map
generated
vendored
File diff suppressed because one or more lines are too long
91
syntax/vscode/node_modules/@eslint-community/regexpp/package.json
generated
vendored
91
syntax/vscode/node_modules/@eslint-community/regexpp/package.json
generated
vendored
|
|
@ -1,91 +0,0 @@
|
|||
{
|
||||
"name": "@eslint-community/regexpp",
|
||||
"version": "4.11.1",
|
||||
"description": "Regular expression parser for ECMAScript.",
|
||||
"keywords": [
|
||||
"regexp",
|
||||
"regular",
|
||||
"expression",
|
||||
"parser",
|
||||
"validator",
|
||||
"ast",
|
||||
"abstract",
|
||||
"syntax",
|
||||
"tree",
|
||||
"ecmascript",
|
||||
"es2015",
|
||||
"es2016",
|
||||
"es2017",
|
||||
"es2018",
|
||||
"es2019",
|
||||
"es2020",
|
||||
"es2021",
|
||||
"annexB"
|
||||
],
|
||||
"homepage": "https://github.com/eslint-community/regexpp#readme",
|
||||
"bugs": {
|
||||
"url": "https://github.com/eslint-community/regexpp/issues"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/eslint-community/regexpp"
|
||||
},
|
||||
"license": "MIT",
|
||||
"author": "Toru Nagashima",
|
||||
"exports": {
|
||||
".": {
|
||||
"types": "./index.d.ts",
|
||||
"import": "./index.mjs",
|
||||
"default": "./index.js"
|
||||
},
|
||||
"./package.json": "./package.json"
|
||||
},
|
||||
"main": "index",
|
||||
"files": [
|
||||
"index.*"
|
||||
],
|
||||
"scripts": {
|
||||
"prebuild": "npm run -s clean",
|
||||
"build": "run-s build:*",
|
||||
"build:tsc": "tsc --module es2015",
|
||||
"build:rollup": "rollup -c",
|
||||
"build:dts": "npm run -s build:tsc -- --removeComments false && dts-bundle --name @eslint-community/regexpp --main .temp/index.d.ts --out ../index.d.ts && prettier --write index.d.ts",
|
||||
"clean": "rimraf .temp index.*",
|
||||
"lint": "eslint . --ext .ts",
|
||||
"test": "nyc _mocha \"test/*.ts\" --reporter dot --timeout 10000",
|
||||
"debug": "mocha --require ts-node/register/transpile-only \"test/*.ts\" --reporter dot --timeout 10000",
|
||||
"update:test": "ts-node scripts/update-fixtures.ts",
|
||||
"update:unicode": "run-s update:unicode:*",
|
||||
"update:unicode:ids": "ts-node scripts/update-unicode-ids.ts",
|
||||
"update:unicode:props": "ts-node scripts/update-unicode-properties.ts",
|
||||
"update:test262:extract": "ts-node -T scripts/extract-test262.ts",
|
||||
"preversion": "npm test && npm run -s build",
|
||||
"postversion": "git push && git push --tags",
|
||||
"prewatch": "npm run -s clean",
|
||||
"watch": "_mocha \"test/*.ts\" --require ts-node/register --reporter dot --timeout 10000 --watch-extensions ts --watch --growl"
|
||||
},
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"@eslint-community/eslint-plugin-mysticatea": "^15.5.1",
|
||||
"@rollup/plugin-node-resolve": "^14.1.0",
|
||||
"@types/eslint": "^8.44.3",
|
||||
"@types/jsdom": "^16.2.15",
|
||||
"@types/mocha": "^9.1.1",
|
||||
"@types/node": "^12.20.55",
|
||||
"dts-bundle": "^0.7.3",
|
||||
"eslint": "^8.50.0",
|
||||
"js-tokens": "^8.0.2",
|
||||
"jsdom": "^19.0.0",
|
||||
"mocha": "^9.2.2",
|
||||
"npm-run-all2": "^6.2.2",
|
||||
"nyc": "^14.1.1",
|
||||
"rimraf": "^3.0.2",
|
||||
"rollup": "^2.79.1",
|
||||
"rollup-plugin-sourcemaps": "^0.6.3",
|
||||
"ts-node": "^10.9.1",
|
||||
"typescript": "~5.0.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
|
||||
}
|
||||
}
|
||||
19
syntax/vscode/node_modules/@eslint/eslintrc/LICENSE
generated
vendored
19
syntax/vscode/node_modules/@eslint/eslintrc/LICENSE
generated
vendored
|
|
@ -1,19 +0,0 @@
|
|||
Copyright OpenJS Foundation and other contributors, <www.openjsf.org>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
115
syntax/vscode/node_modules/@eslint/eslintrc/README.md
generated
vendored
115
syntax/vscode/node_modules/@eslint/eslintrc/README.md
generated
vendored
|
|
@ -1,115 +0,0 @@
|
|||
# ESLintRC Library
|
||||
|
||||
This repository contains the legacy ESLintRC configuration file format for ESLint. This package is not intended for use outside of the ESLint ecosystem. It is ESLint-specific and not intended for use in other programs.
|
||||
|
||||
**Note:** This package is frozen except for critical bug fixes as ESLint moves to a new config system.
|
||||
|
||||
## Installation
|
||||
|
||||
You can install the package as follows:
|
||||
|
||||
```
|
||||
npm install @eslint/eslintrc --save-dev
|
||||
|
||||
# or
|
||||
|
||||
yarn add @eslint/eslintrc -D
|
||||
```
|
||||
|
||||
## Usage (ESM)
|
||||
|
||||
The primary class in this package is `FlatCompat`, which is a utility to translate ESLintRC-style configs into flat configs. Here's how you use it inside of your `eslint.config.js` file:
|
||||
|
||||
```js
|
||||
import { FlatCompat } from "@eslint/eslintrc";
|
||||
import js from "@eslint/js";
|
||||
import path from "path";
|
||||
import { fileURLToPath } from "url";
|
||||
|
||||
// mimic CommonJS variables -- not needed if using CommonJS
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = path.dirname(__filename);
|
||||
|
||||
const compat = new FlatCompat({
|
||||
baseDirectory: __dirname, // optional; default: process.cwd()
|
||||
resolvePluginsRelativeTo: __dirname, // optional
|
||||
recommendedConfig: js.configs.recommended, // optional
|
||||
allConfig: js.configs.all, // optional
|
||||
});
|
||||
|
||||
export default [
|
||||
|
||||
// mimic ESLintRC-style extends
|
||||
...compat.extends("standard", "example"),
|
||||
|
||||
// mimic environments
|
||||
...compat.env({
|
||||
es2020: true,
|
||||
node: true
|
||||
}),
|
||||
|
||||
// mimic plugins
|
||||
...compat.plugins("airbnb", "react"),
|
||||
|
||||
// translate an entire config
|
||||
...compat.config({
|
||||
plugins: ["airbnb", "react"],
|
||||
extends: "standard",
|
||||
env: {
|
||||
es2020: true,
|
||||
node: true
|
||||
},
|
||||
rules: {
|
||||
semi: "error"
|
||||
}
|
||||
})
|
||||
];
|
||||
```
|
||||
|
||||
## Usage (CommonJS)
|
||||
|
||||
Using `FlatCompat` in CommonJS files is similar to ESM, but you'll use `require()` and `module.exports` instead of `import` and `export`. Here's how you use it inside of your `eslint.config.js` CommonJS file:
|
||||
|
||||
```js
|
||||
const { FlatCompat } = require("@eslint/eslintrc");
|
||||
const js = require("@eslint/js");
|
||||
|
||||
const compat = new FlatCompat({
|
||||
baseDirectory: __dirname, // optional; default: process.cwd()
|
||||
resolvePluginsRelativeTo: __dirname, // optional
|
||||
recommendedConfig: js.configs.recommended, // optional
|
||||
allConfig: js.configs.all, // optional
|
||||
});
|
||||
|
||||
module.exports = [
|
||||
|
||||
// mimic ESLintRC-style extends
|
||||
...compat.extends("standard", "example"),
|
||||
|
||||
// mimic environments
|
||||
...compat.env({
|
||||
es2020: true,
|
||||
node: true
|
||||
}),
|
||||
|
||||
// mimic plugins
|
||||
...compat.plugins("airbnb", "react"),
|
||||
|
||||
// translate an entire config
|
||||
...compat.config({
|
||||
plugins: ["airbnb", "react"],
|
||||
extends: "standard",
|
||||
env: {
|
||||
es2020: true,
|
||||
node: true
|
||||
},
|
||||
rules: {
|
||||
semi: "error"
|
||||
}
|
||||
})
|
||||
];
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT License
|
||||
79
syntax/vscode/node_modules/@eslint/eslintrc/conf/config-schema.js
generated
vendored
79
syntax/vscode/node_modules/@eslint/eslintrc/conf/config-schema.js
generated
vendored
|
|
@ -1,79 +0,0 @@
|
|||
/**
|
||||
* @fileoverview Defines a schema for configs.
|
||||
* @author Sylvan Mably
|
||||
*/
|
||||
|
||||
const baseConfigProperties = {
|
||||
$schema: { type: "string" },
|
||||
env: { type: "object" },
|
||||
extends: { $ref: "#/definitions/stringOrStrings" },
|
||||
globals: { type: "object" },
|
||||
overrides: {
|
||||
type: "array",
|
||||
items: { $ref: "#/definitions/overrideConfig" },
|
||||
additionalItems: false
|
||||
},
|
||||
parser: { type: ["string", "null"] },
|
||||
parserOptions: { type: "object" },
|
||||
plugins: { type: "array" },
|
||||
processor: { type: "string" },
|
||||
rules: { type: "object" },
|
||||
settings: { type: "object" },
|
||||
noInlineConfig: { type: "boolean" },
|
||||
reportUnusedDisableDirectives: { type: "boolean" },
|
||||
|
||||
ecmaFeatures: { type: "object" } // deprecated; logs a warning when used
|
||||
};
|
||||
|
||||
const configSchema = {
|
||||
definitions: {
|
||||
stringOrStrings: {
|
||||
oneOf: [
|
||||
{ type: "string" },
|
||||
{
|
||||
type: "array",
|
||||
items: { type: "string" },
|
||||
additionalItems: false
|
||||
}
|
||||
]
|
||||
},
|
||||
stringOrStringsRequired: {
|
||||
oneOf: [
|
||||
{ type: "string" },
|
||||
{
|
||||
type: "array",
|
||||
items: { type: "string" },
|
||||
additionalItems: false,
|
||||
minItems: 1
|
||||
}
|
||||
]
|
||||
},
|
||||
|
||||
// Config at top-level.
|
||||
objectConfig: {
|
||||
type: "object",
|
||||
properties: {
|
||||
root: { type: "boolean" },
|
||||
ignorePatterns: { $ref: "#/definitions/stringOrStrings" },
|
||||
...baseConfigProperties
|
||||
},
|
||||
additionalProperties: false
|
||||
},
|
||||
|
||||
// Config in `overrides`.
|
||||
overrideConfig: {
|
||||
type: "object",
|
||||
properties: {
|
||||
excludedFiles: { $ref: "#/definitions/stringOrStrings" },
|
||||
files: { $ref: "#/definitions/stringOrStringsRequired" },
|
||||
...baseConfigProperties
|
||||
},
|
||||
required: ["files"],
|
||||
additionalProperties: false
|
||||
}
|
||||
},
|
||||
|
||||
$ref: "#/definitions/objectConfig"
|
||||
};
|
||||
|
||||
export default configSchema;
|
||||
215
syntax/vscode/node_modules/@eslint/eslintrc/conf/environments.js
generated
vendored
215
syntax/vscode/node_modules/@eslint/eslintrc/conf/environments.js
generated
vendored
|
|
@ -1,215 +0,0 @@
|
|||
/**
|
||||
* @fileoverview Defines environment settings and globals.
|
||||
* @author Elan Shanker
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Requirements
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
import globals from "globals";
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Helpers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Get the object that has difference.
|
||||
* @param {Record<string,boolean>} current The newer object.
|
||||
* @param {Record<string,boolean>} prev The older object.
|
||||
* @returns {Record<string,boolean>} The difference object.
|
||||
*/
|
||||
function getDiff(current, prev) {
|
||||
const retv = {};
|
||||
|
||||
for (const [key, value] of Object.entries(current)) {
|
||||
if (!Object.hasOwnProperty.call(prev, key)) {
|
||||
retv[key] = value;
|
||||
}
|
||||
}
|
||||
|
||||
return retv;
|
||||
}
|
||||
|
||||
const newGlobals2015 = getDiff(globals.es2015, globals.es5); // 19 variables such as Promise, Map, ...
|
||||
const newGlobals2017 = {
|
||||
Atomics: false,
|
||||
SharedArrayBuffer: false
|
||||
};
|
||||
const newGlobals2020 = {
|
||||
BigInt: false,
|
||||
BigInt64Array: false,
|
||||
BigUint64Array: false,
|
||||
globalThis: false
|
||||
};
|
||||
|
||||
const newGlobals2021 = {
|
||||
AggregateError: false,
|
||||
FinalizationRegistry: false,
|
||||
WeakRef: false
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Public Interface
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/** @type {Map<string, import("../lib/shared/types").Environment>} */
|
||||
export default new Map(Object.entries({
|
||||
|
||||
// Language
|
||||
builtin: {
|
||||
globals: globals.es5
|
||||
},
|
||||
es6: {
|
||||
globals: newGlobals2015,
|
||||
parserOptions: {
|
||||
ecmaVersion: 6
|
||||
}
|
||||
},
|
||||
es2015: {
|
||||
globals: newGlobals2015,
|
||||
parserOptions: {
|
||||
ecmaVersion: 6
|
||||
}
|
||||
},
|
||||
es2016: {
|
||||
globals: newGlobals2015,
|
||||
parserOptions: {
|
||||
ecmaVersion: 7
|
||||
}
|
||||
},
|
||||
es2017: {
|
||||
globals: { ...newGlobals2015, ...newGlobals2017 },
|
||||
parserOptions: {
|
||||
ecmaVersion: 8
|
||||
}
|
||||
},
|
||||
es2018: {
|
||||
globals: { ...newGlobals2015, ...newGlobals2017 },
|
||||
parserOptions: {
|
||||
ecmaVersion: 9
|
||||
}
|
||||
},
|
||||
es2019: {
|
||||
globals: { ...newGlobals2015, ...newGlobals2017 },
|
||||
parserOptions: {
|
||||
ecmaVersion: 10
|
||||
}
|
||||
},
|
||||
es2020: {
|
||||
globals: { ...newGlobals2015, ...newGlobals2017, ...newGlobals2020 },
|
||||
parserOptions: {
|
||||
ecmaVersion: 11
|
||||
}
|
||||
},
|
||||
es2021: {
|
||||
globals: { ...newGlobals2015, ...newGlobals2017, ...newGlobals2020, ...newGlobals2021 },
|
||||
parserOptions: {
|
||||
ecmaVersion: 12
|
||||
}
|
||||
},
|
||||
es2022: {
|
||||
globals: { ...newGlobals2015, ...newGlobals2017, ...newGlobals2020, ...newGlobals2021 },
|
||||
parserOptions: {
|
||||
ecmaVersion: 13
|
||||
}
|
||||
},
|
||||
es2023: {
|
||||
globals: { ...newGlobals2015, ...newGlobals2017, ...newGlobals2020, ...newGlobals2021 },
|
||||
parserOptions: {
|
||||
ecmaVersion: 14
|
||||
}
|
||||
},
|
||||
es2024: {
|
||||
globals: { ...newGlobals2015, ...newGlobals2017, ...newGlobals2020, ...newGlobals2021 },
|
||||
parserOptions: {
|
||||
ecmaVersion: 15
|
||||
}
|
||||
},
|
||||
|
||||
// Platforms
|
||||
browser: {
|
||||
globals: globals.browser
|
||||
},
|
||||
node: {
|
||||
globals: globals.node,
|
||||
parserOptions: {
|
||||
ecmaFeatures: {
|
||||
globalReturn: true
|
||||
}
|
||||
}
|
||||
},
|
||||
"shared-node-browser": {
|
||||
globals: globals["shared-node-browser"]
|
||||
},
|
||||
worker: {
|
||||
globals: globals.worker
|
||||
},
|
||||
serviceworker: {
|
||||
globals: globals.serviceworker
|
||||
},
|
||||
|
||||
// Frameworks
|
||||
commonjs: {
|
||||
globals: globals.commonjs,
|
||||
parserOptions: {
|
||||
ecmaFeatures: {
|
||||
globalReturn: true
|
||||
}
|
||||
}
|
||||
},
|
||||
amd: {
|
||||
globals: globals.amd
|
||||
},
|
||||
mocha: {
|
||||
globals: globals.mocha
|
||||
},
|
||||
jasmine: {
|
||||
globals: globals.jasmine
|
||||
},
|
||||
jest: {
|
||||
globals: globals.jest
|
||||
},
|
||||
phantomjs: {
|
||||
globals: globals.phantomjs
|
||||
},
|
||||
jquery: {
|
||||
globals: globals.jquery
|
||||
},
|
||||
qunit: {
|
||||
globals: globals.qunit
|
||||
},
|
||||
prototypejs: {
|
||||
globals: globals.prototypejs
|
||||
},
|
||||
shelljs: {
|
||||
globals: globals.shelljs
|
||||
},
|
||||
meteor: {
|
||||
globals: globals.meteor
|
||||
},
|
||||
mongo: {
|
||||
globals: globals.mongo
|
||||
},
|
||||
protractor: {
|
||||
globals: globals.protractor
|
||||
},
|
||||
applescript: {
|
||||
globals: globals.applescript
|
||||
},
|
||||
nashorn: {
|
||||
globals: globals.nashorn
|
||||
},
|
||||
atomtest: {
|
||||
globals: globals.atomtest
|
||||
},
|
||||
embertest: {
|
||||
globals: globals.embertest
|
||||
},
|
||||
webextensions: {
|
||||
globals: globals.webextensions
|
||||
},
|
||||
greasemonkey: {
|
||||
globals: globals.greasemonkey
|
||||
}
|
||||
}));
|
||||
1104
syntax/vscode/node_modules/@eslint/eslintrc/dist/eslintrc-universal.cjs
generated
vendored
1104
syntax/vscode/node_modules/@eslint/eslintrc/dist/eslintrc-universal.cjs
generated
vendored
File diff suppressed because it is too large
Load diff
1
syntax/vscode/node_modules/@eslint/eslintrc/dist/eslintrc-universal.cjs.map
generated
vendored
1
syntax/vscode/node_modules/@eslint/eslintrc/dist/eslintrc-universal.cjs.map
generated
vendored
File diff suppressed because one or more lines are too long
4344
syntax/vscode/node_modules/@eslint/eslintrc/dist/eslintrc.cjs
generated
vendored
4344
syntax/vscode/node_modules/@eslint/eslintrc/dist/eslintrc.cjs
generated
vendored
File diff suppressed because it is too large
Load diff
1
syntax/vscode/node_modules/@eslint/eslintrc/dist/eslintrc.cjs.map
generated
vendored
1
syntax/vscode/node_modules/@eslint/eslintrc/dist/eslintrc.cjs.map
generated
vendored
File diff suppressed because one or more lines are too long
532
syntax/vscode/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js
generated
vendored
532
syntax/vscode/node_modules/@eslint/eslintrc/lib/cascading-config-array-factory.js
generated
vendored
|
|
@ -1,532 +0,0 @@
|
|||
/**
|
||||
* @fileoverview `CascadingConfigArrayFactory` class.
|
||||
*
|
||||
* `CascadingConfigArrayFactory` class has a responsibility:
|
||||
*
|
||||
* 1. Handles cascading of config files.
|
||||
*
|
||||
* It provides two methods:
|
||||
*
|
||||
* - `getConfigArrayForFile(filePath)`
|
||||
* Get the corresponded configuration of a given file. This method doesn't
|
||||
* throw even if the given file didn't exist.
|
||||
* - `clearCache()`
|
||||
* Clear the internal cache. You have to call this method when
|
||||
* `additionalPluginPool` was updated if `baseConfig` or `cliConfig` depends
|
||||
* on the additional plugins. (`CLIEngine#addPlugin()` method calls this.)
|
||||
*
|
||||
* @author Toru Nagashima <https://github.com/mysticatea>
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Requirements
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
import debugOrig from "debug";
|
||||
import os from "os";
|
||||
import path from "path";
|
||||
|
||||
import { ConfigArrayFactory } from "./config-array-factory.js";
|
||||
import {
|
||||
ConfigArray,
|
||||
ConfigDependency,
|
||||
IgnorePattern
|
||||
} from "./config-array/index.js";
|
||||
import ConfigValidator from "./shared/config-validator.js";
|
||||
import { emitDeprecationWarning } from "./shared/deprecation-warnings.js";
|
||||
|
||||
const debug = debugOrig("eslintrc:cascading-config-array-factory");
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Helpers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
// Define types for VSCode IntelliSense.
|
||||
/** @typedef {import("./shared/types").ConfigData} ConfigData */
|
||||
/** @typedef {import("./shared/types").Parser} Parser */
|
||||
/** @typedef {import("./shared/types").Plugin} Plugin */
|
||||
/** @typedef {import("./shared/types").Rule} Rule */
|
||||
/** @typedef {ReturnType<ConfigArrayFactory["create"]>} ConfigArray */
|
||||
|
||||
/**
|
||||
* @typedef {Object} CascadingConfigArrayFactoryOptions
|
||||
* @property {Map<string,Plugin>} [additionalPluginPool] The map for additional plugins.
|
||||
* @property {ConfigData} [baseConfig] The config by `baseConfig` option.
|
||||
* @property {ConfigData} [cliConfig] The config by CLI options (`--env`, `--global`, `--ignore-pattern`, `--parser`, `--parser-options`, `--plugin`, and `--rule`). CLI options overwrite the setting in config files.
|
||||
* @property {string} [cwd] The base directory to start lookup.
|
||||
* @property {string} [ignorePath] The path to the alternative file of `.eslintignore`.
|
||||
* @property {string[]} [rulePaths] The value of `--rulesdir` option.
|
||||
* @property {string} [specificConfigPath] The value of `--config` option.
|
||||
* @property {boolean} [useEslintrc] if `false` then it doesn't load config files.
|
||||
* @property {Function} loadRules The function to use to load rules.
|
||||
* @property {Map<string,Rule>} builtInRules The rules that are built in to ESLint.
|
||||
* @property {Object} [resolver=ModuleResolver] The module resolver object.
|
||||
* @property {string} eslintAllPath The path to the definitions for eslint:all.
|
||||
* @property {Function} getEslintAllConfig Returns the config data for eslint:all.
|
||||
* @property {string} eslintRecommendedPath The path to the definitions for eslint:recommended.
|
||||
* @property {Function} getEslintRecommendedConfig Returns the config data for eslint:recommended.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} CascadingConfigArrayFactoryInternalSlots
|
||||
* @property {ConfigArray} baseConfigArray The config array of `baseConfig` option.
|
||||
* @property {ConfigData} baseConfigData The config data of `baseConfig` option. This is used to reset `baseConfigArray`.
|
||||
* @property {ConfigArray} cliConfigArray The config array of CLI options.
|
||||
* @property {ConfigData} cliConfigData The config data of CLI options. This is used to reset `cliConfigArray`.
|
||||
* @property {ConfigArrayFactory} configArrayFactory The factory for config arrays.
|
||||
* @property {Map<string, ConfigArray>} configCache The cache from directory paths to config arrays.
|
||||
* @property {string} cwd The base directory to start lookup.
|
||||
* @property {WeakMap<ConfigArray, ConfigArray>} finalizeCache The cache from config arrays to finalized config arrays.
|
||||
* @property {string} [ignorePath] The path to the alternative file of `.eslintignore`.
|
||||
* @property {string[]|null} rulePaths The value of `--rulesdir` option. This is used to reset `baseConfigArray`.
|
||||
* @property {string|null} specificConfigPath The value of `--config` option. This is used to reset `cliConfigArray`.
|
||||
* @property {boolean} useEslintrc if `false` then it doesn't load config files.
|
||||
* @property {Function} loadRules The function to use to load rules.
|
||||
* @property {Map<string,Rule>} builtInRules The rules that are built in to ESLint.
|
||||
* @property {Object} [resolver=ModuleResolver] The module resolver object.
|
||||
* @property {string} eslintAllPath The path to the definitions for eslint:all.
|
||||
* @property {Function} getEslintAllConfig Returns the config data for eslint:all.
|
||||
* @property {string} eslintRecommendedPath The path to the definitions for eslint:recommended.
|
||||
* @property {Function} getEslintRecommendedConfig Returns the config data for eslint:recommended.
|
||||
*/
|
||||
|
||||
/** @type {WeakMap<CascadingConfigArrayFactory, CascadingConfigArrayFactoryInternalSlots>} */
|
||||
const internalSlotsMap = new WeakMap();
|
||||
|
||||
/**
|
||||
* Create the config array from `baseConfig` and `rulePaths`.
|
||||
* @param {CascadingConfigArrayFactoryInternalSlots} slots The slots.
|
||||
* @returns {ConfigArray} The config array of the base configs.
|
||||
*/
|
||||
function createBaseConfigArray({
|
||||
configArrayFactory,
|
||||
baseConfigData,
|
||||
rulePaths,
|
||||
cwd,
|
||||
loadRules
|
||||
}) {
|
||||
const baseConfigArray = configArrayFactory.create(
|
||||
baseConfigData,
|
||||
{ name: "BaseConfig" }
|
||||
);
|
||||
|
||||
/*
|
||||
* Create the config array element for the default ignore patterns.
|
||||
* This element has `ignorePattern` property that ignores the default
|
||||
* patterns in the current working directory.
|
||||
*/
|
||||
baseConfigArray.unshift(configArrayFactory.create(
|
||||
{ ignorePatterns: IgnorePattern.DefaultPatterns },
|
||||
{ name: "DefaultIgnorePattern" }
|
||||
)[0]);
|
||||
|
||||
/*
|
||||
* Load rules `--rulesdir` option as a pseudo plugin.
|
||||
* Use a pseudo plugin to define rules of `--rulesdir`, so we can validate
|
||||
* the rule's options with only information in the config array.
|
||||
*/
|
||||
if (rulePaths && rulePaths.length > 0) {
|
||||
baseConfigArray.push({
|
||||
type: "config",
|
||||
name: "--rulesdir",
|
||||
filePath: "",
|
||||
plugins: {
|
||||
"": new ConfigDependency({
|
||||
definition: {
|
||||
rules: rulePaths.reduce(
|
||||
(map, rulesPath) => Object.assign(
|
||||
map,
|
||||
loadRules(rulesPath, cwd)
|
||||
),
|
||||
{}
|
||||
)
|
||||
},
|
||||
filePath: "",
|
||||
id: "",
|
||||
importerName: "--rulesdir",
|
||||
importerPath: ""
|
||||
})
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return baseConfigArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the config array from CLI options.
|
||||
* @param {CascadingConfigArrayFactoryInternalSlots} slots The slots.
|
||||
* @returns {ConfigArray} The config array of the base configs.
|
||||
*/
|
||||
function createCLIConfigArray({
|
||||
cliConfigData,
|
||||
configArrayFactory,
|
||||
cwd,
|
||||
ignorePath,
|
||||
specificConfigPath
|
||||
}) {
|
||||
const cliConfigArray = configArrayFactory.create(
|
||||
cliConfigData,
|
||||
{ name: "CLIOptions" }
|
||||
);
|
||||
|
||||
cliConfigArray.unshift(
|
||||
...(ignorePath
|
||||
? configArrayFactory.loadESLintIgnore(ignorePath)
|
||||
: configArrayFactory.loadDefaultESLintIgnore())
|
||||
);
|
||||
|
||||
if (specificConfigPath) {
|
||||
cliConfigArray.unshift(
|
||||
...configArrayFactory.loadFile(
|
||||
specificConfigPath,
|
||||
{ name: "--config", basePath: cwd }
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
return cliConfigArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* The error type when there are files matched by a glob, but all of them have been ignored.
|
||||
*/
|
||||
class ConfigurationNotFoundError extends Error {
|
||||
|
||||
// eslint-disable-next-line jsdoc/require-description
|
||||
/**
|
||||
* @param {string} directoryPath The directory path.
|
||||
*/
|
||||
constructor(directoryPath) {
|
||||
super(`No ESLint configuration found in ${directoryPath}.`);
|
||||
this.messageTemplate = "no-config-found";
|
||||
this.messageData = { directoryPath };
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* This class provides the functionality that enumerates every file which is
|
||||
* matched by given glob patterns and that configuration.
|
||||
*/
|
||||
class CascadingConfigArrayFactory {
|
||||
|
||||
/**
|
||||
* Initialize this enumerator.
|
||||
* @param {CascadingConfigArrayFactoryOptions} options The options.
|
||||
*/
|
||||
constructor({
|
||||
additionalPluginPool = new Map(),
|
||||
baseConfig: baseConfigData = null,
|
||||
cliConfig: cliConfigData = null,
|
||||
cwd = process.cwd(),
|
||||
ignorePath,
|
||||
resolvePluginsRelativeTo,
|
||||
rulePaths = [],
|
||||
specificConfigPath = null,
|
||||
useEslintrc = true,
|
||||
builtInRules = new Map(),
|
||||
loadRules,
|
||||
resolver,
|
||||
eslintRecommendedPath,
|
||||
getEslintRecommendedConfig,
|
||||
eslintAllPath,
|
||||
getEslintAllConfig
|
||||
} = {}) {
|
||||
const configArrayFactory = new ConfigArrayFactory({
|
||||
additionalPluginPool,
|
||||
cwd,
|
||||
resolvePluginsRelativeTo,
|
||||
builtInRules,
|
||||
resolver,
|
||||
eslintRecommendedPath,
|
||||
getEslintRecommendedConfig,
|
||||
eslintAllPath,
|
||||
getEslintAllConfig
|
||||
});
|
||||
|
||||
internalSlotsMap.set(this, {
|
||||
baseConfigArray: createBaseConfigArray({
|
||||
baseConfigData,
|
||||
configArrayFactory,
|
||||
cwd,
|
||||
rulePaths,
|
||||
loadRules
|
||||
}),
|
||||
baseConfigData,
|
||||
cliConfigArray: createCLIConfigArray({
|
||||
cliConfigData,
|
||||
configArrayFactory,
|
||||
cwd,
|
||||
ignorePath,
|
||||
specificConfigPath
|
||||
}),
|
||||
cliConfigData,
|
||||
configArrayFactory,
|
||||
configCache: new Map(),
|
||||
cwd,
|
||||
finalizeCache: new WeakMap(),
|
||||
ignorePath,
|
||||
rulePaths,
|
||||
specificConfigPath,
|
||||
useEslintrc,
|
||||
builtInRules,
|
||||
loadRules
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* The path to the current working directory.
|
||||
* This is used by tests.
|
||||
* @type {string}
|
||||
*/
|
||||
get cwd() {
|
||||
const { cwd } = internalSlotsMap.get(this);
|
||||
|
||||
return cwd;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the config array of a given file.
|
||||
* If `filePath` was not given, it returns the config which contains only
|
||||
* `baseConfigData` and `cliConfigData`.
|
||||
* @param {string} [filePath] The file path to a file.
|
||||
* @param {Object} [options] The options.
|
||||
* @param {boolean} [options.ignoreNotFoundError] If `true` then it doesn't throw `ConfigurationNotFoundError`.
|
||||
* @returns {ConfigArray} The config array of the file.
|
||||
*/
|
||||
getConfigArrayForFile(filePath, { ignoreNotFoundError = false } = {}) {
|
||||
const {
|
||||
baseConfigArray,
|
||||
cliConfigArray,
|
||||
cwd
|
||||
} = internalSlotsMap.get(this);
|
||||
|
||||
if (!filePath) {
|
||||
return new ConfigArray(...baseConfigArray, ...cliConfigArray);
|
||||
}
|
||||
|
||||
const directoryPath = path.dirname(path.resolve(cwd, filePath));
|
||||
|
||||
debug(`Load config files for ${directoryPath}.`);
|
||||
|
||||
return this._finalizeConfigArray(
|
||||
this._loadConfigInAncestors(directoryPath),
|
||||
directoryPath,
|
||||
ignoreNotFoundError
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the config data to override all configs.
|
||||
* Require to call `clearCache()` method after this method is called.
|
||||
* @param {ConfigData} configData The config data to override all configs.
|
||||
* @returns {void}
|
||||
*/
|
||||
setOverrideConfig(configData) {
|
||||
const slots = internalSlotsMap.get(this);
|
||||
|
||||
slots.cliConfigData = configData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear config cache.
|
||||
* @returns {void}
|
||||
*/
|
||||
clearCache() {
|
||||
const slots = internalSlotsMap.get(this);
|
||||
|
||||
slots.baseConfigArray = createBaseConfigArray(slots);
|
||||
slots.cliConfigArray = createCLIConfigArray(slots);
|
||||
slots.configCache.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
* Load and normalize config files from the ancestor directories.
|
||||
* @param {string} directoryPath The path to a leaf directory.
|
||||
* @param {boolean} configsExistInSubdirs `true` if configurations exist in subdirectories.
|
||||
* @returns {ConfigArray} The loaded config.
|
||||
* @private
|
||||
*/
|
||||
_loadConfigInAncestors(directoryPath, configsExistInSubdirs = false) {
|
||||
const {
|
||||
baseConfigArray,
|
||||
configArrayFactory,
|
||||
configCache,
|
||||
cwd,
|
||||
useEslintrc
|
||||
} = internalSlotsMap.get(this);
|
||||
|
||||
if (!useEslintrc) {
|
||||
return baseConfigArray;
|
||||
}
|
||||
|
||||
let configArray = configCache.get(directoryPath);
|
||||
|
||||
// Hit cache.
|
||||
if (configArray) {
|
||||
debug(`Cache hit: ${directoryPath}.`);
|
||||
return configArray;
|
||||
}
|
||||
debug(`No cache found: ${directoryPath}.`);
|
||||
|
||||
const homePath = os.homedir();
|
||||
|
||||
// Consider this is root.
|
||||
if (directoryPath === homePath && cwd !== homePath) {
|
||||
debug("Stop traversing because of considered root.");
|
||||
if (configsExistInSubdirs) {
|
||||
const filePath = ConfigArrayFactory.getPathToConfigFileInDirectory(directoryPath);
|
||||
|
||||
if (filePath) {
|
||||
emitDeprecationWarning(
|
||||
filePath,
|
||||
"ESLINT_PERSONAL_CONFIG_SUPPRESS"
|
||||
);
|
||||
}
|
||||
}
|
||||
return this._cacheConfig(directoryPath, baseConfigArray);
|
||||
}
|
||||
|
||||
// Load the config on this directory.
|
||||
try {
|
||||
configArray = configArrayFactory.loadInDirectory(directoryPath);
|
||||
} catch (error) {
|
||||
/* istanbul ignore next */
|
||||
if (error.code === "EACCES") {
|
||||
debug("Stop traversing because of 'EACCES' error.");
|
||||
return this._cacheConfig(directoryPath, baseConfigArray);
|
||||
}
|
||||
throw error;
|
||||
}
|
||||
|
||||
if (configArray.length > 0 && configArray.isRoot()) {
|
||||
debug("Stop traversing because of 'root:true'.");
|
||||
configArray.unshift(...baseConfigArray);
|
||||
return this._cacheConfig(directoryPath, configArray);
|
||||
}
|
||||
|
||||
// Load from the ancestors and merge it.
|
||||
const parentPath = path.dirname(directoryPath);
|
||||
const parentConfigArray = parentPath && parentPath !== directoryPath
|
||||
? this._loadConfigInAncestors(
|
||||
parentPath,
|
||||
configsExistInSubdirs || configArray.length > 0
|
||||
)
|
||||
: baseConfigArray;
|
||||
|
||||
if (configArray.length > 0) {
|
||||
configArray.unshift(...parentConfigArray);
|
||||
} else {
|
||||
configArray = parentConfigArray;
|
||||
}
|
||||
|
||||
// Cache and return.
|
||||
return this._cacheConfig(directoryPath, configArray);
|
||||
}
|
||||
|
||||
/**
|
||||
* Freeze and cache a given config.
|
||||
* @param {string} directoryPath The path to a directory as a cache key.
|
||||
* @param {ConfigArray} configArray The config array as a cache value.
|
||||
* @returns {ConfigArray} The `configArray` (frozen).
|
||||
*/
|
||||
_cacheConfig(directoryPath, configArray) {
|
||||
const { configCache } = internalSlotsMap.get(this);
|
||||
|
||||
Object.freeze(configArray);
|
||||
configCache.set(directoryPath, configArray);
|
||||
|
||||
return configArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finalize a given config array.
|
||||
* Concatenate `--config` and other CLI options.
|
||||
* @param {ConfigArray} configArray The parent config array.
|
||||
* @param {string} directoryPath The path to the leaf directory to find config files.
|
||||
* @param {boolean} ignoreNotFoundError If `true` then it doesn't throw `ConfigurationNotFoundError`.
|
||||
* @returns {ConfigArray} The loaded config.
|
||||
* @private
|
||||
*/
|
||||
_finalizeConfigArray(configArray, directoryPath, ignoreNotFoundError) {
|
||||
const {
|
||||
cliConfigArray,
|
||||
configArrayFactory,
|
||||
finalizeCache,
|
||||
useEslintrc,
|
||||
builtInRules
|
||||
} = internalSlotsMap.get(this);
|
||||
|
||||
let finalConfigArray = finalizeCache.get(configArray);
|
||||
|
||||
if (!finalConfigArray) {
|
||||
finalConfigArray = configArray;
|
||||
|
||||
// Load the personal config if there are no regular config files.
|
||||
if (
|
||||
useEslintrc &&
|
||||
configArray.every(c => !c.filePath) &&
|
||||
cliConfigArray.every(c => !c.filePath) // `--config` option can be a file.
|
||||
) {
|
||||
const homePath = os.homedir();
|
||||
|
||||
debug("Loading the config file of the home directory:", homePath);
|
||||
|
||||
const personalConfigArray = configArrayFactory.loadInDirectory(
|
||||
homePath,
|
||||
{ name: "PersonalConfig" }
|
||||
);
|
||||
|
||||
if (
|
||||
personalConfigArray.length > 0 &&
|
||||
!directoryPath.startsWith(homePath)
|
||||
) {
|
||||
const lastElement =
|
||||
personalConfigArray[personalConfigArray.length - 1];
|
||||
|
||||
emitDeprecationWarning(
|
||||
lastElement.filePath,
|
||||
"ESLINT_PERSONAL_CONFIG_LOAD"
|
||||
);
|
||||
}
|
||||
|
||||
finalConfigArray = finalConfigArray.concat(personalConfigArray);
|
||||
}
|
||||
|
||||
// Apply CLI options.
|
||||
if (cliConfigArray.length > 0) {
|
||||
finalConfigArray = finalConfigArray.concat(cliConfigArray);
|
||||
}
|
||||
|
||||
// Validate rule settings and environments.
|
||||
const validator = new ConfigValidator({
|
||||
builtInRules
|
||||
});
|
||||
|
||||
validator.validateConfigArray(finalConfigArray);
|
||||
|
||||
// Cache it.
|
||||
Object.freeze(finalConfigArray);
|
||||
finalizeCache.set(configArray, finalConfigArray);
|
||||
|
||||
debug(
|
||||
"Configuration was determined: %o on %s",
|
||||
finalConfigArray,
|
||||
directoryPath
|
||||
);
|
||||
}
|
||||
|
||||
// At least one element (the default ignore patterns) exists.
|
||||
if (!ignoreNotFoundError && useEslintrc && finalConfigArray.length <= 1) {
|
||||
throw new ConfigurationNotFoundError(directoryPath);
|
||||
}
|
||||
|
||||
return finalConfigArray;
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Public Interface
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
export { CascadingConfigArrayFactory };
|
||||
1151
syntax/vscode/node_modules/@eslint/eslintrc/lib/config-array-factory.js
generated
vendored
1151
syntax/vscode/node_modules/@eslint/eslintrc/lib/config-array-factory.js
generated
vendored
File diff suppressed because it is too large
Load diff
523
syntax/vscode/node_modules/@eslint/eslintrc/lib/config-array/config-array.js
generated
vendored
523
syntax/vscode/node_modules/@eslint/eslintrc/lib/config-array/config-array.js
generated
vendored
|
|
@ -1,523 +0,0 @@
|
|||
/**
|
||||
* @fileoverview `ConfigArray` class.
|
||||
*
|
||||
* `ConfigArray` class expresses the full of a configuration. It has the entry
|
||||
* config file, base config files that were extended, loaded parsers, and loaded
|
||||
* plugins.
|
||||
*
|
||||
* `ConfigArray` class provides three properties and two methods.
|
||||
*
|
||||
* - `pluginEnvironments`
|
||||
* - `pluginProcessors`
|
||||
* - `pluginRules`
|
||||
* The `Map` objects that contain the members of all plugins that this
|
||||
* config array contains. Those map objects don't have mutation methods.
|
||||
* Those keys are the member ID such as `pluginId/memberName`.
|
||||
* - `isRoot()`
|
||||
* If `true` then this configuration has `root:true` property.
|
||||
* - `extractConfig(filePath)`
|
||||
* Extract the final configuration for a given file. This means merging
|
||||
* every config array element which that `criteria` property matched. The
|
||||
* `filePath` argument must be an absolute path.
|
||||
*
|
||||
* `ConfigArrayFactory` provides the loading logic of config files.
|
||||
*
|
||||
* @author Toru Nagashima <https://github.com/mysticatea>
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Requirements
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
import { ExtractedConfig } from "./extracted-config.js";
|
||||
import { IgnorePattern } from "./ignore-pattern.js";
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Helpers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
// Define types for VSCode IntelliSense.
|
||||
/** @typedef {import("../../shared/types").Environment} Environment */
|
||||
/** @typedef {import("../../shared/types").GlobalConf} GlobalConf */
|
||||
/** @typedef {import("../../shared/types").RuleConf} RuleConf */
|
||||
/** @typedef {import("../../shared/types").Rule} Rule */
|
||||
/** @typedef {import("../../shared/types").Plugin} Plugin */
|
||||
/** @typedef {import("../../shared/types").Processor} Processor */
|
||||
/** @typedef {import("./config-dependency").DependentParser} DependentParser */
|
||||
/** @typedef {import("./config-dependency").DependentPlugin} DependentPlugin */
|
||||
/** @typedef {import("./override-tester")["OverrideTester"]} OverrideTester */
|
||||
|
||||
/**
|
||||
* @typedef {Object} ConfigArrayElement
|
||||
* @property {string} name The name of this config element.
|
||||
* @property {string} filePath The path to the source file of this config element.
|
||||
* @property {InstanceType<OverrideTester>|null} criteria The tester for the `files` and `excludedFiles` of this config element.
|
||||
* @property {Record<string, boolean>|undefined} env The environment settings.
|
||||
* @property {Record<string, GlobalConf>|undefined} globals The global variable settings.
|
||||
* @property {IgnorePattern|undefined} ignorePattern The ignore patterns.
|
||||
* @property {boolean|undefined} noInlineConfig The flag that disables directive comments.
|
||||
* @property {DependentParser|undefined} parser The parser loader.
|
||||
* @property {Object|undefined} parserOptions The parser options.
|
||||
* @property {Record<string, DependentPlugin>|undefined} plugins The plugin loaders.
|
||||
* @property {string|undefined} processor The processor name to refer plugin's processor.
|
||||
* @property {boolean|undefined} reportUnusedDisableDirectives The flag to report unused `eslint-disable` comments.
|
||||
* @property {boolean|undefined} root The flag to express root.
|
||||
* @property {Record<string, RuleConf>|undefined} rules The rule settings
|
||||
* @property {Object|undefined} settings The shared settings.
|
||||
* @property {"config" | "ignore" | "implicit-processor"} type The element type.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @typedef {Object} ConfigArrayInternalSlots
|
||||
* @property {Map<string, ExtractedConfig>} cache The cache to extract configs.
|
||||
* @property {ReadonlyMap<string, Environment>|null} envMap The map from environment ID to environment definition.
|
||||
* @property {ReadonlyMap<string, Processor>|null} processorMap The map from processor ID to environment definition.
|
||||
* @property {ReadonlyMap<string, Rule>|null} ruleMap The map from rule ID to rule definition.
|
||||
*/
|
||||
|
||||
/** @type {WeakMap<ConfigArray, ConfigArrayInternalSlots>} */
|
||||
const internalSlotsMap = new class extends WeakMap {
|
||||
get(key) {
|
||||
let value = super.get(key);
|
||||
|
||||
if (!value) {
|
||||
value = {
|
||||
cache: new Map(),
|
||||
envMap: null,
|
||||
processorMap: null,
|
||||
ruleMap: null
|
||||
};
|
||||
super.set(key, value);
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
||||
}();
|
||||
|
||||
/**
|
||||
* Get the indices which are matched to a given file.
|
||||
* @param {ConfigArrayElement[]} elements The elements.
|
||||
* @param {string} filePath The path to a target file.
|
||||
* @returns {number[]} The indices.
|
||||
*/
|
||||
function getMatchedIndices(elements, filePath) {
|
||||
const indices = [];
|
||||
|
||||
for (let i = elements.length - 1; i >= 0; --i) {
|
||||
const element = elements[i];
|
||||
|
||||
if (!element.criteria || (filePath && element.criteria.test(filePath))) {
|
||||
indices.push(i);
|
||||
}
|
||||
}
|
||||
|
||||
return indices;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a value is a non-null object.
|
||||
* @param {any} x The value to check.
|
||||
* @returns {boolean} `true` if the value is a non-null object.
|
||||
*/
|
||||
function isNonNullObject(x) {
|
||||
return typeof x === "object" && x !== null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Merge two objects.
|
||||
*
|
||||
* Assign every property values of `y` to `x` if `x` doesn't have the property.
|
||||
* If `x`'s property value is an object, it does recursive.
|
||||
* @param {Object} target The destination to merge
|
||||
* @param {Object|undefined} source The source to merge.
|
||||
* @returns {void}
|
||||
*/
|
||||
function mergeWithoutOverwrite(target, source) {
|
||||
if (!isNonNullObject(source)) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (const key of Object.keys(source)) {
|
||||
if (key === "__proto__") {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isNonNullObject(target[key])) {
|
||||
mergeWithoutOverwrite(target[key], source[key]);
|
||||
} else if (target[key] === void 0) {
|
||||
if (isNonNullObject(source[key])) {
|
||||
target[key] = Array.isArray(source[key]) ? [] : {};
|
||||
mergeWithoutOverwrite(target[key], source[key]);
|
||||
} else if (source[key] !== void 0) {
|
||||
target[key] = source[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The error for plugin conflicts.
|
||||
*/
|
||||
class PluginConflictError extends Error {
|
||||
|
||||
/**
|
||||
* Initialize this error object.
|
||||
* @param {string} pluginId The plugin ID.
|
||||
* @param {{filePath:string, importerName:string}[]} plugins The resolved plugins.
|
||||
*/
|
||||
constructor(pluginId, plugins) {
|
||||
super(`Plugin "${pluginId}" was conflicted between ${plugins.map(p => `"${p.importerName}"`).join(" and ")}.`);
|
||||
this.messageTemplate = "plugin-conflict";
|
||||
this.messageData = { pluginId, plugins };
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Merge plugins.
|
||||
* `target`'s definition is prior to `source`'s.
|
||||
* @param {Record<string, DependentPlugin>} target The destination to merge
|
||||
* @param {Record<string, DependentPlugin>|undefined} source The source to merge.
|
||||
* @returns {void}
|
||||
*/
|
||||
function mergePlugins(target, source) {
|
||||
if (!isNonNullObject(source)) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (const key of Object.keys(source)) {
|
||||
if (key === "__proto__") {
|
||||
continue;
|
||||
}
|
||||
const targetValue = target[key];
|
||||
const sourceValue = source[key];
|
||||
|
||||
// Adopt the plugin which was found at first.
|
||||
if (targetValue === void 0) {
|
||||
if (sourceValue.error) {
|
||||
throw sourceValue.error;
|
||||
}
|
||||
target[key] = sourceValue;
|
||||
} else if (sourceValue.filePath !== targetValue.filePath) {
|
||||
throw new PluginConflictError(key, [
|
||||
{
|
||||
filePath: targetValue.filePath,
|
||||
importerName: targetValue.importerName
|
||||
},
|
||||
{
|
||||
filePath: sourceValue.filePath,
|
||||
importerName: sourceValue.importerName
|
||||
}
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Merge rule configs.
|
||||
* `target`'s definition is prior to `source`'s.
|
||||
* @param {Record<string, Array>} target The destination to merge
|
||||
* @param {Record<string, RuleConf>|undefined} source The source to merge.
|
||||
* @returns {void}
|
||||
*/
|
||||
function mergeRuleConfigs(target, source) {
|
||||
if (!isNonNullObject(source)) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (const key of Object.keys(source)) {
|
||||
if (key === "__proto__") {
|
||||
continue;
|
||||
}
|
||||
const targetDef = target[key];
|
||||
const sourceDef = source[key];
|
||||
|
||||
// Adopt the rule config which was found at first.
|
||||
if (targetDef === void 0) {
|
||||
if (Array.isArray(sourceDef)) {
|
||||
target[key] = [...sourceDef];
|
||||
} else {
|
||||
target[key] = [sourceDef];
|
||||
}
|
||||
|
||||
/*
|
||||
* If the first found rule config is severity only and the current rule
|
||||
* config has options, merge the severity and the options.
|
||||
*/
|
||||
} else if (
|
||||
targetDef.length === 1 &&
|
||||
Array.isArray(sourceDef) &&
|
||||
sourceDef.length >= 2
|
||||
) {
|
||||
targetDef.push(...sourceDef.slice(1));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the extracted config.
|
||||
* @param {ConfigArray} instance The config elements.
|
||||
* @param {number[]} indices The indices to use.
|
||||
* @returns {ExtractedConfig} The extracted config.
|
||||
*/
|
||||
function createConfig(instance, indices) {
|
||||
const config = new ExtractedConfig();
|
||||
const ignorePatterns = [];
|
||||
|
||||
// Merge elements.
|
||||
for (const index of indices) {
|
||||
const element = instance[index];
|
||||
|
||||
// Adopt the parser which was found at first.
|
||||
if (!config.parser && element.parser) {
|
||||
if (element.parser.error) {
|
||||
throw element.parser.error;
|
||||
}
|
||||
config.parser = element.parser;
|
||||
}
|
||||
|
||||
// Adopt the processor which was found at first.
|
||||
if (!config.processor && element.processor) {
|
||||
config.processor = element.processor;
|
||||
}
|
||||
|
||||
// Adopt the noInlineConfig which was found at first.
|
||||
if (config.noInlineConfig === void 0 && element.noInlineConfig !== void 0) {
|
||||
config.noInlineConfig = element.noInlineConfig;
|
||||
config.configNameOfNoInlineConfig = element.name;
|
||||
}
|
||||
|
||||
// Adopt the reportUnusedDisableDirectives which was found at first.
|
||||
if (config.reportUnusedDisableDirectives === void 0 && element.reportUnusedDisableDirectives !== void 0) {
|
||||
config.reportUnusedDisableDirectives = element.reportUnusedDisableDirectives;
|
||||
}
|
||||
|
||||
// Collect ignorePatterns
|
||||
if (element.ignorePattern) {
|
||||
ignorePatterns.push(element.ignorePattern);
|
||||
}
|
||||
|
||||
// Merge others.
|
||||
mergeWithoutOverwrite(config.env, element.env);
|
||||
mergeWithoutOverwrite(config.globals, element.globals);
|
||||
mergeWithoutOverwrite(config.parserOptions, element.parserOptions);
|
||||
mergeWithoutOverwrite(config.settings, element.settings);
|
||||
mergePlugins(config.plugins, element.plugins);
|
||||
mergeRuleConfigs(config.rules, element.rules);
|
||||
}
|
||||
|
||||
// Create the predicate function for ignore patterns.
|
||||
if (ignorePatterns.length > 0) {
|
||||
config.ignores = IgnorePattern.createIgnore(ignorePatterns.reverse());
|
||||
}
|
||||
|
||||
return config;
|
||||
}
|
||||
|
||||
/**
|
||||
* Collect definitions.
|
||||
* @template T, U
|
||||
* @param {string} pluginId The plugin ID for prefix.
|
||||
* @param {Record<string,T>} defs The definitions to collect.
|
||||
* @param {Map<string, U>} map The map to output.
|
||||
* @param {function(T): U} [normalize] The normalize function for each value.
|
||||
* @returns {void}
|
||||
*/
|
||||
function collect(pluginId, defs, map, normalize) {
|
||||
if (defs) {
|
||||
const prefix = pluginId && `${pluginId}/`;
|
||||
|
||||
for (const [key, value] of Object.entries(defs)) {
|
||||
map.set(
|
||||
`${prefix}${key}`,
|
||||
normalize ? normalize(value) : value
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalize a rule definition.
|
||||
* @param {Function|Rule} rule The rule definition to normalize.
|
||||
* @returns {Rule} The normalized rule definition.
|
||||
*/
|
||||
function normalizePluginRule(rule) {
|
||||
return typeof rule === "function" ? { create: rule } : rule;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete the mutation methods from a given map.
|
||||
* @param {Map<any, any>} map The map object to delete.
|
||||
* @returns {void}
|
||||
*/
|
||||
function deleteMutationMethods(map) {
|
||||
Object.defineProperties(map, {
|
||||
clear: { configurable: true, value: void 0 },
|
||||
delete: { configurable: true, value: void 0 },
|
||||
set: { configurable: true, value: void 0 }
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Create `envMap`, `processorMap`, `ruleMap` with the plugins in the config array.
|
||||
* @param {ConfigArrayElement[]} elements The config elements.
|
||||
* @param {ConfigArrayInternalSlots} slots The internal slots.
|
||||
* @returns {void}
|
||||
*/
|
||||
function initPluginMemberMaps(elements, slots) {
|
||||
const processed = new Set();
|
||||
|
||||
slots.envMap = new Map();
|
||||
slots.processorMap = new Map();
|
||||
slots.ruleMap = new Map();
|
||||
|
||||
for (const element of elements) {
|
||||
if (!element.plugins) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (const [pluginId, value] of Object.entries(element.plugins)) {
|
||||
const plugin = value.definition;
|
||||
|
||||
if (!plugin || processed.has(pluginId)) {
|
||||
continue;
|
||||
}
|
||||
processed.add(pluginId);
|
||||
|
||||
collect(pluginId, plugin.environments, slots.envMap);
|
||||
collect(pluginId, plugin.processors, slots.processorMap);
|
||||
collect(pluginId, plugin.rules, slots.ruleMap, normalizePluginRule);
|
||||
}
|
||||
}
|
||||
|
||||
deleteMutationMethods(slots.envMap);
|
||||
deleteMutationMethods(slots.processorMap);
|
||||
deleteMutationMethods(slots.ruleMap);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create `envMap`, `processorMap`, `ruleMap` with the plugins in the config array.
|
||||
* @param {ConfigArray} instance The config elements.
|
||||
* @returns {ConfigArrayInternalSlots} The extracted config.
|
||||
*/
|
||||
function ensurePluginMemberMaps(instance) {
|
||||
const slots = internalSlotsMap.get(instance);
|
||||
|
||||
if (!slots.ruleMap) {
|
||||
initPluginMemberMaps(instance, slots);
|
||||
}
|
||||
|
||||
return slots;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Public Interface
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* The Config Array.
|
||||
*
|
||||
* `ConfigArray` instance contains all settings, parsers, and plugins.
|
||||
* You need to call `ConfigArray#extractConfig(filePath)` method in order to
|
||||
* extract, merge and get only the config data which is related to an arbitrary
|
||||
* file.
|
||||
* @extends {Array<ConfigArrayElement>}
|
||||
*/
|
||||
class ConfigArray extends Array {
|
||||
|
||||
/**
|
||||
* Get the plugin environments.
|
||||
* The returned map cannot be mutated.
|
||||
* @type {ReadonlyMap<string, Environment>} The plugin environments.
|
||||
*/
|
||||
get pluginEnvironments() {
|
||||
return ensurePluginMemberMaps(this).envMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the plugin processors.
|
||||
* The returned map cannot be mutated.
|
||||
* @type {ReadonlyMap<string, Processor>} The plugin processors.
|
||||
*/
|
||||
get pluginProcessors() {
|
||||
return ensurePluginMemberMaps(this).processorMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the plugin rules.
|
||||
* The returned map cannot be mutated.
|
||||
* @returns {ReadonlyMap<string, Rule>} The plugin rules.
|
||||
*/
|
||||
get pluginRules() {
|
||||
return ensurePluginMemberMaps(this).ruleMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if this config has `root` flag.
|
||||
* @returns {boolean} `true` if this config array is root.
|
||||
*/
|
||||
isRoot() {
|
||||
for (let i = this.length - 1; i >= 0; --i) {
|
||||
const root = this[i].root;
|
||||
|
||||
if (typeof root === "boolean") {
|
||||
return root;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Extract the config data which is related to a given file.
|
||||
* @param {string} filePath The absolute path to the target file.
|
||||
* @returns {ExtractedConfig} The extracted config data.
|
||||
*/
|
||||
extractConfig(filePath) {
|
||||
const { cache } = internalSlotsMap.get(this);
|
||||
const indices = getMatchedIndices(this, filePath);
|
||||
const cacheKey = indices.join(",");
|
||||
|
||||
if (!cache.has(cacheKey)) {
|
||||
cache.set(cacheKey, createConfig(this, indices));
|
||||
}
|
||||
|
||||
return cache.get(cacheKey);
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a given path is an additional lint target.
|
||||
* @param {string} filePath The absolute path to the target file.
|
||||
* @returns {boolean} `true` if the file is an additional lint target.
|
||||
*/
|
||||
isAdditionalTargetPath(filePath) {
|
||||
for (const { criteria, type } of this) {
|
||||
if (
|
||||
type === "config" &&
|
||||
criteria &&
|
||||
!criteria.endsWithWildcard &&
|
||||
criteria.test(filePath)
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the used extracted configs.
|
||||
* CLIEngine will use this method to collect used deprecated rules.
|
||||
* @param {ConfigArray} instance The config array object to get.
|
||||
* @returns {ExtractedConfig[]} The used extracted configs.
|
||||
* @private
|
||||
*/
|
||||
function getUsedExtractedConfigs(instance) {
|
||||
const { cache } = internalSlotsMap.get(instance);
|
||||
|
||||
return Array.from(cache.values());
|
||||
}
|
||||
|
||||
|
||||
export {
|
||||
ConfigArray,
|
||||
getUsedExtractedConfigs
|
||||
};
|
||||
124
syntax/vscode/node_modules/@eslint/eslintrc/lib/config-array/config-dependency.js
generated
vendored
124
syntax/vscode/node_modules/@eslint/eslintrc/lib/config-array/config-dependency.js
generated
vendored
|
|
@ -1,124 +0,0 @@
|
|||
/**
|
||||
* @fileoverview `ConfigDependency` class.
|
||||
*
|
||||
* `ConfigDependency` class expresses a loaded parser or plugin.
|
||||
*
|
||||
* If the parser or plugin was loaded successfully, it has `definition` property
|
||||
* and `filePath` property. Otherwise, it has `error` property.
|
||||
*
|
||||
* When `JSON.stringify()` converted a `ConfigDependency` object to a JSON, it
|
||||
* omits `definition` property.
|
||||
*
|
||||
* `ConfigArrayFactory` creates `ConfigDependency` objects when it loads parsers
|
||||
* or plugins.
|
||||
*
|
||||
* @author Toru Nagashima <https://github.com/mysticatea>
|
||||
*/
|
||||
|
||||
import util from "util";
|
||||
|
||||
/**
|
||||
* The class is to store parsers or plugins.
|
||||
* This class hides the loaded object from `JSON.stringify()` and `console.log`.
|
||||
* @template T
|
||||
*/
|
||||
class ConfigDependency {
|
||||
|
||||
/**
|
||||
* Initialize this instance.
|
||||
* @param {Object} data The dependency data.
|
||||
* @param {T} [data.definition] The dependency if the loading succeeded.
|
||||
* @param {T} [data.original] The original, non-normalized dependency if the loading succeeded.
|
||||
* @param {Error} [data.error] The error object if the loading failed.
|
||||
* @param {string} [data.filePath] The actual path to the dependency if the loading succeeded.
|
||||
* @param {string} data.id The ID of this dependency.
|
||||
* @param {string} data.importerName The name of the config file which loads this dependency.
|
||||
* @param {string} data.importerPath The path to the config file which loads this dependency.
|
||||
*/
|
||||
constructor({
|
||||
definition = null,
|
||||
original = null,
|
||||
error = null,
|
||||
filePath = null,
|
||||
id,
|
||||
importerName,
|
||||
importerPath
|
||||
}) {
|
||||
|
||||
/**
|
||||
* The loaded dependency if the loading succeeded.
|
||||
* @type {T|null}
|
||||
*/
|
||||
this.definition = definition;
|
||||
|
||||
/**
|
||||
* The original dependency as loaded directly from disk if the loading succeeded.
|
||||
* @type {T|null}
|
||||
*/
|
||||
this.original = original;
|
||||
|
||||
/**
|
||||
* The error object if the loading failed.
|
||||
* @type {Error|null}
|
||||
*/
|
||||
this.error = error;
|
||||
|
||||
/**
|
||||
* The loaded dependency if the loading succeeded.
|
||||
* @type {string|null}
|
||||
*/
|
||||
this.filePath = filePath;
|
||||
|
||||
/**
|
||||
* The ID of this dependency.
|
||||
* @type {string}
|
||||
*/
|
||||
this.id = id;
|
||||
|
||||
/**
|
||||
* The name of the config file which loads this dependency.
|
||||
* @type {string}
|
||||
*/
|
||||
this.importerName = importerName;
|
||||
|
||||
/**
|
||||
* The path to the config file which loads this dependency.
|
||||
* @type {string}
|
||||
*/
|
||||
this.importerPath = importerPath;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line jsdoc/require-description
|
||||
/**
|
||||
* @returns {Object} a JSON compatible object.
|
||||
*/
|
||||
toJSON() {
|
||||
const obj = this[util.inspect.custom]();
|
||||
|
||||
// Display `error.message` (`Error#message` is unenumerable).
|
||||
if (obj.error instanceof Error) {
|
||||
obj.error = { ...obj.error, message: obj.error.message };
|
||||
}
|
||||
|
||||
return obj;
|
||||
}
|
||||
|
||||
// eslint-disable-next-line jsdoc/require-description
|
||||
/**
|
||||
* @returns {Object} an object to display by `console.log()`.
|
||||
*/
|
||||
[util.inspect.custom]() {
|
||||
const {
|
||||
definition: _ignore1, // eslint-disable-line no-unused-vars
|
||||
original: _ignore2, // eslint-disable-line no-unused-vars
|
||||
...obj
|
||||
} = this;
|
||||
|
||||
return obj;
|
||||
}
|
||||
}
|
||||
|
||||
/** @typedef {ConfigDependency<import("../../shared/types").Parser>} DependentParser */
|
||||
/** @typedef {ConfigDependency<import("../../shared/types").Plugin>} DependentPlugin */
|
||||
|
||||
export { ConfigDependency };
|
||||
145
syntax/vscode/node_modules/@eslint/eslintrc/lib/config-array/extracted-config.js
generated
vendored
145
syntax/vscode/node_modules/@eslint/eslintrc/lib/config-array/extracted-config.js
generated
vendored
|
|
@ -1,145 +0,0 @@
|
|||
/**
|
||||
* @fileoverview `ExtractedConfig` class.
|
||||
*
|
||||
* `ExtractedConfig` class expresses a final configuration for a specific file.
|
||||
*
|
||||
* It provides one method.
|
||||
*
|
||||
* - `toCompatibleObjectAsConfigFileContent()`
|
||||
* Convert this configuration to the compatible object as the content of
|
||||
* config files. It converts the loaded parser and plugins to strings.
|
||||
* `CLIEngine#getConfigForFile(filePath)` method uses this method.
|
||||
*
|
||||
* `ConfigArray#extractConfig(filePath)` creates a `ExtractedConfig` instance.
|
||||
*
|
||||
* @author Toru Nagashima <https://github.com/mysticatea>
|
||||
*/
|
||||
|
||||
import { IgnorePattern } from "./ignore-pattern.js";
|
||||
|
||||
// For VSCode intellisense
|
||||
/** @typedef {import("../../shared/types").ConfigData} ConfigData */
|
||||
/** @typedef {import("../../shared/types").GlobalConf} GlobalConf */
|
||||
/** @typedef {import("../../shared/types").SeverityConf} SeverityConf */
|
||||
/** @typedef {import("./config-dependency").DependentParser} DependentParser */
|
||||
/** @typedef {import("./config-dependency").DependentPlugin} DependentPlugin */
|
||||
|
||||
/**
|
||||
* Check if `xs` starts with `ys`.
|
||||
* @template T
|
||||
* @param {T[]} xs The array to check.
|
||||
* @param {T[]} ys The array that may be the first part of `xs`.
|
||||
* @returns {boolean} `true` if `xs` starts with `ys`.
|
||||
*/
|
||||
function startsWith(xs, ys) {
|
||||
return xs.length >= ys.length && ys.every((y, i) => y === xs[i]);
|
||||
}
|
||||
|
||||
/**
|
||||
* The class for extracted config data.
|
||||
*/
|
||||
class ExtractedConfig {
|
||||
constructor() {
|
||||
|
||||
/**
|
||||
* The config name what `noInlineConfig` setting came from.
|
||||
* @type {string}
|
||||
*/
|
||||
this.configNameOfNoInlineConfig = "";
|
||||
|
||||
/**
|
||||
* Environments.
|
||||
* @type {Record<string, boolean>}
|
||||
*/
|
||||
this.env = {};
|
||||
|
||||
/**
|
||||
* Global variables.
|
||||
* @type {Record<string, GlobalConf>}
|
||||
*/
|
||||
this.globals = {};
|
||||
|
||||
/**
|
||||
* The glob patterns that ignore to lint.
|
||||
* @type {(((filePath:string, dot?:boolean) => boolean) & { basePath:string; patterns:string[] }) | undefined}
|
||||
*/
|
||||
this.ignores = void 0;
|
||||
|
||||
/**
|
||||
* The flag that disables directive comments.
|
||||
* @type {boolean|undefined}
|
||||
*/
|
||||
this.noInlineConfig = void 0;
|
||||
|
||||
/**
|
||||
* Parser definition.
|
||||
* @type {DependentParser|null}
|
||||
*/
|
||||
this.parser = null;
|
||||
|
||||
/**
|
||||
* Options for the parser.
|
||||
* @type {Object}
|
||||
*/
|
||||
this.parserOptions = {};
|
||||
|
||||
/**
|
||||
* Plugin definitions.
|
||||
* @type {Record<string, DependentPlugin>}
|
||||
*/
|
||||
this.plugins = {};
|
||||
|
||||
/**
|
||||
* Processor ID.
|
||||
* @type {string|null}
|
||||
*/
|
||||
this.processor = null;
|
||||
|
||||
/**
|
||||
* The flag that reports unused `eslint-disable` directive comments.
|
||||
* @type {boolean|undefined}
|
||||
*/
|
||||
this.reportUnusedDisableDirectives = void 0;
|
||||
|
||||
/**
|
||||
* Rule settings.
|
||||
* @type {Record<string, [SeverityConf, ...any[]]>}
|
||||
*/
|
||||
this.rules = {};
|
||||
|
||||
/**
|
||||
* Shared settings.
|
||||
* @type {Object}
|
||||
*/
|
||||
this.settings = {};
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert this config to the compatible object as a config file content.
|
||||
* @returns {ConfigData} The converted object.
|
||||
*/
|
||||
toCompatibleObjectAsConfigFileContent() {
|
||||
const {
|
||||
/* eslint-disable no-unused-vars */
|
||||
configNameOfNoInlineConfig: _ignore1,
|
||||
processor: _ignore2,
|
||||
/* eslint-enable no-unused-vars */
|
||||
ignores,
|
||||
...config
|
||||
} = this;
|
||||
|
||||
config.parser = config.parser && config.parser.filePath;
|
||||
config.plugins = Object.keys(config.plugins).filter(Boolean).reverse();
|
||||
config.ignorePatterns = ignores ? ignores.patterns : [];
|
||||
|
||||
// Strip the default patterns from `ignorePatterns`.
|
||||
if (startsWith(config.ignorePatterns, IgnorePattern.DefaultPatterns)) {
|
||||
config.ignorePatterns =
|
||||
config.ignorePatterns.slice(IgnorePattern.DefaultPatterns.length);
|
||||
}
|
||||
|
||||
return config;
|
||||
}
|
||||
}
|
||||
|
||||
export { ExtractedConfig };
|
||||
238
syntax/vscode/node_modules/@eslint/eslintrc/lib/config-array/ignore-pattern.js
generated
vendored
238
syntax/vscode/node_modules/@eslint/eslintrc/lib/config-array/ignore-pattern.js
generated
vendored
|
|
@ -1,238 +0,0 @@
|
|||
/**
|
||||
* @fileoverview `IgnorePattern` class.
|
||||
*
|
||||
* `IgnorePattern` class has the set of glob patterns and the base path.
|
||||
*
|
||||
* It provides two static methods.
|
||||
*
|
||||
* - `IgnorePattern.createDefaultIgnore(cwd)`
|
||||
* Create the default predicate function.
|
||||
* - `IgnorePattern.createIgnore(ignorePatterns)`
|
||||
* Create the predicate function from multiple `IgnorePattern` objects.
|
||||
*
|
||||
* It provides two properties and a method.
|
||||
*
|
||||
* - `patterns`
|
||||
* The glob patterns that ignore to lint.
|
||||
* - `basePath`
|
||||
* The base path of the glob patterns. If absolute paths existed in the
|
||||
* glob patterns, those are handled as relative paths to the base path.
|
||||
* - `getPatternsRelativeTo(basePath)`
|
||||
* Get `patterns` as modified for a given base path. It modifies the
|
||||
* absolute paths in the patterns as prepending the difference of two base
|
||||
* paths.
|
||||
*
|
||||
* `ConfigArrayFactory` creates `IgnorePattern` objects when it processes
|
||||
* `ignorePatterns` properties.
|
||||
*
|
||||
* @author Toru Nagashima <https://github.com/mysticatea>
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Requirements
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
import assert from "assert";
|
||||
import path from "path";
|
||||
import ignore from "ignore";
|
||||
import debugOrig from "debug";
|
||||
|
||||
const debug = debugOrig("eslintrc:ignore-pattern");
|
||||
|
||||
/** @typedef {ReturnType<import("ignore").default>} Ignore */
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Helpers
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Get the path to the common ancestor directory of given paths.
|
||||
* @param {string[]} sourcePaths The paths to calculate the common ancestor.
|
||||
* @returns {string} The path to the common ancestor directory.
|
||||
*/
|
||||
function getCommonAncestorPath(sourcePaths) {
|
||||
let result = sourcePaths[0];
|
||||
|
||||
for (let i = 1; i < sourcePaths.length; ++i) {
|
||||
const a = result;
|
||||
const b = sourcePaths[i];
|
||||
|
||||
// Set the shorter one (it's the common ancestor if one includes the other).
|
||||
result = a.length < b.length ? a : b;
|
||||
|
||||
// Set the common ancestor.
|
||||
for (let j = 0, lastSepPos = 0; j < a.length && j < b.length; ++j) {
|
||||
if (a[j] !== b[j]) {
|
||||
result = a.slice(0, lastSepPos);
|
||||
break;
|
||||
}
|
||||
if (a[j] === path.sep) {
|
||||
lastSepPos = j;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let resolvedResult = result || path.sep;
|
||||
|
||||
// if Windows common ancestor is root of drive must have trailing slash to be absolute.
|
||||
if (resolvedResult && resolvedResult.endsWith(":") && process.platform === "win32") {
|
||||
resolvedResult += path.sep;
|
||||
}
|
||||
return resolvedResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* Make relative path.
|
||||
* @param {string} from The source path to get relative path.
|
||||
* @param {string} to The destination path to get relative path.
|
||||
* @returns {string} The relative path.
|
||||
*/
|
||||
function relative(from, to) {
|
||||
const relPath = path.relative(from, to);
|
||||
|
||||
if (path.sep === "/") {
|
||||
return relPath;
|
||||
}
|
||||
return relPath.split(path.sep).join("/");
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the trailing slash if existed.
|
||||
* @param {string} filePath The path to check.
|
||||
* @returns {string} The trailing slash if existed.
|
||||
*/
|
||||
function dirSuffix(filePath) {
|
||||
const isDir = (
|
||||
filePath.endsWith(path.sep) ||
|
||||
(process.platform === "win32" && filePath.endsWith("/"))
|
||||
);
|
||||
|
||||
return isDir ? "/" : "";
|
||||
}
|
||||
|
||||
const DefaultPatterns = Object.freeze(["/**/node_modules/*"]);
|
||||
const DotPatterns = Object.freeze([".*", "!.eslintrc.*", "!../"]);
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Public
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
class IgnorePattern {
|
||||
|
||||
/**
|
||||
* The default patterns.
|
||||
* @type {string[]}
|
||||
*/
|
||||
static get DefaultPatterns() {
|
||||
return DefaultPatterns;
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the default predicate function.
|
||||
* @param {string} cwd The current working directory.
|
||||
* @returns {((filePath:string, dot:boolean) => boolean) & {basePath:string; patterns:string[]}}
|
||||
* The preficate function.
|
||||
* The first argument is an absolute path that is checked.
|
||||
* The second argument is the flag to not ignore dotfiles.
|
||||
* If the predicate function returned `true`, it means the path should be ignored.
|
||||
*/
|
||||
static createDefaultIgnore(cwd) {
|
||||
return this.createIgnore([new IgnorePattern(DefaultPatterns, cwd)]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the predicate function from multiple `IgnorePattern` objects.
|
||||
* @param {IgnorePattern[]} ignorePatterns The list of ignore patterns.
|
||||
* @returns {((filePath:string, dot?:boolean) => boolean) & {basePath:string; patterns:string[]}}
|
||||
* The preficate function.
|
||||
* The first argument is an absolute path that is checked.
|
||||
* The second argument is the flag to not ignore dotfiles.
|
||||
* If the predicate function returned `true`, it means the path should be ignored.
|
||||
*/
|
||||
static createIgnore(ignorePatterns) {
|
||||
debug("Create with: %o", ignorePatterns);
|
||||
|
||||
const basePath = getCommonAncestorPath(ignorePatterns.map(p => p.basePath));
|
||||
const patterns = [].concat(
|
||||
...ignorePatterns.map(p => p.getPatternsRelativeTo(basePath))
|
||||
);
|
||||
const ig = ignore({ allowRelativePaths: true }).add([...DotPatterns, ...patterns]);
|
||||
const dotIg = ignore({ allowRelativePaths: true }).add(patterns);
|
||||
|
||||
debug(" processed: %o", { basePath, patterns });
|
||||
|
||||
return Object.assign(
|
||||
(filePath, dot = false) => {
|
||||
assert(path.isAbsolute(filePath), "'filePath' should be an absolute path.");
|
||||
const relPathRaw = relative(basePath, filePath);
|
||||
const relPath = relPathRaw && (relPathRaw + dirSuffix(filePath));
|
||||
const adoptedIg = dot ? dotIg : ig;
|
||||
const result = relPath !== "" && adoptedIg.ignores(relPath);
|
||||
|
||||
debug("Check", { filePath, dot, relativePath: relPath, result });
|
||||
return result;
|
||||
},
|
||||
{ basePath, patterns }
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize a new `IgnorePattern` instance.
|
||||
* @param {string[]} patterns The glob patterns that ignore to lint.
|
||||
* @param {string} basePath The base path of `patterns`.
|
||||
*/
|
||||
constructor(patterns, basePath) {
|
||||
assert(path.isAbsolute(basePath), "'basePath' should be an absolute path.");
|
||||
|
||||
/**
|
||||
* The glob patterns that ignore to lint.
|
||||
* @type {string[]}
|
||||
*/
|
||||
this.patterns = patterns;
|
||||
|
||||
/**
|
||||
* The base path of `patterns`.
|
||||
* @type {string}
|
||||
*/
|
||||
this.basePath = basePath;
|
||||
|
||||
/**
|
||||
* If `true` then patterns which don't start with `/` will match the paths to the outside of `basePath`. Defaults to `false`.
|
||||
*
|
||||
* It's set `true` for `.eslintignore`, `package.json`, and `--ignore-path` for backward compatibility.
|
||||
* It's `false` as-is for `ignorePatterns` property in config files.
|
||||
* @type {boolean}
|
||||
*/
|
||||
this.loose = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get `patterns` as modified for a given base path. It modifies the
|
||||
* absolute paths in the patterns as prepending the difference of two base
|
||||
* paths.
|
||||
* @param {string} newBasePath The base path.
|
||||
* @returns {string[]} Modifired patterns.
|
||||
*/
|
||||
getPatternsRelativeTo(newBasePath) {
|
||||
assert(path.isAbsolute(newBasePath), "'newBasePath' should be an absolute path.");
|
||||
const { basePath, loose, patterns } = this;
|
||||
|
||||
if (newBasePath === basePath) {
|
||||
return patterns;
|
||||
}
|
||||
const prefix = `/${relative(newBasePath, basePath)}`;
|
||||
|
||||
return patterns.map(pattern => {
|
||||
const negative = pattern.startsWith("!");
|
||||
const head = negative ? "!" : "";
|
||||
const body = negative ? pattern.slice(1) : pattern;
|
||||
|
||||
if (body.startsWith("/") || body.startsWith("../")) {
|
||||
return `${head}${prefix}${body}`;
|
||||
}
|
||||
return loose ? pattern : `${head}${prefix}/**/${body}`;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export { IgnorePattern };
|
||||
19
syntax/vscode/node_modules/@eslint/eslintrc/lib/config-array/index.js
generated
vendored
19
syntax/vscode/node_modules/@eslint/eslintrc/lib/config-array/index.js
generated
vendored
|
|
@ -1,19 +0,0 @@
|
|||
/**
|
||||
* @fileoverview `ConfigArray` class.
|
||||
* @author Toru Nagashima <https://github.com/mysticatea>
|
||||
*/
|
||||
|
||||
import { ConfigArray, getUsedExtractedConfigs } from "./config-array.js";
|
||||
import { ConfigDependency } from "./config-dependency.js";
|
||||
import { ExtractedConfig } from "./extracted-config.js";
|
||||
import { IgnorePattern } from "./ignore-pattern.js";
|
||||
import { OverrideTester } from "./override-tester.js";
|
||||
|
||||
export {
|
||||
ConfigArray,
|
||||
ConfigDependency,
|
||||
ExtractedConfig,
|
||||
IgnorePattern,
|
||||
OverrideTester,
|
||||
getUsedExtractedConfigs
|
||||
};
|
||||
225
syntax/vscode/node_modules/@eslint/eslintrc/lib/config-array/override-tester.js
generated
vendored
225
syntax/vscode/node_modules/@eslint/eslintrc/lib/config-array/override-tester.js
generated
vendored
|
|
@ -1,225 +0,0 @@
|
|||
/**
|
||||
* @fileoverview `OverrideTester` class.
|
||||
*
|
||||
* `OverrideTester` class handles `files` property and `excludedFiles` property
|
||||
* of `overrides` config.
|
||||
*
|
||||
* It provides one method.
|
||||
*
|
||||
* - `test(filePath)`
|
||||
* Test if a file path matches the pair of `files` property and
|
||||
* `excludedFiles` property. The `filePath` argument must be an absolute
|
||||
* path.
|
||||
*
|
||||
* `ConfigArrayFactory` creates `OverrideTester` objects when it processes
|
||||
* `overrides` properties.
|
||||
*
|
||||
* @author Toru Nagashima <https://github.com/mysticatea>
|
||||
*/
|
||||
|
||||
import assert from "assert";
|
||||
import path from "path";
|
||||
import util from "util";
|
||||
import minimatch from "minimatch";
|
||||
|
||||
const { Minimatch } = minimatch;
|
||||
|
||||
const minimatchOpts = { dot: true, matchBase: true };
|
||||
|
||||
/**
|
||||
* @typedef {Object} Pattern
|
||||
* @property {InstanceType<Minimatch>[] | null} includes The positive matchers.
|
||||
* @property {InstanceType<Minimatch>[] | null} excludes The negative matchers.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Normalize a given pattern to an array.
|
||||
* @param {string|string[]|undefined} patterns A glob pattern or an array of glob patterns.
|
||||
* @returns {string[]|null} Normalized patterns.
|
||||
* @private
|
||||
*/
|
||||
function normalizePatterns(patterns) {
|
||||
if (Array.isArray(patterns)) {
|
||||
return patterns.filter(Boolean);
|
||||
}
|
||||
if (typeof patterns === "string" && patterns) {
|
||||
return [patterns];
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the matchers of given patterns.
|
||||
* @param {string[]} patterns The patterns.
|
||||
* @returns {InstanceType<Minimatch>[] | null} The matchers.
|
||||
*/
|
||||
function toMatcher(patterns) {
|
||||
if (patterns.length === 0) {
|
||||
return null;
|
||||
}
|
||||
return patterns.map(pattern => {
|
||||
if (/^\.[/\\]/u.test(pattern)) {
|
||||
return new Minimatch(
|
||||
pattern.slice(2),
|
||||
|
||||
// `./*.js` should not match with `subdir/foo.js`
|
||||
{ ...minimatchOpts, matchBase: false }
|
||||
);
|
||||
}
|
||||
return new Minimatch(pattern, minimatchOpts);
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert a given matcher to string.
|
||||
* @param {Pattern} matchers The matchers.
|
||||
* @returns {string} The string expression of the matcher.
|
||||
*/
|
||||
function patternToJson({ includes, excludes }) {
|
||||
return {
|
||||
includes: includes && includes.map(m => m.pattern),
|
||||
excludes: excludes && excludes.map(m => m.pattern)
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* The class to test given paths are matched by the patterns.
|
||||
*/
|
||||
class OverrideTester {
|
||||
|
||||
/**
|
||||
* Create a tester with given criteria.
|
||||
* If there are no criteria, returns `null`.
|
||||
* @param {string|string[]} files The glob patterns for included files.
|
||||
* @param {string|string[]} excludedFiles The glob patterns for excluded files.
|
||||
* @param {string} basePath The path to the base directory to test paths.
|
||||
* @returns {OverrideTester|null} The created instance or `null`.
|
||||
*/
|
||||
static create(files, excludedFiles, basePath) {
|
||||
const includePatterns = normalizePatterns(files);
|
||||
const excludePatterns = normalizePatterns(excludedFiles);
|
||||
let endsWithWildcard = false;
|
||||
|
||||
if (includePatterns.length === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Rejects absolute paths or relative paths to parents.
|
||||
for (const pattern of includePatterns) {
|
||||
if (path.isAbsolute(pattern) || pattern.includes("..")) {
|
||||
throw new Error(`Invalid override pattern (expected relative path not containing '..'): ${pattern}`);
|
||||
}
|
||||
if (pattern.endsWith("*")) {
|
||||
endsWithWildcard = true;
|
||||
}
|
||||
}
|
||||
for (const pattern of excludePatterns) {
|
||||
if (path.isAbsolute(pattern) || pattern.includes("..")) {
|
||||
throw new Error(`Invalid override pattern (expected relative path not containing '..'): ${pattern}`);
|
||||
}
|
||||
}
|
||||
|
||||
const includes = toMatcher(includePatterns);
|
||||
const excludes = toMatcher(excludePatterns);
|
||||
|
||||
return new OverrideTester(
|
||||
[{ includes, excludes }],
|
||||
basePath,
|
||||
endsWithWildcard
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Combine two testers by logical and.
|
||||
* If either of the testers was `null`, returns the other tester.
|
||||
* The `basePath` property of the two must be the same value.
|
||||
* @param {OverrideTester|null} a A tester.
|
||||
* @param {OverrideTester|null} b Another tester.
|
||||
* @returns {OverrideTester|null} Combined tester.
|
||||
*/
|
||||
static and(a, b) {
|
||||
if (!b) {
|
||||
return a && new OverrideTester(
|
||||
a.patterns,
|
||||
a.basePath,
|
||||
a.endsWithWildcard
|
||||
);
|
||||
}
|
||||
if (!a) {
|
||||
return new OverrideTester(
|
||||
b.patterns,
|
||||
b.basePath,
|
||||
b.endsWithWildcard
|
||||
);
|
||||
}
|
||||
|
||||
assert.strictEqual(a.basePath, b.basePath);
|
||||
return new OverrideTester(
|
||||
a.patterns.concat(b.patterns),
|
||||
a.basePath,
|
||||
a.endsWithWildcard || b.endsWithWildcard
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize this instance.
|
||||
* @param {Pattern[]} patterns The matchers.
|
||||
* @param {string} basePath The base path.
|
||||
* @param {boolean} endsWithWildcard If `true` then a pattern ends with `*`.
|
||||
*/
|
||||
constructor(patterns, basePath, endsWithWildcard = false) {
|
||||
|
||||
/** @type {Pattern[]} */
|
||||
this.patterns = patterns;
|
||||
|
||||
/** @type {string} */
|
||||
this.basePath = basePath;
|
||||
|
||||
/** @type {boolean} */
|
||||
this.endsWithWildcard = endsWithWildcard;
|
||||
}
|
||||
|
||||
/**
|
||||
* Test if a given path is matched or not.
|
||||
* @param {string} filePath The absolute path to the target file.
|
||||
* @returns {boolean} `true` if the path was matched.
|
||||
*/
|
||||
test(filePath) {
|
||||
if (typeof filePath !== "string" || !path.isAbsolute(filePath)) {
|
||||
throw new Error(`'filePath' should be an absolute path, but got ${filePath}.`);
|
||||
}
|
||||
const relativePath = path.relative(this.basePath, filePath);
|
||||
|
||||
return this.patterns.every(({ includes, excludes }) => (
|
||||
(!includes || includes.some(m => m.match(relativePath))) &&
|
||||
(!excludes || !excludes.some(m => m.match(relativePath)))
|
||||
));
|
||||
}
|
||||
|
||||
// eslint-disable-next-line jsdoc/require-description
|
||||
/**
|
||||
* @returns {Object} a JSON compatible object.
|
||||
*/
|
||||
toJSON() {
|
||||
if (this.patterns.length === 1) {
|
||||
return {
|
||||
...patternToJson(this.patterns[0]),
|
||||
basePath: this.basePath
|
||||
};
|
||||
}
|
||||
return {
|
||||
AND: this.patterns.map(patternToJson),
|
||||
basePath: this.basePath
|
||||
};
|
||||
}
|
||||
|
||||
// eslint-disable-next-line jsdoc/require-description
|
||||
/**
|
||||
* @returns {Object} an object to display by `console.log()`.
|
||||
*/
|
||||
[util.inspect.custom]() {
|
||||
return this.toJSON();
|
||||
}
|
||||
}
|
||||
|
||||
export { OverrideTester };
|
||||
318
syntax/vscode/node_modules/@eslint/eslintrc/lib/flat-compat.js
generated
vendored
318
syntax/vscode/node_modules/@eslint/eslintrc/lib/flat-compat.js
generated
vendored
|
|
@ -1,318 +0,0 @@
|
|||
/**
|
||||
* @fileoverview Compatibility class for flat config.
|
||||
* @author Nicholas C. Zakas
|
||||
*/
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Requirements
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
import createDebug from "debug";
|
||||
import path from "path";
|
||||
|
||||
import environments from "../conf/environments.js";
|
||||
import { ConfigArrayFactory } from "./config-array-factory.js";
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Helpers
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
/** @typedef {import("../../shared/types").Environment} Environment */
|
||||
/** @typedef {import("../../shared/types").Processor} Processor */
|
||||
|
||||
const debug = createDebug("eslintrc:flat-compat");
|
||||
const cafactory = Symbol("cafactory");
|
||||
|
||||
/**
|
||||
* Translates an ESLintRC-style config object into a flag-config-style config
|
||||
* object.
|
||||
* @param {Object} eslintrcConfig An ESLintRC-style config object.
|
||||
* @param {Object} options Options to help translate the config.
|
||||
* @param {string} options.resolveConfigRelativeTo To the directory to resolve
|
||||
* configs from.
|
||||
* @param {string} options.resolvePluginsRelativeTo The directory to resolve
|
||||
* plugins from.
|
||||
* @param {ReadOnlyMap<string,Environment>} options.pluginEnvironments A map of plugin environment
|
||||
* names to objects.
|
||||
* @param {ReadOnlyMap<string,Processor>} options.pluginProcessors A map of plugin processor
|
||||
* names to objects.
|
||||
* @returns {Object} A flag-config-style config object.
|
||||
*/
|
||||
function translateESLintRC(eslintrcConfig, {
|
||||
resolveConfigRelativeTo,
|
||||
resolvePluginsRelativeTo,
|
||||
pluginEnvironments,
|
||||
pluginProcessors
|
||||
}) {
|
||||
|
||||
const flatConfig = {};
|
||||
const configs = [];
|
||||
const languageOptions = {};
|
||||
const linterOptions = {};
|
||||
const keysToCopy = ["settings", "rules", "processor"];
|
||||
const languageOptionsKeysToCopy = ["globals", "parser", "parserOptions"];
|
||||
const linterOptionsKeysToCopy = ["noInlineConfig", "reportUnusedDisableDirectives"];
|
||||
|
||||
// copy over simple translations
|
||||
for (const key of keysToCopy) {
|
||||
if (key in eslintrcConfig && typeof eslintrcConfig[key] !== "undefined") {
|
||||
flatConfig[key] = eslintrcConfig[key];
|
||||
}
|
||||
}
|
||||
|
||||
// copy over languageOptions
|
||||
for (const key of languageOptionsKeysToCopy) {
|
||||
if (key in eslintrcConfig && typeof eslintrcConfig[key] !== "undefined") {
|
||||
|
||||
// create the languageOptions key in the flat config
|
||||
flatConfig.languageOptions = languageOptions;
|
||||
|
||||
if (key === "parser") {
|
||||
debug(`Resolving parser '${languageOptions[key]}' relative to ${resolveConfigRelativeTo}`);
|
||||
|
||||
if (eslintrcConfig[key].error) {
|
||||
throw eslintrcConfig[key].error;
|
||||
}
|
||||
|
||||
languageOptions[key] = eslintrcConfig[key].definition;
|
||||
continue;
|
||||
}
|
||||
|
||||
// clone any object values that are in the eslintrc config
|
||||
if (eslintrcConfig[key] && typeof eslintrcConfig[key] === "object") {
|
||||
languageOptions[key] = {
|
||||
...eslintrcConfig[key]
|
||||
};
|
||||
} else {
|
||||
languageOptions[key] = eslintrcConfig[key];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// copy over linterOptions
|
||||
for (const key of linterOptionsKeysToCopy) {
|
||||
if (key in eslintrcConfig && typeof eslintrcConfig[key] !== "undefined") {
|
||||
flatConfig.linterOptions = linterOptions;
|
||||
linterOptions[key] = eslintrcConfig[key];
|
||||
}
|
||||
}
|
||||
|
||||
// move ecmaVersion a level up
|
||||
if (languageOptions.parserOptions) {
|
||||
|
||||
if ("ecmaVersion" in languageOptions.parserOptions) {
|
||||
languageOptions.ecmaVersion = languageOptions.parserOptions.ecmaVersion;
|
||||
delete languageOptions.parserOptions.ecmaVersion;
|
||||
}
|
||||
|
||||
if ("sourceType" in languageOptions.parserOptions) {
|
||||
languageOptions.sourceType = languageOptions.parserOptions.sourceType;
|
||||
delete languageOptions.parserOptions.sourceType;
|
||||
}
|
||||
|
||||
// check to see if we even need parserOptions anymore and remove it if not
|
||||
if (Object.keys(languageOptions.parserOptions).length === 0) {
|
||||
delete languageOptions.parserOptions;
|
||||
}
|
||||
}
|
||||
|
||||
// overrides
|
||||
if (eslintrcConfig.criteria) {
|
||||
flatConfig.files = [absoluteFilePath => eslintrcConfig.criteria.test(absoluteFilePath)];
|
||||
}
|
||||
|
||||
// translate plugins
|
||||
if (eslintrcConfig.plugins && typeof eslintrcConfig.plugins === "object") {
|
||||
debug(`Translating plugins: ${eslintrcConfig.plugins}`);
|
||||
|
||||
flatConfig.plugins = {};
|
||||
|
||||
for (const pluginName of Object.keys(eslintrcConfig.plugins)) {
|
||||
|
||||
debug(`Translating plugin: ${pluginName}`);
|
||||
debug(`Resolving plugin '${pluginName} relative to ${resolvePluginsRelativeTo}`);
|
||||
|
||||
const { original: plugin, error } = eslintrcConfig.plugins[pluginName];
|
||||
|
||||
if (error) {
|
||||
throw error;
|
||||
}
|
||||
|
||||
flatConfig.plugins[pluginName] = plugin;
|
||||
|
||||
// create a config for any processors
|
||||
if (plugin.processors) {
|
||||
for (const processorName of Object.keys(plugin.processors)) {
|
||||
if (processorName.startsWith(".")) {
|
||||
debug(`Assigning processor: ${pluginName}/${processorName}`);
|
||||
|
||||
configs.unshift({
|
||||
files: [`**/*${processorName}`],
|
||||
processor: pluginProcessors.get(`${pluginName}/${processorName}`)
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// translate env - must come after plugins
|
||||
if (eslintrcConfig.env && typeof eslintrcConfig.env === "object") {
|
||||
for (const envName of Object.keys(eslintrcConfig.env)) {
|
||||
|
||||
// only add environments that are true
|
||||
if (eslintrcConfig.env[envName]) {
|
||||
debug(`Translating environment: ${envName}`);
|
||||
|
||||
if (environments.has(envName)) {
|
||||
|
||||
// built-in environments should be defined first
|
||||
configs.unshift(...translateESLintRC({
|
||||
criteria: eslintrcConfig.criteria,
|
||||
...environments.get(envName)
|
||||
}, {
|
||||
resolveConfigRelativeTo,
|
||||
resolvePluginsRelativeTo
|
||||
}));
|
||||
} else if (pluginEnvironments.has(envName)) {
|
||||
|
||||
// if the environment comes from a plugin, it should come after the plugin config
|
||||
configs.push(...translateESLintRC({
|
||||
criteria: eslintrcConfig.criteria,
|
||||
...pluginEnvironments.get(envName)
|
||||
}, {
|
||||
resolveConfigRelativeTo,
|
||||
resolvePluginsRelativeTo
|
||||
}));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// only add if there are actually keys in the config
|
||||
if (Object.keys(flatConfig).length > 0) {
|
||||
configs.push(flatConfig);
|
||||
}
|
||||
|
||||
return configs;
|
||||
}
|
||||
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Exports
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* A compatibility class for working with configs.
|
||||
*/
|
||||
class FlatCompat {
|
||||
|
||||
constructor({
|
||||
baseDirectory = process.cwd(),
|
||||
resolvePluginsRelativeTo = baseDirectory,
|
||||
recommendedConfig,
|
||||
allConfig
|
||||
} = {}) {
|
||||
this.baseDirectory = baseDirectory;
|
||||
this.resolvePluginsRelativeTo = resolvePluginsRelativeTo;
|
||||
this[cafactory] = new ConfigArrayFactory({
|
||||
cwd: baseDirectory,
|
||||
resolvePluginsRelativeTo,
|
||||
getEslintAllConfig: () => {
|
||||
|
||||
if (!allConfig) {
|
||||
throw new TypeError("Missing parameter 'allConfig' in FlatCompat constructor.");
|
||||
}
|
||||
|
||||
return allConfig;
|
||||
},
|
||||
getEslintRecommendedConfig: () => {
|
||||
|
||||
if (!recommendedConfig) {
|
||||
throw new TypeError("Missing parameter 'recommendedConfig' in FlatCompat constructor.");
|
||||
}
|
||||
|
||||
return recommendedConfig;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Translates an ESLintRC-style config into a flag-config-style config.
|
||||
* @param {Object} eslintrcConfig The ESLintRC-style config object.
|
||||
* @returns {Object} A flag-config-style config object.
|
||||
*/
|
||||
config(eslintrcConfig) {
|
||||
const eslintrcArray = this[cafactory].create(eslintrcConfig, {
|
||||
basePath: this.baseDirectory
|
||||
});
|
||||
|
||||
const flatArray = [];
|
||||
let hasIgnorePatterns = false;
|
||||
|
||||
eslintrcArray.forEach(configData => {
|
||||
if (configData.type === "config") {
|
||||
hasIgnorePatterns = hasIgnorePatterns || configData.ignorePattern;
|
||||
flatArray.push(...translateESLintRC(configData, {
|
||||
resolveConfigRelativeTo: path.join(this.baseDirectory, "__placeholder.js"),
|
||||
resolvePluginsRelativeTo: path.join(this.resolvePluginsRelativeTo, "__placeholder.js"),
|
||||
pluginEnvironments: eslintrcArray.pluginEnvironments,
|
||||
pluginProcessors: eslintrcArray.pluginProcessors
|
||||
}));
|
||||
}
|
||||
});
|
||||
|
||||
// combine ignorePatterns to emulate ESLintRC behavior better
|
||||
if (hasIgnorePatterns) {
|
||||
flatArray.unshift({
|
||||
ignores: [filePath => {
|
||||
|
||||
// Compute the final config for this file.
|
||||
// This filters config array elements by `files`/`excludedFiles` then merges the elements.
|
||||
const finalConfig = eslintrcArray.extractConfig(filePath);
|
||||
|
||||
// Test the `ignorePattern` properties of the final config.
|
||||
return Boolean(finalConfig.ignores) && finalConfig.ignores(filePath);
|
||||
}]
|
||||
});
|
||||
}
|
||||
|
||||
return flatArray;
|
||||
}
|
||||
|
||||
/**
|
||||
* Translates the `env` section of an ESLintRC-style config.
|
||||
* @param {Object} envConfig The `env` section of an ESLintRC config.
|
||||
* @returns {Object[]} An array of flag-config objects representing the environments.
|
||||
*/
|
||||
env(envConfig) {
|
||||
return this.config({
|
||||
env: envConfig
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Translates the `extends` section of an ESLintRC-style config.
|
||||
* @param {...string} configsToExtend The names of the configs to load.
|
||||
* @returns {Object[]} An array of flag-config objects representing the config.
|
||||
*/
|
||||
extends(...configsToExtend) {
|
||||
return this.config({
|
||||
extends: configsToExtend
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Translates the `plugins` section of an ESLintRC-style config.
|
||||
* @param {...string} plugins The names of the plugins to load.
|
||||
* @returns {Object[]} An array of flag-config objects representing the plugins.
|
||||
*/
|
||||
plugins(...plugins) {
|
||||
return this.config({
|
||||
plugins
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
export { FlatCompat };
|
||||
29
syntax/vscode/node_modules/@eslint/eslintrc/lib/index-universal.js
generated
vendored
29
syntax/vscode/node_modules/@eslint/eslintrc/lib/index-universal.js
generated
vendored
|
|
@ -1,29 +0,0 @@
|
|||
/**
|
||||
* @fileoverview Package exports for @eslint/eslintrc
|
||||
* @author Nicholas C. Zakas
|
||||
*/
|
||||
//------------------------------------------------------------------------------
|
||||
// Requirements
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
import * as ConfigOps from "./shared/config-ops.js";
|
||||
import ConfigValidator from "./shared/config-validator.js";
|
||||
import * as naming from "./shared/naming.js";
|
||||
import environments from "../conf/environments.js";
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Exports
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
const Legacy = {
|
||||
environments,
|
||||
|
||||
// shared
|
||||
ConfigOps,
|
||||
ConfigValidator,
|
||||
naming
|
||||
};
|
||||
|
||||
export {
|
||||
Legacy
|
||||
};
|
||||
56
syntax/vscode/node_modules/@eslint/eslintrc/lib/index.js
generated
vendored
56
syntax/vscode/node_modules/@eslint/eslintrc/lib/index.js
generated
vendored
|
|
@ -1,56 +0,0 @@
|
|||
/**
|
||||
* @fileoverview Package exports for @eslint/eslintrc
|
||||
* @author Nicholas C. Zakas
|
||||
*/
|
||||
//------------------------------------------------------------------------------
|
||||
// Requirements
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
import {
|
||||
ConfigArrayFactory,
|
||||
createContext as createConfigArrayFactoryContext
|
||||
} from "./config-array-factory.js";
|
||||
|
||||
import { CascadingConfigArrayFactory } from "./cascading-config-array-factory.js";
|
||||
import * as ModuleResolver from "./shared/relative-module-resolver.js";
|
||||
import { ConfigArray, getUsedExtractedConfigs } from "./config-array/index.js";
|
||||
import { ConfigDependency } from "./config-array/config-dependency.js";
|
||||
import { ExtractedConfig } from "./config-array/extracted-config.js";
|
||||
import { IgnorePattern } from "./config-array/ignore-pattern.js";
|
||||
import { OverrideTester } from "./config-array/override-tester.js";
|
||||
import * as ConfigOps from "./shared/config-ops.js";
|
||||
import ConfigValidator from "./shared/config-validator.js";
|
||||
import * as naming from "./shared/naming.js";
|
||||
import { FlatCompat } from "./flat-compat.js";
|
||||
import environments from "../conf/environments.js";
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Exports
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
const Legacy = {
|
||||
ConfigArray,
|
||||
createConfigArrayFactoryContext,
|
||||
CascadingConfigArrayFactory,
|
||||
ConfigArrayFactory,
|
||||
ConfigDependency,
|
||||
ExtractedConfig,
|
||||
IgnorePattern,
|
||||
OverrideTester,
|
||||
getUsedExtractedConfigs,
|
||||
environments,
|
||||
|
||||
// shared
|
||||
ConfigOps,
|
||||
ConfigValidator,
|
||||
ModuleResolver,
|
||||
naming
|
||||
};
|
||||
|
||||
export {
|
||||
|
||||
Legacy,
|
||||
|
||||
FlatCompat
|
||||
|
||||
};
|
||||
191
syntax/vscode/node_modules/@eslint/eslintrc/lib/shared/ajv.js
generated
vendored
191
syntax/vscode/node_modules/@eslint/eslintrc/lib/shared/ajv.js
generated
vendored
|
|
@ -1,191 +0,0 @@
|
|||
/**
|
||||
* @fileoverview The instance of Ajv validator.
|
||||
* @author Evgeny Poberezkin
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Requirements
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
import Ajv from "ajv";
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Helpers
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
/*
|
||||
* Copied from ajv/lib/refs/json-schema-draft-04.json
|
||||
* The MIT License (MIT)
|
||||
* Copyright (c) 2015-2017 Evgeny Poberezkin
|
||||
*/
|
||||
const metaSchema = {
|
||||
id: "http://json-schema.org/draft-04/schema#",
|
||||
$schema: "http://json-schema.org/draft-04/schema#",
|
||||
description: "Core schema meta-schema",
|
||||
definitions: {
|
||||
schemaArray: {
|
||||
type: "array",
|
||||
minItems: 1,
|
||||
items: { $ref: "#" }
|
||||
},
|
||||
positiveInteger: {
|
||||
type: "integer",
|
||||
minimum: 0
|
||||
},
|
||||
positiveIntegerDefault0: {
|
||||
allOf: [{ $ref: "#/definitions/positiveInteger" }, { default: 0 }]
|
||||
},
|
||||
simpleTypes: {
|
||||
enum: ["array", "boolean", "integer", "null", "number", "object", "string"]
|
||||
},
|
||||
stringArray: {
|
||||
type: "array",
|
||||
items: { type: "string" },
|
||||
minItems: 1,
|
||||
uniqueItems: true
|
||||
}
|
||||
},
|
||||
type: "object",
|
||||
properties: {
|
||||
id: {
|
||||
type: "string"
|
||||
},
|
||||
$schema: {
|
||||
type: "string"
|
||||
},
|
||||
title: {
|
||||
type: "string"
|
||||
},
|
||||
description: {
|
||||
type: "string"
|
||||
},
|
||||
default: { },
|
||||
multipleOf: {
|
||||
type: "number",
|
||||
minimum: 0,
|
||||
exclusiveMinimum: true
|
||||
},
|
||||
maximum: {
|
||||
type: "number"
|
||||
},
|
||||
exclusiveMaximum: {
|
||||
type: "boolean",
|
||||
default: false
|
||||
},
|
||||
minimum: {
|
||||
type: "number"
|
||||
},
|
||||
exclusiveMinimum: {
|
||||
type: "boolean",
|
||||
default: false
|
||||
},
|
||||
maxLength: { $ref: "#/definitions/positiveInteger" },
|
||||
minLength: { $ref: "#/definitions/positiveIntegerDefault0" },
|
||||
pattern: {
|
||||
type: "string",
|
||||
format: "regex"
|
||||
},
|
||||
additionalItems: {
|
||||
anyOf: [
|
||||
{ type: "boolean" },
|
||||
{ $ref: "#" }
|
||||
],
|
||||
default: { }
|
||||
},
|
||||
items: {
|
||||
anyOf: [
|
||||
{ $ref: "#" },
|
||||
{ $ref: "#/definitions/schemaArray" }
|
||||
],
|
||||
default: { }
|
||||
},
|
||||
maxItems: { $ref: "#/definitions/positiveInteger" },
|
||||
minItems: { $ref: "#/definitions/positiveIntegerDefault0" },
|
||||
uniqueItems: {
|
||||
type: "boolean",
|
||||
default: false
|
||||
},
|
||||
maxProperties: { $ref: "#/definitions/positiveInteger" },
|
||||
minProperties: { $ref: "#/definitions/positiveIntegerDefault0" },
|
||||
required: { $ref: "#/definitions/stringArray" },
|
||||
additionalProperties: {
|
||||
anyOf: [
|
||||
{ type: "boolean" },
|
||||
{ $ref: "#" }
|
||||
],
|
||||
default: { }
|
||||
},
|
||||
definitions: {
|
||||
type: "object",
|
||||
additionalProperties: { $ref: "#" },
|
||||
default: { }
|
||||
},
|
||||
properties: {
|
||||
type: "object",
|
||||
additionalProperties: { $ref: "#" },
|
||||
default: { }
|
||||
},
|
||||
patternProperties: {
|
||||
type: "object",
|
||||
additionalProperties: { $ref: "#" },
|
||||
default: { }
|
||||
},
|
||||
dependencies: {
|
||||
type: "object",
|
||||
additionalProperties: {
|
||||
anyOf: [
|
||||
{ $ref: "#" },
|
||||
{ $ref: "#/definitions/stringArray" }
|
||||
]
|
||||
}
|
||||
},
|
||||
enum: {
|
||||
type: "array",
|
||||
minItems: 1,
|
||||
uniqueItems: true
|
||||
},
|
||||
type: {
|
||||
anyOf: [
|
||||
{ $ref: "#/definitions/simpleTypes" },
|
||||
{
|
||||
type: "array",
|
||||
items: { $ref: "#/definitions/simpleTypes" },
|
||||
minItems: 1,
|
||||
uniqueItems: true
|
||||
}
|
||||
]
|
||||
},
|
||||
format: { type: "string" },
|
||||
allOf: { $ref: "#/definitions/schemaArray" },
|
||||
anyOf: { $ref: "#/definitions/schemaArray" },
|
||||
oneOf: { $ref: "#/definitions/schemaArray" },
|
||||
not: { $ref: "#" }
|
||||
},
|
||||
dependencies: {
|
||||
exclusiveMaximum: ["maximum"],
|
||||
exclusiveMinimum: ["minimum"]
|
||||
},
|
||||
default: { }
|
||||
};
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Public Interface
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
export default (additionalOptions = {}) => {
|
||||
const ajv = new Ajv({
|
||||
meta: false,
|
||||
useDefaults: true,
|
||||
validateSchema: false,
|
||||
missingRefs: "ignore",
|
||||
verbose: true,
|
||||
schemaId: "auto",
|
||||
...additionalOptions
|
||||
});
|
||||
|
||||
ajv.addMetaSchema(metaSchema);
|
||||
// eslint-disable-next-line no-underscore-dangle
|
||||
ajv._opts.defaultMeta = metaSchema.id;
|
||||
|
||||
return ajv;
|
||||
};
|
||||
135
syntax/vscode/node_modules/@eslint/eslintrc/lib/shared/config-ops.js
generated
vendored
135
syntax/vscode/node_modules/@eslint/eslintrc/lib/shared/config-ops.js
generated
vendored
|
|
@ -1,135 +0,0 @@
|
|||
/**
|
||||
* @fileoverview Config file operations. This file must be usable in the browser,
|
||||
* so no Node-specific code can be here.
|
||||
* @author Nicholas C. Zakas
|
||||
*/
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Private
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
const RULE_SEVERITY_STRINGS = ["off", "warn", "error"],
|
||||
RULE_SEVERITY = RULE_SEVERITY_STRINGS.reduce((map, value, index) => {
|
||||
map[value] = index;
|
||||
return map;
|
||||
}, {}),
|
||||
VALID_SEVERITIES = [0, 1, 2, "off", "warn", "error"];
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// Public Interface
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
/**
|
||||
* Normalizes the severity value of a rule's configuration to a number
|
||||
* @param {(number|string|[number, ...*]|[string, ...*])} ruleConfig A rule's configuration value, generally
|
||||
* received from the user. A valid config value is either 0, 1, 2, the string "off" (treated the same as 0),
|
||||
* the string "warn" (treated the same as 1), the string "error" (treated the same as 2), or an array
|
||||
* whose first element is one of the above values. Strings are matched case-insensitively.
|
||||
* @returns {(0|1|2)} The numeric severity value if the config value was valid, otherwise 0.
|
||||
*/
|
||||
function getRuleSeverity(ruleConfig) {
|
||||
const severityValue = Array.isArray(ruleConfig) ? ruleConfig[0] : ruleConfig;
|
||||
|
||||
if (severityValue === 0 || severityValue === 1 || severityValue === 2) {
|
||||
return severityValue;
|
||||
}
|
||||
|
||||
if (typeof severityValue === "string") {
|
||||
return RULE_SEVERITY[severityValue.toLowerCase()] || 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts old-style severity settings (0, 1, 2) into new-style
|
||||
* severity settings (off, warn, error) for all rules. Assumption is that severity
|
||||
* values have already been validated as correct.
|
||||
* @param {Object} config The config object to normalize.
|
||||
* @returns {void}
|
||||
*/
|
||||
function normalizeToStrings(config) {
|
||||
|
||||
if (config.rules) {
|
||||
Object.keys(config.rules).forEach(ruleId => {
|
||||
const ruleConfig = config.rules[ruleId];
|
||||
|
||||
if (typeof ruleConfig === "number") {
|
||||
config.rules[ruleId] = RULE_SEVERITY_STRINGS[ruleConfig] || RULE_SEVERITY_STRINGS[0];
|
||||
} else if (Array.isArray(ruleConfig) && typeof ruleConfig[0] === "number") {
|
||||
ruleConfig[0] = RULE_SEVERITY_STRINGS[ruleConfig[0]] || RULE_SEVERITY_STRINGS[0];
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Determines if the severity for the given rule configuration represents an error.
|
||||
* @param {int|string|Array} ruleConfig The configuration for an individual rule.
|
||||
* @returns {boolean} True if the rule represents an error, false if not.
|
||||
*/
|
||||
function isErrorSeverity(ruleConfig) {
|
||||
return getRuleSeverity(ruleConfig) === 2;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether a given config has valid severity or not.
|
||||
* @param {number|string|Array} ruleConfig The configuration for an individual rule.
|
||||
* @returns {boolean} `true` if the configuration has valid severity.
|
||||
*/
|
||||
function isValidSeverity(ruleConfig) {
|
||||
let severity = Array.isArray(ruleConfig) ? ruleConfig[0] : ruleConfig;
|
||||
|
||||
if (typeof severity === "string") {
|
||||
severity = severity.toLowerCase();
|
||||
}
|
||||
return VALID_SEVERITIES.indexOf(severity) !== -1;
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks whether every rule of a given config has valid severity or not.
|
||||
* @param {Object} config The configuration for rules.
|
||||
* @returns {boolean} `true` if the configuration has valid severity.
|
||||
*/
|
||||
function isEverySeverityValid(config) {
|
||||
return Object.keys(config).every(ruleId => isValidSeverity(config[ruleId]));
|
||||
}
|
||||
|
||||
/**
|
||||
* Normalizes a value for a global in a config | ||||