mirror of
https://github.com/github/codeql-action.git
synced 2026-08-05 13:02:04 -05:00
Compare commits
75 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 14567d9b12 | |||
| 5edc73a9a0 | |||
| ea47b2ae40 | |||
| 38adb40e7a | |||
| e7e35baaf0 | |||
| a6b0ced86b | |||
| 6a17359b95 | |||
| 245422d4c0 | |||
| c7b7456c9e | |||
| cf445f7cf3 | |||
| 2f8540dd31 | |||
| bc068d74aa | |||
| bcfe48982e | |||
| 79690d4663 | |||
| 5691205077 | |||
| d9d3212c79 | |||
| 81ae676e79 | |||
| c8b21b59d1 | |||
| 7c2bd355f3 | |||
| 868eec5e6d | |||
| 0ba4244466 | |||
| a9a416c8f4 | |||
| 10c6bfee12 | |||
| 67e62e7b01 | |||
| feea86eed3 | |||
| 2e6f8c08c1 | |||
| 8342844ea7 | |||
| 679aac1b20 | |||
| de6681ceb7 | |||
| f6fe5c5c70 | |||
| 62762170e1 | |||
| e4ccfbd189 | |||
| eaa61762f4 | |||
| 6ca1aa8c19 | |||
| 84a55d4e11 | |||
| 055b396ea2 | |||
| 98d57a1337 | |||
| 1ba3eaa7d3 | |||
| 233b9834e6 | |||
| 9cbfcfde24 | |||
| 7a8ccc55bf | |||
| ac0d76444a | |||
| 500b1fac79 | |||
| d89d3764f8 | |||
| 654518ea06 | |||
| 1a480074ee | |||
| 8ab72a0f47 | |||
| 658a20c06e | |||
| 818b10d9bb | |||
| 126f9c6282 | |||
| cfd7e3df84 | |||
| c974f40fee | |||
| d34eb386d4 | |||
| c57b27e4b7 | |||
| d1d5f4de97 | |||
| badeebcb1a | |||
| b16296be30 | |||
| eff6331393 | |||
| 601c5ba56e | |||
| 57a11be8e4 | |||
| 7197f58bbf | |||
| 3007c1e340 | |||
| 4a2e8975cd | |||
| 47952bf4c2 | |||
| 5bbe7a2b8c | |||
| 9fc0c931c7 | |||
| fdedc91de2 | |||
| 2eb34f2fb9 | |||
| a3ef0b984b | |||
| 65a297b952 | |||
| 0f871fa80d | |||
| c84418936e | |||
| e94e15d8dd | |||
| 21c926745f | |||
| 76b2afaa4a |
@@ -0,0 +1,3 @@
|
||||
# .git-blame-ignore-revs
|
||||
# Added trailing commas to adhere to new eslint rules
|
||||
b16296be30e150034524d6dd0b0418fc6b184267
|
||||
@@ -23,15 +23,27 @@ runs:
|
||||
shell: bash
|
||||
run: |
|
||||
set -e # Fail this Action if `gh release list` fails.
|
||||
|
||||
if [[ "$RUNNER_OS" == "Linux" ]]; then
|
||||
artifact_name="codeql-bundle-linux64.tar.gz"
|
||||
elif [[ "$RUNNER_OS" == "macOS" ]]; then
|
||||
artifact_name="codeql-bundle-osx64.tar.gz"
|
||||
elif [[ "$RUNNER_OS" == "Windows" ]]; then
|
||||
artifact_name="codeql-bundle-win64.tar.gz"
|
||||
else
|
||||
echo "::error::Unrecognized OS $RUNNER_OS"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ ${{ inputs.version }} == "nightly-latest" ]]; then
|
||||
export LATEST=`gh release list --repo dsp-testing/codeql-cli-nightlies -L 1 | cut -f 3`
|
||||
echo "tools-url=https://github.com/dsp-testing/codeql-cli-nightlies/releases/download/$LATEST/codeql-bundle.tar.gz" >> $GITHUB_OUTPUT
|
||||
tag=`gh release list --repo dsp-testing/codeql-cli-nightlies -L 1 | cut -f 3`
|
||||
echo "tools-url=https://github.com/dsp-testing/codeql-cli-nightlies/releases/download/$tag/$artifact_name" >> $GITHUB_OUTPUT
|
||||
elif [[ ${{ inputs.version }} == *"nightly"* ]]; then
|
||||
export VERSION=`echo ${{ inputs.version }} | sed -e 's/^.*\-//'`
|
||||
echo "tools-url=https://github.com/dsp-testing/codeql-cli-nightlies/releases/download/codeql-bundle-$VERSION-manual/codeql-bundle.tar.gz" >> $GITHUB_OUTPUT
|
||||
version=`echo ${{ inputs.version }} | sed -e 's/^.*\-//'`
|
||||
echo "tools-url=https://github.com/dsp-testing/codeql-cli-nightlies/releases/download/codeql-bundle-$version-manual/$artifact_name" >> $GITHUB_OUTPUT
|
||||
elif [[ ${{ inputs.version }} == *"stable"* ]]; then
|
||||
export VERSION=`echo ${{ inputs.version }} | sed -e 's/^.*\-//'`
|
||||
echo "tools-url=https://github.com/github/codeql-action/releases/download/codeql-bundle-$VERSION/codeql-bundle.tar.gz" >> $GITHUB_OUTPUT
|
||||
version=`echo ${{ inputs.version }} | sed -e 's/^.*\-//'`
|
||||
echo "tools-url=https://github.com/github/codeql-action/releases/download/codeql-bundle-$version/$artifact_name" >> $GITHUB_OUTPUT
|
||||
elif [[ ${{ inputs.version }} == "latest" ]]; then
|
||||
echo "tools-url=latest" >> $GITHUB_OUTPUT
|
||||
elif [[ ${{ inputs.version }} == "cached" ]]; then
|
||||
|
||||
@@ -11,9 +11,6 @@ updates:
|
||||
# There is a type incompatibility issue between v0.0.9 and our other dependencies.
|
||||
- dependency-name: "@octokit/plugin-retry"
|
||||
versions: ["~6.0.0"]
|
||||
# There is a type incompatibility issue between v0.0.9 and our other dependencies.
|
||||
- dependency-name: "@schemastore/package"
|
||||
versions: ["0.0.9"]
|
||||
# v7 requires ESM
|
||||
- dependency-name: "del"
|
||||
versions: ["^7.0.0"]
|
||||
|
||||
+1
-1
@@ -58,7 +58,7 @@ jobs:
|
||||
- id: init
|
||||
uses: ./../action/init
|
||||
with:
|
||||
tools: ./codeql-bundle.tar.gz
|
||||
tools: ./codeql-bundle-linux64.tar.gz
|
||||
- uses: ./../action/.github/actions/setup-swift
|
||||
with:
|
||||
codeql-path: ${{ steps.init.outputs.codeql-path }}
|
||||
|
||||
@@ -1,80 +1,15 @@
|
||||
name: "CodeQL action"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main, releases/v2]
|
||||
pull_request:
|
||||
branches: [main, releases/v2]
|
||||
# Run checks on reopened draft PRs to support triggering PR checks on draft PRs that were opened
|
||||
# by other workflows.
|
||||
types: [opened, synchronize, reopened, ready_for_review]
|
||||
schedule:
|
||||
# Weekly on Sunday.
|
||||
- cron: '30 1 * * 0'
|
||||
on: push
|
||||
|
||||
env:
|
||||
CODEQL_ACTION_TESTING_ENVIRONMENT: codeql-action-pr-checks
|
||||
|
||||
jobs:
|
||||
# Identify the CodeQL tool versions to use in the analysis job.
|
||||
check-codeql-versions:
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
versions: ${{ steps.compare.outputs.versions }}
|
||||
|
||||
permissions:
|
||||
security-events: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- name: Init with default CodeQL bundle from the VM image
|
||||
id: init-default
|
||||
uses: ./init
|
||||
with:
|
||||
languages: javascript
|
||||
- name: Remove empty database
|
||||
# allows us to run init a second time
|
||||
run: |
|
||||
rm -rf "$RUNNER_TEMP/codeql_databases"
|
||||
- name: Init with latest CodeQL bundle
|
||||
id: init-latest
|
||||
uses: ./init
|
||||
with:
|
||||
tools: latest
|
||||
languages: javascript
|
||||
- name: Compare default and latest CodeQL bundle versions
|
||||
id: compare
|
||||
env:
|
||||
CODEQL_DEFAULT: ${{ steps.init-default.outputs.codeql-path }}
|
||||
CODEQL_LATEST: ${{ steps.init-latest.outputs.codeql-path }}
|
||||
run: |
|
||||
CODEQL_VERSION_DEFAULT="$("$CODEQL_DEFAULT" version --format terse)"
|
||||
CODEQL_VERSION_LATEST="$("$CODEQL_LATEST" version --format terse)"
|
||||
echo "Default CodeQL bundle version is $CODEQL_VERSION_DEFAULT"
|
||||
echo "Latest CodeQL bundle version is $CODEQL_VERSION_LATEST"
|
||||
|
||||
# If we're running on a pull request, run with both bundles, even if `tools: latest` would
|
||||
# be the same as `tools: null`. This allows us to make the job for each of the bundles a
|
||||
# required status check.
|
||||
#
|
||||
# If we're running on push or schedule, then we can skip running with `tools: latest` when it would be
|
||||
# the same as running with `tools: null`.
|
||||
if [[ "$GITHUB_EVENT_NAME" != "pull_request" && "$CODEQL_VERSION_DEFAULT" == "$CODEQL_VERSION_LATEST" ]]; then
|
||||
VERSIONS_JSON='[null]'
|
||||
else
|
||||
VERSIONS_JSON='[null, "latest"]'
|
||||
fi
|
||||
|
||||
# Output a JSON-encoded list with the distinct versions to test against.
|
||||
echo "Suggested matrix config for analysis job: $VERSIONS_JSON"
|
||||
echo "versions=${VERSIONS_JSON}" >> $GITHUB_OUTPUT
|
||||
|
||||
build:
|
||||
needs: [check-codeql-versions]
|
||||
strategy:
|
||||
matrix:
|
||||
os: [ubuntu-latest,windows-latest,macos-latest]
|
||||
tools: ${{ fromJson(needs.check-codeql-versions.outputs.versions) }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
|
||||
permissions:
|
||||
@@ -89,7 +24,7 @@ jobs:
|
||||
with:
|
||||
languages: javascript
|
||||
config-file: ./.github/codeql/codeql-config.yml
|
||||
tools: ${{ matrix.tools }}
|
||||
tools: https://github.com/dsp-testing/codeql-cli-nightlies/releases/download/codeql-bundle-20230801/codeql-bundle-linux64.tar.gz
|
||||
# confirm steps.init.outputs.codeql-path points to the codeql binary
|
||||
- name: Print CodeQL Version
|
||||
run: ${{steps.init.outputs.codeql-path}} version --format=json
|
||||
|
||||
+12
-1
@@ -4,7 +4,18 @@ See the [releases page](https://github.com/github/codeql-action/releases) for th
|
||||
|
||||
## [UNRELEASED]
|
||||
|
||||
No user facing changes.
|
||||
- We are rolling out a feature in August 2023 that will improve multi-threaded performance on larger runners. [#1817](https://github.com/github/codeql-action/pull/1817)
|
||||
- Reduce disk space usage when downloading the CodeQL bundle. [#1820](https://github.com/github/codeql-action/pull/1820)
|
||||
|
||||
## 2.21.2 - 28 Jul 2023
|
||||
|
||||
- Update default CodeQL bundle version to 2.14.1. [#1797](https://github.com/github/codeql-action/pull/1797)
|
||||
- Avoid duplicating the analysis summary within the logs. [#1811](https://github.com/github/codeql-action/pull/1811)
|
||||
|
||||
## 2.21.1 - 26 Jul 2023
|
||||
|
||||
- Improve the handling of fatal errors from the CodeQL CLI. [#1795](https://github.com/github/codeql-action/pull/1795)
|
||||
- Add the `sarif-output` output to the analyze action that contains the path to the directory of the generated SARIF. [#1799](https://github.com/github/codeql-action/pull/1799)
|
||||
|
||||
## 2.21.0 - 19 Jul 2023
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# CodeQL Action
|
||||
|
||||
This action runs GitHub's industry-leading semantic code analysis engine, [CodeQL](https://codeql.github.com/), against a repository's source code to find security vulnerabilities. It then automatically uploads the results to GitHub so they can be displayed in the repository's security tab. CodeQL runs an extensible set of [queries](https://github.com/github/codeql), which have been developed by the community and the [GitHub Security Lab](https://securitylab.github.com/) to find common vulnerabilities in your code.
|
||||
This action runs GitHub's industry-leading semantic code analysis engine, [CodeQL](https://codeql.github.com/), against a repository's source code to find security vulnerabilities. It then automatically uploads the results to GitHub so they can be displayed on pull requests and in the repository's security tab. CodeQL runs an extensible set of [queries](https://github.com/github/codeql), which have been developed by the community and the [GitHub Security Lab](https://securitylab.github.com/) to find common vulnerabilities in your code.
|
||||
|
||||
For a list of recent changes, see the CodeQL Action's [changelog](CHANGELOG.md).
|
||||
|
||||
@@ -12,160 +12,9 @@ The underlying CodeQL CLI, used in this action, is licensed under the [GitHub Co
|
||||
|
||||
## Usage
|
||||
|
||||
This is a short walkthrough, but for more information read [configuring code scanning](https://help.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning).
|
||||
We recommend using default setup to configure CodeQL analysis for your repository. For more information, see "[Configuring default setup for code scanning](https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-default-setup-for-code-scanning)."
|
||||
|
||||
To get code scanning results from CodeQL analysis on your repo you can use the following workflow as a template:
|
||||
|
||||
```yaml
|
||||
|
||||
name: "Code Scanning - Action"
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
pull_request:
|
||||
branches: [main]
|
||||
schedule:
|
||||
# ┌───────────── minute (0 - 59)
|
||||
# │ ┌───────────── hour (0 - 23)
|
||||
# │ │ ┌───────────── day of the month (1 - 31)
|
||||
# │ │ │ ┌───────────── month (1 - 12 or JAN-DEC)
|
||||
# │ │ │ │ ┌───────────── day of the week (0 - 6 or SUN-SAT)
|
||||
# │ │ │ │ │
|
||||
# │ │ │ │ │
|
||||
# │ │ │ │ │
|
||||
# * * * * *
|
||||
- cron: '30 1 * * 0'
|
||||
|
||||
jobs:
|
||||
CodeQL-Build:
|
||||
# CodeQL runs on ubuntu-latest, windows-latest, and macos-latest
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
permissions:
|
||||
# required for all workflows
|
||||
security-events: write
|
||||
|
||||
# only required for workflows in private repositories
|
||||
actions: read
|
||||
contents: read
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v3
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
# Override language selection by uncommenting this and choosing your languages
|
||||
# with:
|
||||
# languages: go, javascript, csharp, python, cpp, java, ruby
|
||||
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below).
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@v2
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||
|
||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following
|
||||
# three lines and modify them (or add more) to build your code if your
|
||||
# project uses a compiled language
|
||||
|
||||
#- run: |
|
||||
# make bootstrap
|
||||
# make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
||||
```
|
||||
|
||||
If you prefer to integrate this within an existing CI workflow, it should end up looking something like this:
|
||||
|
||||
```yaml
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: go, javascript
|
||||
|
||||
# Here is where you build your code
|
||||
- run: |
|
||||
make bootstrap
|
||||
make release
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@v2
|
||||
```
|
||||
|
||||
### Configuration file
|
||||
|
||||
Use the `config-file` parameter of the `init` action to enable the configuration file. The value of `config-file` is the path to the configuration file you want to use. This example loads the configuration file `./.github/codeql/codeql-config.yml`.
|
||||
|
||||
```yaml
|
||||
- uses: github/codeql-action/init@v2
|
||||
with:
|
||||
config-file: ./.github/codeql/codeql-config.yml
|
||||
```
|
||||
|
||||
The configuration file can be located in a different repository. This is useful if you want to share the same configuration across multiple repositories. If the configuration file is in a private repository you can also specify an `external-repository-token` option. This should be a personal access token that has read access to any repositories containing referenced config files and queries.
|
||||
|
||||
```yaml
|
||||
- uses: github/codeql-action/init@v2
|
||||
with:
|
||||
config-file: owner/repo/codeql-config.yml@branch
|
||||
external-repository-token: ${{ secrets.EXTERNAL_REPOSITORY_TOKEN }}
|
||||
```
|
||||
|
||||
For information on how to write a configuration file, see "[Using a custom configuration file](https://help.github.com/en/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#using-a-custom-configuration-file)."
|
||||
|
||||
If you only want to customise the queries used, you can specify them in your workflow instead of creating a config file, using the `queries` property of the `init` action:
|
||||
|
||||
```yaml
|
||||
- uses: github/codeql-action/init@v2
|
||||
with:
|
||||
queries: <local-or-remote-query>,<another-query>
|
||||
```
|
||||
|
||||
By default, this will override any queries specified in a config file. If you wish to use both sets of queries, prefix the list of queries in the workflow with `+`:
|
||||
|
||||
```yaml
|
||||
- uses: github/codeql-action/init@v2
|
||||
with:
|
||||
queries: +<local-or-remote-query>,<another-query>
|
||||
```
|
||||
|
||||
### Configuration via `config` input
|
||||
|
||||
You can alternatively configure CodeQL using the `config` input to the `init` Action. The value of this input must be a YAML string that follows the configuration file format documented at "[Using a custom configuration file](https://aka.ms/code-scanning-docs/config-file)."
|
||||
|
||||
#### Example configuration
|
||||
|
||||
```yaml
|
||||
- uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
config: |
|
||||
disable-default-queries: true
|
||||
queries:
|
||||
- uses: security-extended
|
||||
- uses: security-and-quality
|
||||
query-filters:
|
||||
- include:
|
||||
tags: /cwe-020/
|
||||
```
|
||||
|
||||
|
||||
#### Sharing configuration across multiple repositories
|
||||
|
||||
You can use Actions or environment variables to share configuration across multiple repositories and to modify configuration without needing to edit the workflow file. In the following example, `vars.CODEQL_CONF` is an [Actions configuration variable](https://docs.github.com/en/actions/learn-github-actions/variables#defining-configuration-variables-for-multiple-workflows):
|
||||
|
||||
```yaml
|
||||
- uses: github/codeql-action/init@v2
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
config: ${{ vars.CODEQL_CONF }}
|
||||
```
|
||||
You can also configure advanced setup for a repository to find security vulnerabilities in your code using a highly customizable code scanning configuration. For more information, see "[Configuring advanced setup for code scanning](https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-advanced-setup-for-code-scanning)" and "[Customizing code scanning](https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/customizing-code-scanning)."
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
|
||||
@@ -79,6 +79,8 @@ inputs:
|
||||
outputs:
|
||||
db-locations:
|
||||
description: A map from language to absolute path for each database created by CodeQL.
|
||||
sarif-output:
|
||||
description: Absolute, local path to the directory containing the generated SARIF file.
|
||||
sarif-id:
|
||||
description: The ID of the uploaded SARIF file.
|
||||
runs:
|
||||
|
||||
Generated
+5
-1
@@ -39,7 +39,11 @@ const pkg = require("../package.json");
|
||||
* This allows us to get stronger type checking of required/optional inputs.
|
||||
*/
|
||||
const getRequiredInput = function (name) {
|
||||
return core.getInput(name, { required: true });
|
||||
const value = core.getInput(name);
|
||||
if (!value) {
|
||||
throw new util_1.UserError(`Input required and not supplied: ${name}`);
|
||||
}
|
||||
return value;
|
||||
};
|
||||
exports.getRequiredInput = getRequiredInput;
|
||||
/**
|
||||
|
||||
File diff suppressed because one or more lines are too long
Generated
+1
@@ -176,6 +176,7 @@ async function run() {
|
||||
dbLocations[language] = util.getCodeQLDatabasePath(config, language);
|
||||
}
|
||||
core.setOutput("db-locations", dbLocations);
|
||||
core.setOutput("sarif-output", path_1.default.resolve(outputDir));
|
||||
const uploadInput = actionsUtil.getOptionalInput("upload");
|
||||
if (runStats && actionsUtil.getUploadValue(uploadInput) === "always") {
|
||||
uploadResult = await uploadLib.uploadFromActions(outputDir, actionsUtil.getRequiredInput("checkout_path"), actionsUtil.getOptionalInput("category"), logger);
|
||||
|
||||
File diff suppressed because one or more lines are too long
Generated
+5
-3
@@ -232,7 +232,9 @@ async function runQueries(sarifFolder, memoryFlag, addSnippetsFlag, threadsFlag,
|
||||
}
|
||||
statusReport["event_reports"].push(perQueryAlertCountEventReport);
|
||||
}
|
||||
await runPrintLinesOfCode(language);
|
||||
if (!(await features.getValue(feature_flags_1.Feature.NewAnalysisSummaryEnabled, codeql))) {
|
||||
await runPrintLinesOfCode(language);
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
logger.info(String(e));
|
||||
@@ -283,7 +285,7 @@ async function runQueries(sarifFolder, memoryFlag, addSnippetsFlag, threadsFlag,
|
||||
fs.writeFileSync(querySuitePath, querySuiteContents);
|
||||
logger.debug(`Query suite file for ${language}-${type}...\n${querySuiteContents}`);
|
||||
}
|
||||
await codeql.databaseRunQueries(databasePath, searchPath, querySuitePath, queryFlags, optimizeForLastQueryRun);
|
||||
await codeql.databaseRunQueries(databasePath, searchPath, querySuitePath, queryFlags, optimizeForLastQueryRun, features);
|
||||
logger.debug(`BQRS results produced for ${language} (queries: ${type})"`);
|
||||
return querySuitePath;
|
||||
}
|
||||
@@ -297,7 +299,7 @@ async function runQueries(sarifFolder, memoryFlag, addSnippetsFlag, threadsFlag,
|
||||
const querySuitePath = `${databasePath}-queries-${type}.qls`;
|
||||
fs.writeFileSync(querySuitePath, yaml.dump(querySuite));
|
||||
logger.debug(`BQRS results produced for ${language} (queries: ${type})"`);
|
||||
await codeql.databaseRunQueries(databasePath, undefined, querySuitePath, queryFlags, optimizeForLastQueryRun);
|
||||
await codeql.databaseRunQueries(databasePath, undefined, querySuitePath, queryFlags, optimizeForLastQueryRun, features);
|
||||
return querySuitePath;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
Generated
+124
-16
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
||||
return result;
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.getGeneratedCodeScanningConfigPath = exports.getTrapCachingExtractorConfigArgsForLang = exports.getTrapCachingExtractorConfigArgs = exports.getExtraOptions = exports.getCodeQLForCmd = exports.getCodeQLForTesting = exports.getCachedCodeQL = exports.setCodeQL = exports.getCodeQL = exports.setupCodeQL = exports.CODEQL_VERSION_RESOLVE_ENVIRONMENT = exports.CODEQL_VERSION_INIT_WITH_QLCONFIG = exports.CODEQL_VERSION_EXPORT_CODE_SCANNING_CONFIG = exports.CODEQL_VERSION_SECURITY_EXPERIMENTAL_SUITE = exports.CODEQL_VERSION_BETTER_RESOLVE_LANGUAGES = exports.CODEQL_VERSION_GHES_PACK_DOWNLOAD = exports.CommandInvocationError = void 0;
|
||||
exports.getGeneratedCodeScanningConfigPath = exports.getTrapCachingExtractorConfigArgsForLang = exports.getTrapCachingExtractorConfigArgs = exports.getExtraOptions = exports.getCodeQLForCmd = exports.getCodeQLForTesting = exports.getCachedCodeQL = exports.setCodeQL = exports.getCodeQL = exports.setupCodeQL = exports.CODEQL_VERSION_RESOLVE_ENVIRONMENT = exports.CODEQL_VERSION_BETTER_NO_CODE_ERROR_MESSAGE = exports.CODEQL_VERSION_INIT_WITH_QLCONFIG = exports.CODEQL_VERSION_EXPORT_CODE_SCANNING_CONFIG = exports.CODEQL_VERSION_SECURITY_EXPERIMENTAL_SUITE = exports.CODEQL_VERSION_BETTER_RESOLVE_LANGUAGES = exports.CODEQL_VERSION_GHES_PACK_DOWNLOAD = exports.CommandInvocationError = void 0;
|
||||
const fs = __importStar(require("fs"));
|
||||
const path = __importStar(require("path"));
|
||||
const core = __importStar(require("@actions/core"));
|
||||
@@ -31,18 +31,20 @@ const toolrunner = __importStar(require("@actions/exec/lib/toolrunner"));
|
||||
const yaml = __importStar(require("js-yaml"));
|
||||
const actions_util_1 = require("./actions-util");
|
||||
const environment_1 = require("./environment");
|
||||
const error_matcher_1 = require("./error-matcher");
|
||||
const feature_flags_1 = require("./feature-flags");
|
||||
const languages_1 = require("./languages");
|
||||
const setupCodeql = __importStar(require("./setup-codeql"));
|
||||
const toolrunner_error_catcher_1 = require("./toolrunner-error-catcher");
|
||||
const util = __importStar(require("./util"));
|
||||
const util_1 = require("./util");
|
||||
class CommandInvocationError extends Error {
|
||||
constructor(cmd, args, exitCode, error, output) {
|
||||
super(`Failure invoking ${cmd} with arguments ${args}.\n
|
||||
Exit code ${exitCode} and error was:\n
|
||||
${error}`);
|
||||
const prettyCommand = [cmd, ...args]
|
||||
.map((x) => (x.includes(" ") ? `'${x}'` : x))
|
||||
.join(" ");
|
||||
super(`Encountered a fatal error while running "${prettyCommand}". ` +
|
||||
`Exit code was ${exitCode} and error was: ${error.trim()}`);
|
||||
this.exitCode = exitCode;
|
||||
this.error = error;
|
||||
this.output = output;
|
||||
}
|
||||
}
|
||||
@@ -93,6 +95,11 @@ exports.CODEQL_VERSION_EXPORT_CODE_SCANNING_CONFIG = "2.12.3";
|
||||
* Versions 2.12.4+ of the CodeQL CLI support the `--qlconfig-file` flag in calls to `database init`.
|
||||
*/
|
||||
exports.CODEQL_VERSION_INIT_WITH_QLCONFIG = "2.12.4";
|
||||
/**
|
||||
* Versions 2.12.4+ of the CodeQL CLI provide a better error message when `database finalize`
|
||||
* determines that no code has been found.
|
||||
*/
|
||||
exports.CODEQL_VERSION_BETTER_NO_CODE_ERROR_MESSAGE = "2.12.4";
|
||||
/**
|
||||
* Versions 2.13.4+ of the CodeQL CLI support the `resolve build-environment` command.
|
||||
*/
|
||||
@@ -311,7 +318,7 @@ async function getCodeQLForCmd(cmd, checkVersion) {
|
||||
const ext = process.platform === "win32" ? ".cmd" : ".sh";
|
||||
const traceCommand = path.resolve(await this.resolveExtractor(language), "tools", `autobuild${ext}`);
|
||||
// Run trace command
|
||||
await (0, toolrunner_error_catcher_1.toolrunnerErrorCatcher)(cmd, [
|
||||
await runTool(cmd, [
|
||||
"database",
|
||||
"trace-command",
|
||||
...(await getTrapCachingExtractorConfigArgsForLang(config, language)),
|
||||
@@ -319,7 +326,7 @@ async function getCodeQLForCmd(cmd, checkVersion) {
|
||||
databasePath,
|
||||
"--",
|
||||
traceCommand,
|
||||
], error_matcher_1.errorMatchers);
|
||||
]);
|
||||
},
|
||||
async finalizeDatabase(databasePath, threadsFlag, memoryFlag) {
|
||||
const args = [
|
||||
@@ -331,7 +338,18 @@ async function getCodeQLForCmd(cmd, checkVersion) {
|
||||
...getExtraOptionsFromEnv(["database", "finalize"]),
|
||||
databasePath,
|
||||
];
|
||||
await (0, toolrunner_error_catcher_1.toolrunnerErrorCatcher)(cmd, args, error_matcher_1.errorMatchers);
|
||||
try {
|
||||
await runTool(cmd, args);
|
||||
}
|
||||
catch (e) {
|
||||
if (e instanceof CommandInvocationError &&
|
||||
!(await util.codeQlVersionAbove(this, exports.CODEQL_VERSION_BETTER_NO_CODE_ERROR_MESSAGE)) &&
|
||||
isNoCodeFoundError(e)) {
|
||||
throw new util.UserError("No code found during the build. Please see: " +
|
||||
"https://gh.io/troubleshooting-code-scanning/no-source-code-seen-during-build");
|
||||
}
|
||||
throw e;
|
||||
}
|
||||
},
|
||||
async resolveLanguages() {
|
||||
const codeqlArgs = [
|
||||
@@ -401,7 +419,7 @@ async function getCodeQLForCmd(cmd, checkVersion) {
|
||||
throw new Error(`Unexpected output from codeql resolve build-environment: ${e} in\n${output}`);
|
||||
}
|
||||
},
|
||||
async databaseRunQueries(databasePath, extraSearchPath, querySuitePath, flags, optimizeForLastQueryRun) {
|
||||
async databaseRunQueries(databasePath, extraSearchPath, querySuitePath, flags, optimizeForLastQueryRun, features) {
|
||||
const codeqlArgs = [
|
||||
"database",
|
||||
"run-queries",
|
||||
@@ -421,7 +439,13 @@ async function getCodeQLForCmd(cmd, checkVersion) {
|
||||
if (querySuitePath) {
|
||||
codeqlArgs.push(querySuitePath);
|
||||
}
|
||||
await (0, toolrunner_error_catcher_1.toolrunnerErrorCatcher)(cmd, codeqlArgs, error_matcher_1.errorMatchers);
|
||||
if (await features.getValue(feature_flags_1.Feature.EvaluatorIntraLayerParallelismEnabled, this)) {
|
||||
codeqlArgs.push("--intra-layer-parallelism");
|
||||
}
|
||||
else if (await util.codeQlVersionAbove(this, feature_flags_1.CODEQL_VERSION_INTRA_LAYER_PARALLELISM)) {
|
||||
codeqlArgs.push("--no-intra-layer-parallelism");
|
||||
}
|
||||
await runTool(cmd, codeqlArgs);
|
||||
},
|
||||
async databaseInterpretResults(databasePath, querySuitePaths, sarifFile, addSnippetsFlag, threadsFlag, verbosityFlag, automationDetailsId, config, features, logger) {
|
||||
const shouldExportDiagnostics = await features.getValue(feature_flags_1.Feature.ExportDiagnosticsEnabled, this);
|
||||
@@ -467,12 +491,15 @@ async function getCodeQLForCmd(cmd, checkVersion) {
|
||||
if (querySuitePaths) {
|
||||
codeqlArgs.push(...querySuitePaths);
|
||||
}
|
||||
// capture stdout, which contains analysis summaries
|
||||
const returnState = await (0, toolrunner_error_catcher_1.toolrunnerErrorCatcher)(cmd, codeqlArgs, error_matcher_1.errorMatchers);
|
||||
// Capture the stdout, which contains the analysis summary. Don't stream it to the Actions
|
||||
// logs to avoid printing it twice.
|
||||
const analysisSummary = await runTool(cmd, codeqlArgs, {
|
||||
noStreamStdout: true,
|
||||
});
|
||||
if (shouldWorkaroundInvalidNotifications) {
|
||||
util.fixInvalidNotificationsInFile(codeqlOutputFile, sarifFile, logger);
|
||||
}
|
||||
return returnState.stdout;
|
||||
return analysisSummary;
|
||||
},
|
||||
async databasePrintBaseline(databasePath) {
|
||||
const codeqlArgs = [
|
||||
@@ -700,9 +727,13 @@ async function runTool(cmd, args = [], opts = {}) {
|
||||
let output = "";
|
||||
let error = "";
|
||||
const exitCode = await new toolrunner.ToolRunner(cmd, args, {
|
||||
ignoreReturnCode: true,
|
||||
listeners: {
|
||||
stdout: (data) => {
|
||||
output += data.toString("utf8");
|
||||
if (!opts.noStreamStdout) {
|
||||
process.stdout.write(data);
|
||||
}
|
||||
},
|
||||
stderr: (data) => {
|
||||
let readStartIndex = 0;
|
||||
@@ -712,15 +743,80 @@ async function runTool(cmd, args = [], opts = {}) {
|
||||
readStartIndex = data.length - maxErrorSize + 1;
|
||||
}
|
||||
error += data.toString("utf8", readStartIndex);
|
||||
// Mimic the standard behavior of the toolrunner by writing stderr to stdout
|
||||
process.stdout.write(data);
|
||||
},
|
||||
},
|
||||
ignoreReturnCode: true,
|
||||
silent: true,
|
||||
...(opts.stdin ? { input: Buffer.from(opts.stdin || "") } : {}),
|
||||
}).exec();
|
||||
if (exitCode !== 0)
|
||||
if (exitCode !== 0) {
|
||||
error = extractFatalErrors(error) || error;
|
||||
throw new CommandInvocationError(cmd, args, exitCode, error, output);
|
||||
}
|
||||
return output;
|
||||
}
|
||||
/**
|
||||
* Provide a better error message from the stderr of a CLI invocation that failed with a fatal
|
||||
* error.
|
||||
*
|
||||
* - If the CLI invocation failed with a fatal error, this returns that fatal error, followed by
|
||||
* any fatal errors that occurred in plumbing commands.
|
||||
* - If the CLI invocation did not fail with a fatal error, this returns `undefined`.
|
||||
*
|
||||
* ### Example
|
||||
*
|
||||
* ```
|
||||
* Running TRAP import for CodeQL database at /home/runner/work/_temp/codeql_databases/javascript...
|
||||
* A fatal error occurred: Evaluator heap must be at least 384.00 MiB
|
||||
* A fatal error occurred: Dataset import for
|
||||
* /home/runner/work/_temp/codeql_databases/javascript/db-javascript failed with code 2
|
||||
* ```
|
||||
*
|
||||
* becomes
|
||||
*
|
||||
* ```
|
||||
* Encountered a fatal error while running "codeql-for-testing database finalize --finalize-dataset
|
||||
* --threads=2 --ram=2048 db". Exit code was 32 and error was: A fatal error occurred: Dataset
|
||||
* import for /home/runner/work/_temp/codeql_databases/javascript/db-javascript failed with code 2.
|
||||
* Context: A fatal error occurred: Evaluator heap must be at least 384.00 MiB.
|
||||
* ```
|
||||
*
|
||||
* Where possible, this tries to summarize the error into a single line, as this displays better in
|
||||
* the Actions UI.
|
||||
*/
|
||||
function extractFatalErrors(error) {
|
||||
const fatalErrorRegex = /.*fatal error occurred:/gi;
|
||||
let fatalErrors = [];
|
||||
let lastFatalErrorIndex;
|
||||
let match;
|
||||
while ((match = fatalErrorRegex.exec(error)) !== null) {
|
||||
if (lastFatalErrorIndex !== undefined) {
|
||||
fatalErrors.push(error.slice(lastFatalErrorIndex, match.index).trim());
|
||||
}
|
||||
lastFatalErrorIndex = match.index;
|
||||
}
|
||||
if (lastFatalErrorIndex !== undefined) {
|
||||
const lastError = error.slice(lastFatalErrorIndex).trim();
|
||||
if (fatalErrors.length === 0) {
|
||||
// No other errors
|
||||
return lastError;
|
||||
}
|
||||
const isOneLiner = !fatalErrors.some((e) => e.includes("\n"));
|
||||
if (isOneLiner) {
|
||||
fatalErrors = fatalErrors.map(ensureEndsInPeriod);
|
||||
}
|
||||
return [
|
||||
ensureEndsInPeriod(lastError),
|
||||
"Context:",
|
||||
...fatalErrors.reverse(),
|
||||
].join(isOneLiner ? " " : "\n");
|
||||
}
|
||||
return undefined;
|
||||
}
|
||||
function ensureEndsInPeriod(text) {
|
||||
return text[text.length - 1] === "." ? text : `${text}.`;
|
||||
}
|
||||
/**
|
||||
* If appropriate, generates a code scanning configuration that is to be used for a scan.
|
||||
* If the configuration is not to be generated, returns undefined.
|
||||
@@ -841,4 +937,16 @@ function getGeneratedCodeScanningConfigPath(config) {
|
||||
return path.resolve(config.tempDir, "user-config.yaml");
|
||||
}
|
||||
exports.getGeneratedCodeScanningConfigPath = getGeneratedCodeScanningConfigPath;
|
||||
function isNoCodeFoundError(e) {
|
||||
/**
|
||||
* Earlier versions of the JavaScript extractor (pre-CodeQL 2.12.0) extract externs even if no
|
||||
* source code was found. This means that we don't get the no code found error from
|
||||
* `codeql database finalize`. To ensure users get a good error message, we detect this manually
|
||||
* here, and upon detection override the error message.
|
||||
*
|
||||
* This can be removed once support for CodeQL 2.11.6 is removed.
|
||||
*/
|
||||
const javascriptNoCodeFoundWarning = "No JavaScript or TypeScript code found.";
|
||||
return e.exitCode === 32 || e.error.includes(javascriptNoCodeFoundWarning);
|
||||
}
|
||||
//# sourceMappingURL=codeql.js.map
|
||||
+1
-1
File diff suppressed because one or more lines are too long
Generated
+65
-3
@@ -704,11 +704,73 @@ for (const { featureEnabled, codeqlVersion, flagPassed, negativeFlagPassed, } of
|
||||
t.is(runnerConstructorStub.firstCall.args[1].includes("--no-new-analysis-summary"), negativeFlagPassed, `--no-new-analysis-summary should${negativeFlagPassed ? "" : "n't"} be passed`);
|
||||
});
|
||||
}
|
||||
function stubToolRunnerConstructor() {
|
||||
(0, ava_1.default)("database finalize recognises JavaScript no code found error on CodeQL 2.11.6", async (t) => {
|
||||
stubToolRunnerConstructor(1, `2020-09-07T17:39:53.9050522Z [2020-09-07 17:39:53] [build] Done extracting /opt/hostedtoolcache/CodeQL/0.0.0-20200630/x64/codeql/javascript/tools/data/externs/web/ie_vml.js (3 ms)
|
||||
2020-09-07T17:39:53.9051849Z [2020-09-07 17:39:53] [build-err] No JavaScript or TypeScript code found.
|
||||
2020-09-07T17:39:53.9052444Z [2020-09-07 17:39:53] [build-err] No JavaScript or TypeScript code found.
|
||||
2020-09-07T17:39:53.9251124Z [2020-09-07 17:39:53] [ERROR] Spawned process exited abnormally (code 255; tried to run: [/opt/hostedtoolcache/CodeQL/0.0.0-20200630/x64/codeql/javascript/tools/autobuild.sh])`);
|
||||
const codeqlObject = await codeql.getCodeQLForTesting();
|
||||
sinon.stub(codeqlObject, "getVersion").resolves("2.11.6");
|
||||
// safeWhich throws because of the test CodeQL object.
|
||||
sinon.stub(safeWhich, "safeWhich").resolves("");
|
||||
await t.throwsAsync(async () => await codeqlObject.finalizeDatabase("", "", ""), {
|
||||
message: "No code found during the build. Please see: " +
|
||||
"https://gh.io/troubleshooting-code-scanning/no-source-code-seen-during-build",
|
||||
});
|
||||
});
|
||||
(0, ava_1.default)("database finalize overrides no code found error on CodeQL 2.11.6", async (t) => {
|
||||
stubToolRunnerConstructor(32);
|
||||
const codeqlObject = await codeql.getCodeQLForTesting();
|
||||
sinon.stub(codeqlObject, "getVersion").resolves("2.11.6");
|
||||
// safeWhich throws because of the test CodeQL object.
|
||||
sinon.stub(safeWhich, "safeWhich").resolves("");
|
||||
await t.throwsAsync(async () => await codeqlObject.finalizeDatabase("", "", ""), {
|
||||
message: "No code found during the build. Please see: " +
|
||||
"https://gh.io/troubleshooting-code-scanning/no-source-code-seen-during-build",
|
||||
});
|
||||
});
|
||||
(0, ava_1.default)("database finalize does not override no code found error on CodeQL 2.12.4", async (t) => {
|
||||
const cliMessage = "CodeQL did not detect any code written in languages supported by CodeQL. Review our troubleshooting guide at " +
|
||||
"https://gh.io/troubleshooting-code-scanning/no-source-code-seen-during-build.";
|
||||
stubToolRunnerConstructor(32, cliMessage);
|
||||
const codeqlObject = await codeql.getCodeQLForTesting();
|
||||
sinon.stub(codeqlObject, "getVersion").resolves("2.12.4");
|
||||
// safeWhich throws because of the test CodeQL object.
|
||||
sinon.stub(safeWhich, "safeWhich").resolves("");
|
||||
await t.throwsAsync(async () => await codeqlObject.finalizeDatabase("db", "--threads=2", "--ram=2048"), {
|
||||
message: 'Encountered a fatal error while running "codeql-for-testing database finalize --finalize-dataset --threads=2 --ram=2048 db". ' +
|
||||
`Exit code was 32 and error was: ${cliMessage}`,
|
||||
});
|
||||
});
|
||||
(0, ava_1.default)("runTool summarizes several fatal errors", async (t) => {
|
||||
const heapError = "A fatal error occurred: Evaluator heap must be at least 384.00 MiB";
|
||||
const datasetImportError = "A fatal error occurred: Dataset import for /home/runner/work/_temp/codeql_databases/javascript/db-javascript failed with code 2";
|
||||
const cliStderr = `Running TRAP import for CodeQL database at /home/runner/work/_temp/codeql_databases/javascript...\n` +
|
||||
`${heapError}\n${datasetImportError}.`;
|
||||
stubToolRunnerConstructor(32, cliStderr);
|
||||
const codeqlObject = await codeql.getCodeQLForTesting();
|
||||
sinon.stub(codeqlObject, "getVersion").resolves("2.12.4");
|
||||
// safeWhich throws because of the test CodeQL object.
|
||||
sinon.stub(safeWhich, "safeWhich").resolves("");
|
||||
await t.throwsAsync(async () => await codeqlObject.finalizeDatabase("db", "--threads=2", "--ram=2048"), {
|
||||
message: 'Encountered a fatal error while running "codeql-for-testing database finalize --finalize-dataset --threads=2 --ram=2048 db". ' +
|
||||
`Exit code was 32 and error was: ${datasetImportError}. Context: ${heapError}.`,
|
||||
});
|
||||
});
|
||||
function stubToolRunnerConstructor(exitCode = 0, stderr) {
|
||||
const runnerObjectStub = sinon.createStubInstance(toolrunner.ToolRunner);
|
||||
runnerObjectStub.exec.resolves(0);
|
||||
const runnerConstructorStub = sinon.stub(toolrunner, "ToolRunner");
|
||||
runnerConstructorStub.returns(runnerObjectStub);
|
||||
let stderrListener = undefined;
|
||||
runnerConstructorStub.callsFake((_cmd, _args, options) => {
|
||||
stderrListener = options.listeners?.stderr;
|
||||
return runnerObjectStub;
|
||||
});
|
||||
runnerObjectStub.exec.callsFake(async () => {
|
||||
if (stderrListener !== undefined && stderr !== undefined) {
|
||||
stderrListener(Buffer.from(stderr));
|
||||
}
|
||||
return exitCode;
|
||||
});
|
||||
return runnerConstructorStub;
|
||||
}
|
||||
exports.stubToolRunnerConstructor = stubToolRunnerConstructor;
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Generated
+2
-1
@@ -93,7 +93,8 @@ async function mockHttpRequests(databaseUploadStatusCode) {
|
||||
const loggedMessages = [];
|
||||
await (0, database_upload_1.uploadDatabases)(testRepoName, getTestConfig(tmpDir), testApiDetails, (0, testing_utils_1.getRecordingLogger)(loggedMessages));
|
||||
t.assert(loggedMessages.find((v) => v.type === "debug" &&
|
||||
v.message === "Database upload disabled in workflow. Skipping upload.") !== undefined);
|
||||
v.message ===
|
||||
"Database upload disabled in workflow. Skipping upload.") !== undefined);
|
||||
});
|
||||
});
|
||||
(0, ava_1.default)("Abort database upload if running against GHES", async (t) => {
|
||||
|
||||
File diff suppressed because one or more lines are too long
+4
-4
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"bundleVersion": "codeql-bundle-v2.14.0",
|
||||
"cliVersion": "2.14.0",
|
||||
"priorBundleVersion": "codeql-bundle-v2.13.5",
|
||||
"priorCliVersion": "2.13.5"
|
||||
"bundleVersion": "codeql-bundle-v2.14.1",
|
||||
"cliVersion": "2.14.1",
|
||||
"priorBundleVersion": "codeql-bundle-v2.14.0",
|
||||
"priorCliVersion": "2.14.0"
|
||||
}
|
||||
|
||||
Generated
-22
@@ -1,22 +0,0 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.errorMatchers = exports.namedMatchersForTesting = void 0;
|
||||
// exported only for testing purposes
|
||||
exports.namedMatchersForTesting = {
|
||||
/*
|
||||
In due course it may be possible to remove the regex, if/when javascript also exits with code 32.
|
||||
*/
|
||||
noSourceCodeFound: {
|
||||
exitCode: 32,
|
||||
outputRegex: new RegExp("No JavaScript or TypeScript code found\\."),
|
||||
message: "No code found during the build. Please see:\n" +
|
||||
"https://gh.io/troubleshooting-code-scanning/no-source-code-seen-during-build",
|
||||
},
|
||||
fatalError: {
|
||||
outputRegex: new RegExp("A fatal error occurred"),
|
||||
message: "A fatal error occurred.",
|
||||
},
|
||||
};
|
||||
// we collapse the matches into an array for use in execErrorCatcher
|
||||
exports.errorMatchers = Object.values(exports.namedMatchersForTesting);
|
||||
//# sourceMappingURL=error-matcher.js.map
|
||||
@@ -1 +0,0 @@
|
||||
{"version":3,"file":"error-matcher.js","sourceRoot":"","sources":["../src/error-matcher.ts"],"names":[],"mappings":";;;AAQA,qCAAqC;AACxB,QAAA,uBAAuB,GAAoC;IACtE;;MAEE;IACF,iBAAiB,EAAE;QACjB,QAAQ,EAAE,EAAE;QACZ,WAAW,EAAE,IAAI,MAAM,CAAC,2CAA2C,CAAC;QACpE,OAAO,EACL,+CAA+C;YAC/C,8EAA8E;KACjF;IACD,UAAU,EAAE;QACV,WAAW,EAAE,IAAI,MAAM,CAAC,wBAAwB,CAAC;QACjD,OAAO,EAAE,yBAAyB;KACnC;CACF,CAAC;AAEF,oEAAoE;AACvD,QAAA,aAAa,GAAG,MAAM,CAAC,MAAM,CAAC,+BAAuB,CAAC,CAAC"}
|
||||
Generated
-32
@@ -1,32 +0,0 @@
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const ava_1 = __importDefault(require("ava"));
|
||||
const error_matcher_1 = require("./error-matcher");
|
||||
/*
|
||||
NB We test the regexes for all the matchers against example log output snippets.
|
||||
*/
|
||||
(0, ava_1.default)("noSourceCodeFound matches against example javascript output", async (t) => {
|
||||
t.assert(testErrorMatcher("noSourceCodeFound", `
|
||||
2020-09-07T17:39:53.9050522Z [2020-09-07 17:39:53] [build] Done extracting /opt/hostedtoolcache/CodeQL/0.0.0-20200630/x64/codeql/javascript/tools/data/externs/web/ie_vml.js (3 ms)
|
||||
2020-09-07T17:39:53.9051849Z [2020-09-07 17:39:53] [build-err] No JavaScript or TypeScript code found.
|
||||
2020-09-07T17:39:53.9052444Z [2020-09-07 17:39:53] [build-err] No JavaScript or TypeScript code found.
|
||||
2020-09-07T17:39:53.9251124Z [2020-09-07 17:39:53] [ERROR] Spawned process exited abnormally (code 255; tried to run: [/opt/hostedtoolcache/CodeQL/0.0.0-20200630/x64/codeql/javascript/tools/autobuild.sh])
|
||||
`));
|
||||
});
|
||||
(0, ava_1.default)("fatalError matches against example log output", async (t) => {
|
||||
t.assert(testErrorMatcher("fatalError", "A fatal error occurred: Could not process query metadata for test-query.ql"));
|
||||
});
|
||||
function testErrorMatcher(matcherName, logSample) {
|
||||
if (!(matcherName in error_matcher_1.namedMatchersForTesting)) {
|
||||
throw new Error(`Unknown matcher ${matcherName}`);
|
||||
}
|
||||
const regex = error_matcher_1.namedMatchersForTesting[matcherName].outputRegex;
|
||||
if (regex === undefined) {
|
||||
throw new Error(`Cannot test matcher ${matcherName} with null regex`);
|
||||
}
|
||||
return regex.test(logSample);
|
||||
}
|
||||
//# sourceMappingURL=error-matcher.test.js.map
|
||||
@@ -1 +0,0 @@
|
||||
{"version":3,"file":"error-matcher.test.js","sourceRoot":"","sources":["../src/error-matcher.test.ts"],"names":[],"mappings":";;;;;AAAA,8CAAuB;AAEvB,mDAA0D;AAE1D;;EAEE;AAEF,IAAA,aAAI,EAAC,6DAA6D,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC9E,CAAC,CAAC,MAAM,CACN,gBAAgB,CACd,mBAAmB,EACnB;;;;;GAKH,CACE,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,IAAA,aAAI,EAAC,+CAA+C,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAChE,CAAC,CAAC,MAAM,CACN,gBAAgB,CACd,YAAY,EACZ,4EAA4E,CAC7E,CACF,CAAC;AACJ,CAAC,CAAC,CAAC;AAEH,SAAS,gBAAgB,CAAC,WAAmB,EAAE,SAAiB;IAC9D,IAAI,CAAC,CAAC,WAAW,IAAI,uCAAuB,CAAC,EAAE;QAC7C,MAAM,IAAI,KAAK,CAAC,mBAAmB,WAAW,EAAE,CAAC,CAAC;KACnD;IACD,MAAM,KAAK,GAAG,uCAAuB,CAAC,WAAW,CAAC,CAAC,WAAW,CAAC;IAC/D,IAAI,KAAK,KAAK,SAAS,EAAE;QACvB,MAAM,IAAI,KAAK,CAAC,uBAAuB,WAAW,kBAAkB,CAAC,CAAC;KACvE;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC"}
|
||||
Generated
+11
-1
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
||||
return result;
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.logCodeScanningConfigInCli = exports.useCodeScanningConfigInCli = exports.Features = exports.FEATURE_FLAGS_FILE_NAME = exports.featureConfig = exports.Feature = exports.CODEQL_VERSION_NEW_ANALYSIS_SUMMARY = exports.CODEQL_VERSION_BUNDLE_SEMANTICALLY_VERSIONED = void 0;
|
||||
exports.logCodeScanningConfigInCli = exports.useCodeScanningConfigInCli = exports.Features = exports.FEATURE_FLAGS_FILE_NAME = exports.featureConfig = exports.Feature = exports.CODEQL_VERSION_INTRA_LAYER_PARALLELISM = exports.CODEQL_VERSION_NEW_ANALYSIS_SUMMARY = exports.CODEQL_VERSION_BUNDLE_SEMANTICALLY_VERSIONED = void 0;
|
||||
const fs = __importStar(require("fs"));
|
||||
const path = __importStar(require("path"));
|
||||
const semver = __importStar(require("semver"));
|
||||
@@ -40,6 +40,10 @@ exports.CODEQL_VERSION_BUNDLE_SEMANTICALLY_VERSIONED = "2.13.4";
|
||||
* Versions 2.14.0+ of the CodeQL CLI support new analysis summaries.
|
||||
*/
|
||||
exports.CODEQL_VERSION_NEW_ANALYSIS_SUMMARY = "2.14.0";
|
||||
/**
|
||||
* Versions 2.14.0+ of the CodeQL CLI support intra-layer parallelism (aka fine-grained parallelism) options.
|
||||
*/
|
||||
exports.CODEQL_VERSION_INTRA_LAYER_PARALLELISM = "2.14.0";
|
||||
/**
|
||||
* Feature enablement as returned by the GitHub API endpoint.
|
||||
*
|
||||
@@ -50,6 +54,7 @@ var Feature;
|
||||
Feature["CliConfigFileEnabled"] = "cli_config_file_enabled";
|
||||
Feature["DisableKotlinAnalysisEnabled"] = "disable_kotlin_analysis_enabled";
|
||||
Feature["DisablePythonDependencyInstallationEnabled"] = "disable_python_dependency_installation_enabled";
|
||||
Feature["EvaluatorIntraLayerParallelismEnabled"] = "evaluator_intra_layer_parallelism_enabled";
|
||||
Feature["ExportDiagnosticsEnabled"] = "export_diagnostics_enabled";
|
||||
Feature["MlPoweredQueriesEnabled"] = "ml_powered_queries_enabled";
|
||||
Feature["NewAnalysisSummaryEnabled"] = "new_analysis_summary_enabled";
|
||||
@@ -68,6 +73,11 @@ exports.featureConfig = {
|
||||
minimumVersion: "2.11.6",
|
||||
defaultValue: true,
|
||||
},
|
||||
[Feature.EvaluatorIntraLayerParallelismEnabled]: {
|
||||
envVar: "CODEQL_EVALUATOR_INTRA_LAYER_PARALLELISM",
|
||||
minimumVersion: exports.CODEQL_VERSION_INTRA_LAYER_PARALLELISM,
|
||||
defaultValue: false,
|
||||
},
|
||||
[Feature.ExportDiagnosticsEnabled]: {
|
||||
envVar: "CODEQL_ACTION_EXPORT_DIAGNOSTICS",
|
||||
minimumVersion: "2.12.4",
|
||||
|
||||
File diff suppressed because one or more lines are too long
Generated
+46
-24
@@ -31,6 +31,8 @@ const fs = __importStar(require("fs"));
|
||||
const path = __importStar(require("path"));
|
||||
const perf_hooks_1 = require("perf_hooks");
|
||||
const toolcache = __importStar(require("@actions/tool-cache"));
|
||||
const check_disk_space_1 = __importDefault(require("check-disk-space"));
|
||||
const del_1 = __importDefault(require("del"));
|
||||
const fast_deep_equal_1 = __importDefault(require("fast-deep-equal"));
|
||||
const semver = __importStar(require("semver"));
|
||||
const uuid_1 = require("uuid");
|
||||
@@ -87,14 +89,14 @@ function tryGetCodeQLCliVersionForRelease(release, logger) {
|
||||
return undefined;
|
||||
}
|
||||
else if (cliVersionsFromMarkerFiles.length === 0) {
|
||||
logger.debug(`Failed to find the CodeQL CLI version for release ${release.tag_name}.`);
|
||||
logger.info(`Failed to find the CodeQL CLI version for release ${release.tag_name}.`);
|
||||
return undefined;
|
||||
}
|
||||
return cliVersionsFromMarkerFiles[0];
|
||||
}
|
||||
async function tryFindCliVersionDotcomOnly(tagName, logger) {
|
||||
try {
|
||||
logger.debug(`Fetching the GitHub Release for the CodeQL bundle tagged ${tagName}.`);
|
||||
logger.info(`Fetching the GitHub Release for the CodeQL bundle tagged ${tagName}.`);
|
||||
const apiClient = api.getApiClient();
|
||||
const codeQLActionRepository = getCodeQLActionRepository(logger);
|
||||
const release = await apiClient.rest.repos.getReleaseByTag({
|
||||
@@ -105,7 +107,7 @@ async function tryFindCliVersionDotcomOnly(tagName, logger) {
|
||||
return tryGetCodeQLCliVersionForRelease(release.data, logger);
|
||||
}
|
||||
catch (e) {
|
||||
logger.debug(`Failed to find the CLI version for the CodeQL bundle tagged ${tagName}. ${(0, util_1.wrapError)(e).message}`);
|
||||
logger.info(`Failed to find the CLI version for the CodeQL bundle tagged ${tagName}. ${(0, util_1.wrapError)(e).message}`);
|
||||
return undefined;
|
||||
}
|
||||
}
|
||||
@@ -180,7 +182,7 @@ async function getCodeQLBundleDownloadURL(tagName, apiDetails, variant, logger)
|
||||
function tryGetBundleVersionFromTagName(tagName, logger) {
|
||||
const match = tagName.match(/^codeql-bundle-(.*)$/);
|
||||
if (match === null || match.length < 2) {
|
||||
logger.debug(`Could not determine bundle version from tag ${tagName}.`);
|
||||
logger.info(`Could not determine bundle version from tag ${tagName}.`);
|
||||
return undefined;
|
||||
}
|
||||
return match[1];
|
||||
@@ -188,7 +190,7 @@ function tryGetBundleVersionFromTagName(tagName, logger) {
|
||||
function tryGetTagNameFromUrl(url, logger) {
|
||||
const match = url.match(/\/(codeql-bundle-.*)\//);
|
||||
if (match === null || match.length < 2) {
|
||||
logger.debug(`Could not determine tag name for URL ${url}.`);
|
||||
logger.info(`Could not determine tag name for URL ${url}.`);
|
||||
return undefined;
|
||||
}
|
||||
return match[1];
|
||||
@@ -203,7 +205,7 @@ function tryGetBundleVersionFromUrl(url, logger) {
|
||||
exports.tryGetBundleVersionFromUrl = tryGetBundleVersionFromUrl;
|
||||
function convertToSemVer(version, logger) {
|
||||
if (!semver.valid(version)) {
|
||||
logger.debug(`Bundle version ${version} is not in SemVer format. Will treat it as pre-release 0.0.0-${version}.`);
|
||||
logger.info(`Bundle version ${version} is not in SemVer format. Will treat it as pre-release 0.0.0-${version}.`);
|
||||
version = `0.0.0-${version}`;
|
||||
}
|
||||
const s = semver.clean(version);
|
||||
@@ -227,7 +229,7 @@ async function findOverridingToolsInCache(humanReadableVersion, logger) {
|
||||
.filter(({ folder }) => fs.existsSync(path.join(folder, "pinned-version")));
|
||||
if (candidates.length === 1) {
|
||||
const candidate = candidates[0];
|
||||
logger.debug(`CodeQL tools version ${candidate.version} in toolcache overriding version ${humanReadableVersion}.`);
|
||||
logger.info(`CodeQL tools version ${candidate.version} in toolcache overriding version ${humanReadableVersion}.`);
|
||||
return {
|
||||
codeqlFolder: candidate.folder,
|
||||
sourceType: "toolcache",
|
||||
@@ -235,10 +237,10 @@ async function findOverridingToolsInCache(humanReadableVersion, logger) {
|
||||
};
|
||||
}
|
||||
else if (candidates.length === 0) {
|
||||
logger.debug("Did not find any candidate pinned versions of the CodeQL tools in the toolcache.");
|
||||
logger.info("Did not find any candidate pinned versions of the CodeQL tools in the toolcache.");
|
||||
}
|
||||
else {
|
||||
logger.debug("Could not use CodeQL tools from the toolcache since more than one candidate pinned " +
|
||||
logger.info("Could not use CodeQL tools from the toolcache since more than one candidate pinned " +
|
||||
"version was found in the toolcache.");
|
||||
}
|
||||
return undefined;
|
||||
@@ -300,7 +302,7 @@ async function getCodeQLSource(toolsInput, defaultCliVersion, apiDetails, varian
|
||||
tagName ??
|
||||
url ??
|
||||
"unknown";
|
||||
logger.debug("Attempting to obtain CodeQL tools. " +
|
||||
logger.info("Attempting to obtain CodeQL tools. " +
|
||||
`CLI version: ${cliVersion ?? "unknown"}, ` +
|
||||
`bundle tag name: ${tagName ?? "unknown"}, ` +
|
||||
`URL: ${url ?? "unspecified"}.`);
|
||||
@@ -310,26 +312,26 @@ async function getCodeQLSource(toolsInput, defaultCliVersion, apiDetails, varian
|
||||
codeqlFolder = toolcache.find("CodeQL", cliVersion);
|
||||
// Fall back to matching `x.y.z-<tagName>`.
|
||||
if (!codeqlFolder) {
|
||||
logger.debug("Didn't find a version of the CodeQL tools in the toolcache with a version number " +
|
||||
logger.info("Didn't find a version of the CodeQL tools in the toolcache with a version number " +
|
||||
`exactly matching ${cliVersion}.`);
|
||||
const allVersions = toolcache.findAllVersions("CodeQL");
|
||||
logger.debug(`Found the following versions of the CodeQL tools in the toolcache: ${JSON.stringify(allVersions)}.`);
|
||||
logger.info(`Found the following versions of the CodeQL tools in the toolcache: ${JSON.stringify(allVersions)}.`);
|
||||
// If there is exactly one version of the CodeQL tools in the toolcache, and that version is
|
||||
// the form `x.y.z-<tagName>`, then use it.
|
||||
const candidateVersions = allVersions.filter((version) => version.startsWith(`${cliVersion}-`));
|
||||
if (candidateVersions.length === 1) {
|
||||
logger.debug(`Exactly one version of the CodeQL tools starting with ${cliVersion} found in the ` +
|
||||
logger.info(`Exactly one version of the CodeQL tools starting with ${cliVersion} found in the ` +
|
||||
"toolcache, using that.");
|
||||
codeqlFolder = toolcache.find("CodeQL", candidateVersions[0]);
|
||||
}
|
||||
else if (candidateVersions.length === 0) {
|
||||
logger.debug(`Didn't find any versions of the CodeQL tools starting with ${cliVersion} ` +
|
||||
logger.info(`Didn't find any versions of the CodeQL tools starting with ${cliVersion} ` +
|
||||
`in the toolcache. Trying next fallback method.`);
|
||||
}
|
||||
else {
|
||||
logger.warning(`Found ${candidateVersions.length} versions of the CodeQL tools starting with ` +
|
||||
`${cliVersion} in the toolcache, but at most one was expected.`);
|
||||
logger.debug("Trying next fallback method.");
|
||||
logger.info("Trying next fallback method.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -340,7 +342,7 @@ async function getCodeQLSource(toolsInput, defaultCliVersion, apiDetails, varian
|
||||
codeqlFolder = toolcache.find("CodeQL", fallbackVersion);
|
||||
}
|
||||
else {
|
||||
logger.debug("Could not determine a fallback toolcache version number for CodeQL tools version " +
|
||||
logger.info("Could not determine a fallback toolcache version number for CodeQL tools version " +
|
||||
`${humanReadableVersion}.`);
|
||||
}
|
||||
}
|
||||
@@ -390,7 +392,7 @@ async function tryGetFallbackToolcacheVersion(cliVersion, tagName, logger) {
|
||||
return undefined;
|
||||
}
|
||||
const fallbackVersion = convertToSemVer(bundleVersion, logger);
|
||||
logger.debug(`Computed a fallback toolcache version number of ${fallbackVersion} for CodeQL version ` +
|
||||
logger.info(`Computed a fallback toolcache version number of ${fallbackVersion} for CodeQL version ` +
|
||||
`${cliVersion ?? tagName}.`);
|
||||
return fallbackVersion;
|
||||
}
|
||||
@@ -407,26 +409,38 @@ async function downloadCodeQL(codeqlURL, maybeBundleVersion, maybeCliVersion, ap
|
||||
// We also don't want to send an authorization header if there's already a token provided in the URL.
|
||||
let authorization = undefined;
|
||||
if (searchParams.has("token")) {
|
||||
logger.debug("CodeQL tools URL contains an authorization token.");
|
||||
logger.info("CodeQL tools URL contains an authorization token.");
|
||||
}
|
||||
else if (codeqlURL.startsWith(`${apiDetails.url}/`)) {
|
||||
logger.debug("Providing an authorization token to download CodeQL tools.");
|
||||
logger.info("Providing an authorization token to download CodeQL tools.");
|
||||
authorization = `token ${apiDetails.auth}`;
|
||||
}
|
||||
else {
|
||||
logger.debug("Downloading CodeQL tools without an authorization token.");
|
||||
logger.info("Downloading CodeQL tools without an authorization token.");
|
||||
}
|
||||
await printDiskSpace(logger);
|
||||
logger.info(`Downloading CodeQL tools from ${codeqlURL}. This may take a while.`);
|
||||
const dest = path.join(tempDir, (0, uuid_1.v4)());
|
||||
const finalHeaders = Object.assign({ "User-Agent": "CodeQL Action" }, headers);
|
||||
const toolsDownloadStart = perf_hooks_1.performance.now();
|
||||
const codeqlPath = await toolcache.downloadTool(codeqlURL, dest, authorization, finalHeaders);
|
||||
const toolsDownloadDurationMs = Math.round(perf_hooks_1.performance.now() - toolsDownloadStart);
|
||||
logger.debug(`CodeQL bundle download to ${codeqlPath} complete.`);
|
||||
logger.info(`Finished downloading CodeQL bundle to ${codeqlPath} (${toolsDownloadDurationMs} ms).`);
|
||||
await printDiskSpace(logger);
|
||||
const codeqlExtracted = await toolcache.extractTar(codeqlPath);
|
||||
logger.info(`Finished extracting CodeQL bundle to ${codeqlExtracted}.`);
|
||||
await printDiskSpace(logger);
|
||||
try {
|
||||
await (0, del_1.default)(codeqlPath, { force: true });
|
||||
logger.info("Deleted CodeQL bundle archive.");
|
||||
}
|
||||
catch (e) {
|
||||
logger.warning("Failed to delete CodeQL bundle archive.");
|
||||
}
|
||||
await printDiskSpace(logger);
|
||||
const bundleVersion = maybeBundleVersion ?? tryGetBundleVersionFromUrl(codeqlURL, logger);
|
||||
if (bundleVersion === undefined) {
|
||||
logger.debug("Could not cache CodeQL tools because we could not determine the bundle version from the " +
|
||||
logger.info("Could not cache CodeQL tools because we could not determine the bundle version from the " +
|
||||
`URL ${codeqlURL}.`);
|
||||
return {
|
||||
toolsVersion: maybeCliVersion ?? "unknown",
|
||||
@@ -452,9 +466,13 @@ async function downloadCodeQL(codeqlURL, maybeBundleVersion, maybeCliVersion, ap
|
||||
const toolcacheVersion = maybeCliVersion?.match(/^[0-9]+\.[0-9]+\.[0-9]+$/)
|
||||
? `${maybeCliVersion}-${bundleVersion}`
|
||||
: convertToSemVer(bundleVersion, logger);
|
||||
const codeqlFolder = await toolcache.cacheDir(codeqlExtracted, "CodeQL", toolcacheVersion);
|
||||
await printDiskSpace(logger);
|
||||
await (0, del_1.default)(codeqlExtracted, { force: true });
|
||||
await printDiskSpace(logger);
|
||||
return {
|
||||
toolsVersion: maybeCliVersion ?? toolcacheVersion,
|
||||
codeqlFolder: await toolcache.cacheDir(codeqlExtracted, "CodeQL", toolcacheVersion),
|
||||
codeqlFolder,
|
||||
toolsDownloadDurationMs,
|
||||
};
|
||||
}
|
||||
@@ -493,7 +511,7 @@ async function setupCodeQLBundle(toolsInput, apiDetails, tempDir, variant, defau
|
||||
break;
|
||||
case "toolcache":
|
||||
codeqlFolder = source.codeqlFolder;
|
||||
logger.debug(`CodeQL found in cache ${codeqlFolder}`);
|
||||
logger.info(`CodeQL found in cache ${codeqlFolder}`);
|
||||
toolsSource = ToolsSource.Toolcache;
|
||||
break;
|
||||
case "download": {
|
||||
@@ -510,4 +528,8 @@ async function setupCodeQLBundle(toolsInput, apiDetails, tempDir, variant, defau
|
||||
return { codeqlFolder, toolsDownloadDurationMs, toolsSource, toolsVersion };
|
||||
}
|
||||
exports.setupCodeQLBundle = setupCodeQLBundle;
|
||||
async function printDiskSpace(logger) {
|
||||
const diskSpaceInfo = await (0, check_disk_space_1.default)(process.platform === "win32" ? path.parse(process.cwd()).root : "/");
|
||||
logger.info(`Disk space info: ${diskSpaceInfo.free / (1024 * 1024 * 1024)} GB free of ${diskSpaceInfo.size / (1024 * 1024 * 1024)} GB`);
|
||||
}
|
||||
//# sourceMappingURL=setup-codeql.js.map
|
||||
File diff suppressed because one or more lines are too long
Generated
-91
@@ -1,91 +0,0 @@
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
}));
|
||||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||
}) : function(o, v) {
|
||||
o["default"] = v;
|
||||
});
|
||||
var __importStar = (this && this.__importStar) || function (mod) {
|
||||
if (mod && mod.__esModule) return mod;
|
||||
var result = {};
|
||||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||
__setModuleDefault(result, mod);
|
||||
return result;
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.toolrunnerErrorCatcher = void 0;
|
||||
const toolrunner = __importStar(require("@actions/exec/lib/toolrunner"));
|
||||
const safeWhich = __importStar(require("@chrisgavin/safe-which"));
|
||||
const util_1 = require("./util");
|
||||
/**
|
||||
* Wrapper for toolrunner.Toolrunner which checks for specific return code and/or regex matches in console output.
|
||||
* Output will be streamed to the live console as well as captured for subsequent processing.
|
||||
* Returns promise with return code
|
||||
*
|
||||
* @param commandLine command to execute
|
||||
* @param args optional arguments for tool. Escaping is handled by the lib.
|
||||
* @param matchers defines specific codes and/or regexes that should lead to return of a custom error
|
||||
* @param options optional exec options. See ExecOptions
|
||||
* @returns ReturnState exit code and stdout output, if applicable
|
||||
*/
|
||||
async function toolrunnerErrorCatcher(commandLine, args, matchers, options) {
|
||||
let stdout = "";
|
||||
let stderr = "";
|
||||
const listeners = {
|
||||
stdout: (data) => {
|
||||
stdout += data.toString();
|
||||
if (options?.listeners?.stdout !== undefined) {
|
||||
options.listeners.stdout(data);
|
||||
}
|
||||
},
|
||||
stderr: (data) => {
|
||||
stderr += data.toString();
|
||||
if (options?.listeners?.stderr !== undefined) {
|
||||
options.listeners.stderr(data);
|
||||
}
|
||||
},
|
||||
};
|
||||
// we capture the original return code or error so that if no match is found we can duplicate the behavior
|
||||
let exitCode;
|
||||
try {
|
||||
exitCode = await new toolrunner.ToolRunner(await safeWhich.safeWhich(commandLine), args, {
|
||||
...options,
|
||||
listeners,
|
||||
ignoreReturnCode: true, // so we can check for specific codes using the matchers
|
||||
}).exec();
|
||||
// if there is a zero return code then we do not apply the matchers
|
||||
if (exitCode === 0)
|
||||
return { exitCode, stdout };
|
||||
if (matchers) {
|
||||
for (const matcher of matchers) {
|
||||
if (matcher.exitCode === exitCode ||
|
||||
matcher.outputRegex?.test(stderr) ||
|
||||
matcher.outputRegex?.test(stdout)) {
|
||||
throw new Error(matcher.message);
|
||||
}
|
||||
}
|
||||
}
|
||||
// only if we were instructed to ignore the return code do we ever return it non-zero
|
||||
if (options?.ignoreReturnCode) {
|
||||
return { exitCode, stdout };
|
||||
}
|
||||
else {
|
||||
throw new Error(`The process '${commandLine}' failed with exit code ${exitCode}`);
|
||||
}
|
||||
}
|
||||
catch (e) {
|
||||
throw (0, util_1.wrapError)(e);
|
||||
}
|
||||
}
|
||||
exports.toolrunnerErrorCatcher = toolrunnerErrorCatcher;
|
||||
//# sourceMappingURL=toolrunner-error-catcher.js.map
|
||||
@@ -1 +0,0 @@
|
||||
{"version":3,"file":"toolrunner-error-catcher.js","sourceRoot":"","sources":["../src/toolrunner-error-catcher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AACA,yEAA2D;AAC3D,kEAAoD;AAGpD,iCAAmC;AAOnC;;;;;;;;;;GAUG;AACI,KAAK,UAAU,sBAAsB,CAC1C,WAAmB,EACnB,IAAe,EACf,QAAyB,EACzB,OAAwB;IAExB,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,MAAM,SAAS,GAAG;QAChB,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACvB,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,IAAI,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5C,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aAChC;QACH,CAAC;QACD,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE;YACvB,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC1B,IAAI,OAAO,EAAE,SAAS,EAAE,MAAM,KAAK,SAAS,EAAE;gBAC5C,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;aAChC;QACH,CAAC;KACF,CAAC;IAEF,0GAA0G;IAC1G,IAAI,QAAgB,CAAC;IACrB,IAAI;QACF,QAAQ,GAAG,MAAM,IAAI,UAAU,CAAC,UAAU,CACxC,MAAM,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,EACtC,IAAI,EACJ;YACE,GAAG,OAAO;YACV,SAAS;YACT,gBAAgB,EAAE,IAAI,EAAE,wDAAwD;SACjF,CACF,CAAC,IAAI,EAAE,CAAC;QAET,mEAAmE;QACnE,IAAI,QAAQ,KAAK,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;QAEhD,IAAI,QAAQ,EAAE;YACZ,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE;gBAC9B,IACE,OAAO,CAAC,QAAQ,KAAK,QAAQ;oBAC7B,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC;oBACjC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,EACjC;oBACA,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;iBAClC;aACF;SACF;QAED,qFAAqF;QACrF,IAAI,OAAO,EAAE,gBAAgB,EAAE;YAC7B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;SAC7B;aAAM;YACL,MAAM,IAAI,KAAK,CACb,gBAAgB,WAAW,2BAA2B,QAAQ,EAAE,CACjE,CAAC;SACH;KACF;IAAC,OAAO,CAAC,EAAE;QACV,MAAM,IAAA,gBAAS,EAAC,CAAC,CAAC,CAAC;KACpB;AACH,CAAC;AA/DD,wDA+DC"}
|
||||
Generated
-164
@@ -1,164 +0,0 @@
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
}));
|
||||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||
}) : function(o, v) {
|
||||
o["default"] = v;
|
||||
});
|
||||
var __importStar = (this && this.__importStar) || function (mod) {
|
||||
if (mod && mod.__esModule) return mod;
|
||||
var result = {};
|
||||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||
__setModuleDefault(result, mod);
|
||||
return result;
|
||||
};
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const exec = __importStar(require("@actions/exec"));
|
||||
const ava_1 = __importDefault(require("ava"));
|
||||
const testing_utils_1 = require("./testing-utils");
|
||||
const toolrunner_error_catcher_1 = require("./toolrunner-error-catcher");
|
||||
(0, testing_utils_1.setupTests)(ava_1.default);
|
||||
(0, ava_1.default)("matchers are never applied if non-error exit", async (t) => {
|
||||
const testArgs = buildDummyArgs("foo bar\\nblort qux", "foo bar\\nblort qux", "", 0);
|
||||
const matchers = [
|
||||
{ exitCode: 123, outputRegex: new RegExp("foo bar"), message: "error!!!" },
|
||||
];
|
||||
t.deepEqual(await exec.exec("node", testArgs), 0);
|
||||
const returnState = await (0, toolrunner_error_catcher_1.toolrunnerErrorCatcher)("node", testArgs, matchers);
|
||||
t.deepEqual(returnState.exitCode, 0);
|
||||
});
|
||||
(0, ava_1.default)("regex matchers are applied to stdout for non-zero exit code", async (t) => {
|
||||
const testArgs = buildDummyArgs("foo bar\\nblort qux", "", "", 1);
|
||||
const matchers = [
|
||||
{ exitCode: 123, outputRegex: new RegExp("foo bar"), message: "🦄" },
|
||||
];
|
||||
await t.throwsAsync(exec.exec("node", testArgs), {
|
||||
instanceOf: Error,
|
||||
message: /failed with exit code 1/,
|
||||
});
|
||||
await t.throwsAsync((0, toolrunner_error_catcher_1.toolrunnerErrorCatcher)("node", testArgs, matchers), {
|
||||
instanceOf: Error,
|
||||
message: "🦄",
|
||||
});
|
||||
});
|
||||
(0, ava_1.default)("regex matchers are applied to stderr for non-zero exit code", async (t) => {
|
||||
const testArgs = buildDummyArgs("non matching string", "foo bar\\nblort qux", "", 1);
|
||||
const matchers = [
|
||||
{ exitCode: 123, outputRegex: new RegExp("foo bar"), message: "🦄" },
|
||||
];
|
||||
await t.throwsAsync(exec.exec("node", testArgs), {
|
||||
instanceOf: Error,
|
||||
message: /failed with exit code 1/,
|
||||
});
|
||||
await t.throwsAsync((0, toolrunner_error_catcher_1.toolrunnerErrorCatcher)("node", testArgs, matchers), {
|
||||
instanceOf: Error,
|
||||
message: "🦄",
|
||||
});
|
||||
});
|
||||
(0, ava_1.default)("matcher returns correct error message when multiple matchers defined", async (t) => {
|
||||
const testArgs = buildDummyArgs("non matching string", "foo bar\\nblort qux", "", 1);
|
||||
const matchers = [
|
||||
{ exitCode: 456, outputRegex: new RegExp("lorem ipsum"), message: "😩" },
|
||||
{ exitCode: 123, outputRegex: new RegExp("foo bar"), message: "🦄" },
|
||||
{ exitCode: 789, outputRegex: new RegExp("blah blah"), message: "🤦♂️" },
|
||||
];
|
||||
await t.throwsAsync(exec.exec("node", testArgs), {
|
||||
instanceOf: Error,
|
||||
message: /failed with exit code 1/,
|
||||
});
|
||||
await t.throwsAsync((0, toolrunner_error_catcher_1.toolrunnerErrorCatcher)("node", testArgs, matchers), {
|
||||
instanceOf: Error,
|
||||
message: "🦄",
|
||||
});
|
||||
});
|
||||
(0, ava_1.default)("matcher returns first match to regex when multiple matches", async (t) => {
|
||||
const testArgs = buildDummyArgs("non matching string", "foo bar\\nblort qux", "", 1);
|
||||
const matchers = [
|
||||
{ exitCode: 123, outputRegex: new RegExp("foo bar"), message: "🦄" },
|
||||
{ exitCode: 789, outputRegex: new RegExp("blah blah"), message: "🤦♂️" },
|
||||
{ exitCode: 987, outputRegex: new RegExp("foo bar"), message: "🚫" },
|
||||
];
|
||||
await t.throwsAsync(exec.exec("node", testArgs), {
|
||||
instanceOf: Error,
|
||||
message: /failed with exit code 1/,
|
||||
});
|
||||
await t.throwsAsync((0, toolrunner_error_catcher_1.toolrunnerErrorCatcher)("node", testArgs, matchers), {
|
||||
instanceOf: Error,
|
||||
message: "🦄",
|
||||
});
|
||||
});
|
||||
(0, ava_1.default)("exit code matchers are applied", async (t) => {
|
||||
const testArgs = buildDummyArgs("non matching string", "foo bar\\nblort qux", "", 123);
|
||||
const matchers = [
|
||||
{
|
||||
exitCode: 123,
|
||||
outputRegex: new RegExp("this will not match"),
|
||||
message: "🦄",
|
||||
},
|
||||
];
|
||||
await t.throwsAsync(exec.exec("node", testArgs), {
|
||||
instanceOf: Error,
|
||||
message: /failed with exit code 123/,
|
||||
});
|
||||
await t.throwsAsync((0, toolrunner_error_catcher_1.toolrunnerErrorCatcher)("node", testArgs, matchers), {
|
||||
instanceOf: Error,
|
||||
message: "🦄",
|
||||
});
|
||||
});
|
||||
(0, ava_1.default)("execErrorCatcher respects the ignoreReturnValue option", async (t) => {
|
||||
const testArgs = buildDummyArgs("standard output", "error output", "", 199);
|
||||
await t.throwsAsync((0, toolrunner_error_catcher_1.toolrunnerErrorCatcher)("node", testArgs, [], { ignoreReturnCode: false }), { instanceOf: Error });
|
||||
const returnState = await (0, toolrunner_error_catcher_1.toolrunnerErrorCatcher)("node", testArgs, [], {
|
||||
ignoreReturnCode: true,
|
||||
});
|
||||
t.deepEqual(returnState.exitCode, 199);
|
||||
});
|
||||
(0, ava_1.default)("execErrorCatcher preserves behavior of provided listeners", async (t) => {
|
||||
const stdoutExpected = "standard output";
|
||||
const stderrExpected = "error output";
|
||||
let stdoutActual = "";
|
||||
let stderrActual = "";
|
||||
const listeners = {
|
||||
stdout: (data) => {
|
||||
stdoutActual += data.toString();
|
||||
},
|
||||
stderr: (data) => {
|
||||
stderrActual += data.toString();
|
||||
},
|
||||
};
|
||||
const testArgs = buildDummyArgs(stdoutExpected, stderrExpected, "", 0);
|
||||
const returnState = await (0, toolrunner_error_catcher_1.toolrunnerErrorCatcher)("node", testArgs, [], {
|
||||
listeners,
|
||||
});
|
||||
t.deepEqual(returnState.exitCode, 0);
|
||||
t.deepEqual(stdoutActual, `${stdoutExpected}\n`);
|
||||
t.deepEqual(stderrActual, `${stderrExpected}\n`);
|
||||
});
|
||||
function buildDummyArgs(stdoutContents, stderrContents, desiredErrorMessage, desiredExitCode) {
|
||||
let command = "";
|
||||
if (stdoutContents)
|
||||
command += `console.log("${stdoutContents}");`;
|
||||
if (stderrContents)
|
||||
command += `console.error("${stderrContents}");`;
|
||||
if (command.length === 0)
|
||||
throw new Error("Must provide contents for either stdout or stderr");
|
||||
if (desiredErrorMessage)
|
||||
command += `throw new Error("${desiredErrorMessage}");`;
|
||||
if (desiredExitCode)
|
||||
command += `process.exitCode = ${desiredExitCode};`;
|
||||
return ["-e", command];
|
||||
}
|
||||
//# sourceMappingURL=toolrunner-error-catcher.test.js.map
|
||||
File diff suppressed because one or more lines are too long
Generated
+12
-1
@@ -331,7 +331,10 @@ async function waitForProcessing(repositoryNwo, sarifID, logger, options = {
|
||||
break;
|
||||
}
|
||||
else if (status === "failed") {
|
||||
throw new Error(`Code Scanning could not process the submitted SARIF file:\n${response.data.errors}`);
|
||||
const message = `Code Scanning could not process the submitted SARIF file:\n${response.data.errors}`;
|
||||
throw shouldConsiderAsUserError(response.data.errors)
|
||||
? new util_1.UserError(message)
|
||||
: new Error(message);
|
||||
}
|
||||
else {
|
||||
util.assertNever(status);
|
||||
@@ -346,6 +349,14 @@ async function waitForProcessing(repositoryNwo, sarifID, logger, options = {
|
||||
}
|
||||
}
|
||||
exports.waitForProcessing = waitForProcessing;
|
||||
/**
|
||||
* Returns whether the provided processing errors should be considered a user error.
|
||||
*/
|
||||
function shouldConsiderAsUserError(processingErrors) {
|
||||
return (processingErrors.length === 1 &&
|
||||
processingErrors[0] ===
|
||||
"CodeQL analyses from advanced configurations cannot be processed when the default setup is enabled");
|
||||
}
|
||||
/**
|
||||
* Checks the processing result for an unsuccessful execution. Throws if the
|
||||
* result is not a failure with a single "unsuccessful execution" error.
|
||||
|
||||
File diff suppressed because one or more lines are too long
+1
-1
File diff suppressed because one or more lines are too long
+1
-1
@@ -1 +1 @@
|
||||
../prettier/bin-prettier.js
|
||||
../prettier/bin/prettier.cjs
|
||||
+342
-411
File diff suppressed because it is too large
Load Diff
+7
-7
@@ -79,7 +79,7 @@ Parse a regular expression literal.
|
||||
- **Return:**
|
||||
- The AST of the regular expression.
|
||||
|
||||
#### parser.parsePattern(source, start?, end?, uFlag?)
|
||||
#### parser.parsePattern(source, start?, end?, flags?)
|
||||
|
||||
Parse a regular expression pattern.
|
||||
|
||||
@@ -87,7 +87,7 @@ Parse a regular expression pattern.
|
||||
- `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`.
|
||||
- `uFlag?` (`boolean`) The flag to enable Unicode mode.
|
||||
- `flags?` (`{ unicode?: boolean, unicodeSets?: boolean }`) The flags to enable Unicode mode, and Unicode Set mode.
|
||||
- **Return:**
|
||||
- The AST of the regular expression pattern.
|
||||
|
||||
@@ -118,7 +118,7 @@ Validate a regular expression literal.
|
||||
- `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, uFlag)
|
||||
#### validator.validatePattern(source, start, end, flags)
|
||||
|
||||
Validate a regular expression pattern.
|
||||
|
||||
@@ -126,7 +126,7 @@ Validate a regular expression pattern.
|
||||
- `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`.
|
||||
- `uFlag?` (`boolean`) The flag to enable Unicode mode.
|
||||
- `flags?` (`{ unicode?: boolean, unicodeSets?: boolean }`) The flags to enable Unicode mode, and Unicode Set mode.
|
||||
|
||||
#### validator.validateFlags(source, start, end)
|
||||
|
||||
@@ -172,6 +172,6 @@ Please use GitHub's Issues/PRs.
|
||||
- `npm run watch` runs tests with `--watch` option.
|
||||
|
||||
[`AST.Node`]: src/ast.ts#L4
|
||||
[`RegExpParser.Options`]: src/parser.ts#L539
|
||||
[`RegExpValidator.Options`]: src/validator.ts#L127
|
||||
[`RegExpVisitor.Handlers`]: src/visitor.ts#L204
|
||||
[`RegExpParser.Options`]: src/parser.ts#L743
|
||||
[`RegExpValidator.Options`]: src/validator.ts#L220
|
||||
[`RegExpVisitor.Handlers`]: src/visitor.ts#L291
|
||||
|
||||
+258
-12
@@ -44,11 +44,16 @@ declare module "@eslint-community/regexpp/ast" {
|
||||
| CapturingGroup
|
||||
| CharacterClass
|
||||
| CharacterClassRange
|
||||
| ClassIntersection
|
||||
| ClassStringDisjunction
|
||||
| ClassSubtraction
|
||||
| ExpressionCharacterClass
|
||||
| Group
|
||||
| LookaroundAssertion
|
||||
| Pattern
|
||||
| Quantifier
|
||||
| RegExpLiteral;
|
||||
| RegExpLiteral
|
||||
| StringAlternative;
|
||||
/**
|
||||
* The type which includes all leaf nodes.
|
||||
*/
|
||||
@@ -71,16 +76,28 @@ declare module "@eslint-community/regexpp/ast" {
|
||||
| Character
|
||||
| CharacterClass
|
||||
| CharacterSet
|
||||
| ExpressionCharacterClass
|
||||
| Group
|
||||
| LookaheadAssertion;
|
||||
/**
|
||||
* The type which includes all character class atom nodes.
|
||||
*/
|
||||
export type CharacterClassElement =
|
||||
| ClassRangesCharacterClassElement
|
||||
| UnicodeSetsCharacterClassElement;
|
||||
export type ClassRangesCharacterClassElement =
|
||||
| Character
|
||||
| CharacterClassRange
|
||||
| EscapeCharacterSet
|
||||
| UnicodePropertyCharacterSet;
|
||||
export type UnicodeSetsCharacterClassElement =
|
||||
| Character
|
||||
| CharacterClassRange
|
||||
| ClassStringDisjunction
|
||||
| EscapeCharacterSet
|
||||
| ExpressionCharacterClass
|
||||
| UnicodePropertyCharacterSet
|
||||
| UnicodeSetsCharacterClass;
|
||||
/**
|
||||
* The type which defines common properties for all node types.
|
||||
*/
|
||||
@@ -184,12 +201,35 @@ declare module "@eslint-community/regexpp/ast" {
|
||||
* The character class.
|
||||
* E.g. `[ab]`, `[^ab]`
|
||||
*/
|
||||
export interface CharacterClass extends NodeBase {
|
||||
export type CharacterClass =
|
||||
| ClassRangesCharacterClass
|
||||
| UnicodeSetsCharacterClass;
|
||||
interface BaseCharacterClass extends NodeBase {
|
||||
type: "CharacterClass";
|
||||
parent: Alternative | Quantifier;
|
||||
parent:
|
||||
| Alternative
|
||||
| ExpressionCharacterClass
|
||||
| Quantifier
|
||||
| UnicodeSetsCharacterClass;
|
||||
unicodeSets: boolean;
|
||||
negate: boolean;
|
||||
elements: CharacterClassElement[];
|
||||
}
|
||||
export interface ClassRangesCharacterClass extends BaseCharacterClass {
|
||||
parent: Alternative | Quantifier;
|
||||
unicodeSets: false;
|
||||
elements: ClassRangesCharacterClassElement[];
|
||||
}
|
||||
/** UnicodeSetsCharacterClass is the CharacterClass when in Unicode sets mode. So it may contain strings. */
|
||||
export interface UnicodeSetsCharacterClass extends BaseCharacterClass {
|
||||
parent:
|
||||
| Alternative
|
||||
| ExpressionCharacterClass
|
||||
| Quantifier
|
||||
| UnicodeSetsCharacterClass;
|
||||
unicodeSets: true;
|
||||
elements: UnicodeSetsCharacterClassElement[];
|
||||
}
|
||||
/**
|
||||
* The character class.
|
||||
* E.g. `[a-b]`
|
||||
@@ -249,7 +289,12 @@ declare module "@eslint-community/regexpp/ast" {
|
||||
*/
|
||||
export interface EscapeCharacterSet extends NodeBase {
|
||||
type: "CharacterSet";
|
||||
parent: Alternative | CharacterClass | Quantifier;
|
||||
parent:
|
||||
| Alternative
|
||||
| CharacterClass
|
||||
| ClassIntersection
|
||||
| ClassSubtraction
|
||||
| Quantifier;
|
||||
kind: "digit" | "space" | "word";
|
||||
negate: boolean;
|
||||
}
|
||||
@@ -257,14 +302,92 @@ declare module "@eslint-community/regexpp/ast" {
|
||||
* The unicode property escape.
|
||||
* E.g. `\p{ASCII}`, `\P{ASCII}`, `\p{Script=Hiragana}`
|
||||
*/
|
||||
export interface UnicodePropertyCharacterSet extends NodeBase {
|
||||
export type UnicodePropertyCharacterSet =
|
||||
| CharacterUnicodePropertyCharacterSet
|
||||
| StringsUnicodePropertyCharacterSet;
|
||||
interface BaseUnicodePropertyCharacterSet extends NodeBase {
|
||||
type: "CharacterSet";
|
||||
parent: Alternative | CharacterClass | Quantifier;
|
||||
parent:
|
||||
| Alternative
|
||||
| CharacterClass
|
||||
| ClassIntersection
|
||||
| ClassSubtraction
|
||||
| Quantifier;
|
||||
kind: "property";
|
||||
strings: boolean;
|
||||
key: string;
|
||||
value: string | null;
|
||||
negate: boolean;
|
||||
}
|
||||
export interface CharacterUnicodePropertyCharacterSet
|
||||
extends BaseUnicodePropertyCharacterSet {
|
||||
strings: false;
|
||||
value: string | null;
|
||||
negate: boolean;
|
||||
}
|
||||
/** StringsUnicodePropertyCharacterSet is Unicode property escape with property of strings. */
|
||||
export interface StringsUnicodePropertyCharacterSet
|
||||
extends BaseUnicodePropertyCharacterSet {
|
||||
strings: true;
|
||||
value: null;
|
||||
negate: false;
|
||||
}
|
||||
/**
|
||||
* The expression character class.
|
||||
* E.g. `[a--b]`, `[a&&b]`,`[^a--b]`, `[^a&&b]`
|
||||
*/
|
||||
export interface ExpressionCharacterClass extends NodeBase {
|
||||
type: "ExpressionCharacterClass";
|
||||
parent:
|
||||
| Alternative
|
||||
| ExpressionCharacterClass
|
||||
| Quantifier
|
||||
| UnicodeSetsCharacterClass;
|
||||
negate: boolean;
|
||||
expression: ClassIntersection | ClassSubtraction;
|
||||
}
|
||||
export type ClassSetOperand =
|
||||
| Character
|
||||
| ClassStringDisjunction
|
||||
| EscapeCharacterSet
|
||||
| ExpressionCharacterClass
|
||||
| UnicodePropertyCharacterSet
|
||||
| UnicodeSetsCharacterClass;
|
||||
/**
|
||||
* The character class intersection.
|
||||
* E.g. `a&&b`
|
||||
*/
|
||||
export interface ClassIntersection extends NodeBase {
|
||||
type: "ClassIntersection";
|
||||
parent: ClassIntersection | ExpressionCharacterClass;
|
||||
left: ClassIntersection | ClassSetOperand;
|
||||
right: ClassSetOperand;
|
||||
}
|
||||
/**
|
||||
* The character class subtraction.
|
||||
* E.g. `a--b`
|
||||
*/
|
||||
export interface ClassSubtraction extends NodeBase {
|
||||
type: "ClassSubtraction";
|
||||
parent: ClassSubtraction | ExpressionCharacterClass;
|
||||
left: ClassSetOperand | ClassSubtraction;
|
||||
right: ClassSetOperand;
|
||||
}
|
||||
/**
|
||||
* The character class string disjunction.
|
||||
* E.g. `\q{a|b}`
|
||||
*/
|
||||
export interface ClassStringDisjunction extends NodeBase {
|
||||
type: "ClassStringDisjunction";
|
||||
parent: ClassIntersection | ClassSubtraction | UnicodeSetsCharacterClass;
|
||||
alternatives: StringAlternative[];
|
||||
}
|
||||
/** StringAlternative is only used for `\q{alt}`({@link ClassStringDisjunction}). */
|
||||
export interface StringAlternative extends NodeBase {
|
||||
type: "StringAlternative";
|
||||
parent: ClassStringDisjunction;
|
||||
elements: Character[];
|
||||
}
|
||||
/**
|
||||
* The character.
|
||||
* This includes escape sequences which mean a character.
|
||||
@@ -272,7 +395,14 @@ declare module "@eslint-community/regexpp/ast" {
|
||||
*/
|
||||
export interface Character extends NodeBase {
|
||||
type: "Character";
|
||||
parent: Alternative | CharacterClass | CharacterClassRange | Quantifier;
|
||||
parent:
|
||||
| Alternative
|
||||
| CharacterClass
|
||||
| CharacterClassRange
|
||||
| ClassIntersection
|
||||
| ClassSubtraction
|
||||
| Quantifier
|
||||
| StringAlternative;
|
||||
value: number;
|
||||
}
|
||||
/**
|
||||
@@ -298,7 +428,9 @@ declare module "@eslint-community/regexpp/ast" {
|
||||
multiline: boolean;
|
||||
sticky: boolean;
|
||||
unicode: boolean;
|
||||
unicodeSets: boolean;
|
||||
}
|
||||
export {};
|
||||
}
|
||||
|
||||
declare module "@eslint-community/regexpp/parser" {
|
||||
@@ -318,13 +450,14 @@ declare module "@eslint-community/regexpp/parser" {
|
||||
*/
|
||||
strict?: boolean;
|
||||
/**
|
||||
* ECMAScript version. Default is `2023`.
|
||||
* ECMAScript version. Default is `2024`.
|
||||
* - `2015` added `u` and `y` flags.
|
||||
* - `2018` added `s` flag, Named Capturing Group, Lookbehind Assertion,
|
||||
* and Unicode Property Escape.
|
||||
* - `2019`, `2020`, and `2021` added more valid Unicode Property Escapes.
|
||||
* - `2022` added `d` flag.
|
||||
* - `2023` added more valid Unicode Property Escapes.
|
||||
* - `2024` added `v` flag.
|
||||
*/
|
||||
ecmaVersion?: EcmaVersion;
|
||||
}
|
||||
@@ -356,6 +489,25 @@ declare module "@eslint-community/regexpp/parser" {
|
||||
* @param source The source code to parse.
|
||||
* @param start The start index in the source code.
|
||||
* @param end The end index in the source code.
|
||||
* @param flags The flags.
|
||||
* @returns The AST of the given pattern.
|
||||
*/
|
||||
parsePattern(
|
||||
source: string,
|
||||
start?: number,
|
||||
end?: number,
|
||||
flags?: {
|
||||
unicode?: boolean;
|
||||
unicodeSets?: boolean;
|
||||
}
|
||||
): Pattern;
|
||||
/**
|
||||
* @deprecated Backward compatibility
|
||||
* Use object `flags` instead of boolean `uFlag`.
|
||||
*
|
||||
* @param source The source code to parse.
|
||||
* @param start The start index in the source code.
|
||||
* @param end The end index in the source code.
|
||||
* @param uFlag The flag to set unicode mode.
|
||||
* @returns The AST of the given pattern.
|
||||
*/
|
||||
@@ -370,6 +522,12 @@ declare module "@eslint-community/regexpp/parser" {
|
||||
|
||||
declare module "@eslint-community/regexpp/validator" {
|
||||
import type { EcmaVersion } from "@eslint-community/regexpp/ecma-versions";
|
||||
export type RegExpValidatorSourceContext = {
|
||||
readonly source: string;
|
||||
readonly start: number;
|
||||
readonly end: number;
|
||||
readonly kind: "flags" | "literal" | "pattern";
|
||||
};
|
||||
export namespace RegExpValidator {
|
||||
/**
|
||||
* The options for RegExpValidator construction.
|
||||
@@ -380,13 +538,14 @@ declare module "@eslint-community/regexpp/validator" {
|
||||
*/
|
||||
strict?: boolean;
|
||||
/**
|
||||
* ECMAScript version. Default is `2023`.
|
||||
* ECMAScript version. Default is `2024`.
|
||||
* - `2015` added `u` and `y` flags.
|
||||
* - `2018` added `s` flag, Named Capturing Group, Lookbehind Assertion,
|
||||
* and Unicode Property Escape.
|
||||
* - `2019`, `2020`, and `2021` added more valid Unicode Property Escapes.
|
||||
* - `2022` added `d` flag.
|
||||
* - `2023` added more valid Unicode Property Escapes.
|
||||
* - `2024` added `v` flag.
|
||||
*/
|
||||
ecmaVersion?: EcmaVersion;
|
||||
/**
|
||||
@@ -411,6 +570,7 @@ declare module "@eslint-community/regexpp/validator" {
|
||||
* @param flags.sticky `y` flag.
|
||||
* @param flags.dotAll `s` flag.
|
||||
* @param flags.hasIndices `d` flag.
|
||||
* @param flags.unicodeSets `v` flag.
|
||||
*/
|
||||
onRegExpFlags?: (
|
||||
start: number,
|
||||
@@ -423,6 +583,7 @@ declare module "@eslint-community/regexpp/validator" {
|
||||
sticky: boolean;
|
||||
dotAll: boolean;
|
||||
hasIndices: boolean;
|
||||
unicodeSets: boolean;
|
||||
}
|
||||
) => void;
|
||||
/**
|
||||
@@ -604,6 +765,7 @@ declare module "@eslint-community/regexpp/validator" {
|
||||
* @param key The property name.
|
||||
* @param value The property value.
|
||||
* @param negate The flag which represents that the character set is negative.
|
||||
* @param strings If true, the given property is property of strings.
|
||||
*/
|
||||
onUnicodePropertyCharacterSet?: (
|
||||
start: number,
|
||||
@@ -611,7 +773,8 @@ declare module "@eslint-community/regexpp/validator" {
|
||||
kind: "property",
|
||||
key: string,
|
||||
value: string | null,
|
||||
negate: boolean
|
||||
negate: boolean,
|
||||
strings: boolean
|
||||
) => void;
|
||||
/**
|
||||
* A function that is called when the validator found a character.
|
||||
@@ -635,8 +798,13 @@ declare module "@eslint-community/regexpp/validator" {
|
||||
* A function that is called when the validator entered a character class.
|
||||
* @param start The 0-based index of the first character.
|
||||
* @param negate The flag which represents that the character class is negative.
|
||||
* @param unicodeSets `true` if unicodeSets mode.
|
||||
*/
|
||||
onCharacterClassEnter?: (start: number, negate: boolean) => void;
|
||||
onCharacterClassEnter?: (
|
||||
start: number,
|
||||
negate: boolean,
|
||||
unicodeSets: boolean
|
||||
) => void;
|
||||
/**
|
||||
* A function that is called when the validator left a character class.
|
||||
* @param start The 0-based index of the first character.
|
||||
@@ -661,6 +829,46 @@ declare module "@eslint-community/regexpp/validator" {
|
||||
min: number,
|
||||
max: number
|
||||
) => void;
|
||||
/**
|
||||
* A function that is called when the validator found a class intersection.
|
||||
* @param start The 0-based index of the first character.
|
||||
* @param end The next 0-based index of the last character.
|
||||
*/
|
||||
onClassIntersection?: (start: number, end: number) => void;
|
||||
/**
|
||||
* A function that is called when the validator found a class subtraction.
|
||||
* @param start The 0-based index of the first character.
|
||||
* @param end The next 0-based index of the last character.
|
||||
*/
|
||||
onClassSubtraction?: (start: number, end: number) => void;
|
||||
/**
|
||||
* A function that is called when the validator entered a class string disjunction.
|
||||
* @param start The 0-based index of the first character.
|
||||
*/
|
||||
onClassStringDisjunctionEnter?: (start: number) => void;
|
||||
/**
|
||||
* A function that is called when the validator left a class string disjunction.
|
||||
* @param start The 0-based index of the first character.
|
||||
* @param end The next 0-based index of the last character.
|
||||
*/
|
||||
onClassStringDisjunctionLeave?: (start: number, end: number) => void;
|
||||
/**
|
||||
* A function that is called when the validator entered a string alternative.
|
||||
* @param start The 0-based index of the first character.
|
||||
* @param index The 0-based index of alternatives in a disjunction.
|
||||
*/
|
||||
onStringAlternativeEnter?: (start: number, index: number) => void;
|
||||
/**
|
||||
* A function that is called when the validator left a string alternative.
|
||||
* @param start The 0-based index of the first character.
|
||||
* @param end The next 0-based index of the last character.
|
||||
* @param index The 0-based index of alternatives in a disjunction.
|
||||
*/
|
||||
onStringAlternativeLeave?: (
|
||||
start: number,
|
||||
end: number,
|
||||
index: number
|
||||
) => void;
|
||||
}
|
||||
}
|
||||
/**
|
||||
@@ -691,6 +899,23 @@ declare module "@eslint-community/regexpp/validator" {
|
||||
* @param source The source code to validate.
|
||||
* @param start The start index in the source code.
|
||||
* @param end The end index in the source code.
|
||||
* @param flags The flags.
|
||||
*/
|
||||
validatePattern(
|
||||
source: string,
|
||||
start?: number,
|
||||
end?: number,
|
||||
flags?: {
|
||||
unicode?: boolean;
|
||||
unicodeSets?: boolean;
|
||||
}
|
||||
): void;
|
||||
/**
|
||||
* @deprecated Backward compatibility
|
||||
* Use object `flags` instead of boolean `uFlag`.
|
||||
* @param source The source code to validate.
|
||||
* @param start The start index in the source code.
|
||||
* @param end The end index in the source code.
|
||||
* @param uFlag The flag to set unicode mode.
|
||||
*/
|
||||
validatePattern(
|
||||
@@ -712,12 +937,17 @@ declare module "@eslint-community/regexpp/visitor" {
|
||||
CharacterClass,
|
||||
CharacterClassRange,
|
||||
CharacterSet,
|
||||
ClassIntersection,
|
||||
ClassStringDisjunction,
|
||||
ClassSubtraction,
|
||||
ExpressionCharacterClass,
|
||||
Flags,
|
||||
Group,
|
||||
Node,
|
||||
Pattern,
|
||||
Quantifier,
|
||||
RegExpLiteral,
|
||||
StringAlternative,
|
||||
} from "@eslint-community/regexpp/ast";
|
||||
/**
|
||||
* The visitor to walk on AST.
|
||||
@@ -752,6 +982,18 @@ declare module "@eslint-community/regexpp/visitor" {
|
||||
onCharacterClassRangeLeave?: (node: CharacterClassRange) => void;
|
||||
onCharacterSetEnter?: (node: CharacterSet) => void;
|
||||
onCharacterSetLeave?: (node: CharacterSet) => void;
|
||||
onClassIntersectionEnter?: (node: ClassIntersection) => void;
|
||||
onClassIntersectionLeave?: (node: ClassIntersection) => void;
|
||||
onClassStringDisjunctionEnter?: (node: ClassStringDisjunction) => void;
|
||||
onClassStringDisjunctionLeave?: (node: ClassStringDisjunction) => void;
|
||||
onClassSubtractionEnter?: (node: ClassSubtraction) => void;
|
||||
onClassSubtractionLeave?: (node: ClassSubtraction) => void;
|
||||
onExpressionCharacterClassEnter?: (
|
||||
node: ExpressionCharacterClass
|
||||
) => void;
|
||||
onExpressionCharacterClassLeave?: (
|
||||
node: ExpressionCharacterClass
|
||||
) => void;
|
||||
onFlagsEnter?: (node: Flags) => void;
|
||||
onFlagsLeave?: (node: Flags) => void;
|
||||
onGroupEnter?: (node: Group) => void;
|
||||
@@ -762,6 +1004,8 @@ declare module "@eslint-community/regexpp/visitor" {
|
||||
onQuantifierLeave?: (node: Quantifier) => void;
|
||||
onRegExpLiteralEnter?: (node: RegExpLiteral) => void;
|
||||
onRegExpLiteralLeave?: (node: RegExpLiteral) => void;
|
||||
onStringAlternativeEnter?: (node: StringAlternative) => void;
|
||||
onStringAlternativeLeave?: (node: StringAlternative) => void;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -777,5 +1021,7 @@ declare module "@eslint-community/regexpp/ecma-versions" {
|
||||
| 2020
|
||||
| 2021
|
||||
| 2022
|
||||
| 2023;
|
||||
| 2023
|
||||
| 2024;
|
||||
export const latestEcmaVersion = 2024;
|
||||
}
|
||||
|
||||
+750
-139
File diff suppressed because it is too large
Load Diff
+1
-1
File diff suppressed because one or more lines are too long
+750
-139
File diff suppressed because it is too large
Load Diff
+1
-1
File diff suppressed because one or more lines are too long
+6
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@eslint-community/regexpp",
|
||||
"version": "4.5.1",
|
||||
"version": "4.6.2",
|
||||
"description": "Regular expression parser for ECMAScript.",
|
||||
"keywords": [
|
||||
"regexp",
|
||||
@@ -53,10 +53,12 @@
|
||||
"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",
|
||||
@@ -72,6 +74,7 @@
|
||||
"@types/node": "^12.20.55",
|
||||
"dts-bundle": "^0.7.3",
|
||||
"eslint": "^8.31.0",
|
||||
"js-tokens": "^8.0.1",
|
||||
"jsdom": "^19.0.0",
|
||||
"mocha": "^9.2.2",
|
||||
"npm-run-all": "^4.1.5",
|
||||
@@ -79,6 +82,8 @@
|
||||
"rimraf": "^3.0.2",
|
||||
"rollup": "^2.79.1",
|
||||
"rollup-plugin-sourcemaps": "^0.6.3",
|
||||
"test262": "git+https://github.com/tc39/test262.git",
|
||||
"test262-stream": "^1.4.0",
|
||||
"ts-node": "^10.9.1",
|
||||
"typescript": "~5.0.2"
|
||||
},
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@eslint/eslintrc",
|
||||
"version": "2.1.0",
|
||||
"version": "2.1.1",
|
||||
"description": "The legacy ESLintRC config file format for ESLint",
|
||||
"type": "module",
|
||||
"main": "./dist/eslintrc.cjs",
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@eslint/js",
|
||||
"version": "8.44.0",
|
||||
"version": "8.46.0",
|
||||
"description": "ESLint JavaScript language implementation",
|
||||
"main": "./src/index.js",
|
||||
"scripts": {},
|
||||
|
||||
-1
@@ -172,7 +172,6 @@ module.exports = Object.freeze({
|
||||
"no-restricted-properties": "error",
|
||||
"no-restricted-syntax": "error",
|
||||
"no-return-assign": "error",
|
||||
"no-return-await": "error",
|
||||
"no-script-url": "error",
|
||||
"no-self-assign": "error",
|
||||
"no-self-compare": "error",
|
||||
|
||||
+22
-6
@@ -1,12 +1,28 @@
|
||||
# Installation
|
||||
> `npm install --save @schemastore/package`
|
||||
# Type definitions for package
|
||||
|
||||
## Installation
|
||||
|
||||
```
|
||||
npm i @schemastore/package
|
||||
yarn add @schemastore/package
|
||||
```
|
||||
|
||||
## Summary
|
||||
|
||||
# Summary
|
||||
This package contains type definitions for package.
|
||||
|
||||
## Details
|
||||
Files were exported from https://github.com/ffflorian/schemastore-updater/tree/main/schemas/package.
|
||||
## Usage
|
||||
|
||||
```ts
|
||||
import * as package from '@schemastore/package';
|
||||
```
|
||||
|
||||
## Note
|
||||
|
||||
The definitions were auto-generated by [schemastore-updater](https://github.com/ffflorian/schemastore-updater) using [`json-schema-to-typescript`](https://www.npmjs.com/package/json-schema-to-typescript).
|
||||
|
||||
## Additional Details
|
||||
* Last updated: Fri, Feb 24, 2023, 21:03:09 GMT
|
||||
|
||||
* [Schema source](https://github.com/SchemaStore/schemastore/tree/master/src/schemas/json/package)
|
||||
* Last updated: Fri, Jun 30, 2023, 21:04:02 GMT
|
||||
* Dependencies: none
|
||||
|
||||
+16
-2
@@ -15343,11 +15343,17 @@ export interface JSONSchemaForNPMPackageJsonFiles2 {
|
||||
*/
|
||||
bundleDependencies?: string[] | boolean;
|
||||
/**
|
||||
* Resolutions is used to support selective version resolutions, which lets you define custom package versions or ranges inside your dependencies. See: https://classic.yarnpkg.com/en/docs/selective-version-resolutions
|
||||
* Resolutions is used to support selective version resolutions using yarn, which lets you define custom package versions or ranges inside your dependencies. For npm, use overrides instead. See: https://classic.yarnpkg.com/en/docs/selective-version-resolutions
|
||||
*/
|
||||
resolutions?: {
|
||||
[k: string]: unknown | undefined;
|
||||
};
|
||||
/**
|
||||
* Overrides is used to support selective version overrides using npm, which lets you define custom package versions or ranges inside your dependencies. For yarn, use resolutions instead. See: https://docs.npmjs.com/cli/v9/configuring-npm/package-json#overrides
|
||||
*/
|
||||
overrides?: {
|
||||
[k: string]: unknown | undefined;
|
||||
};
|
||||
/**
|
||||
* Defines which package manager is expected to be used when working on the current project. This field is currently experimental and needs to be opted-in; see https://nodejs.org/api/corepack.html
|
||||
*/
|
||||
@@ -15450,6 +15456,10 @@ export interface PackageExportsEntryObject {
|
||||
* The module path that is resolved when no other export type matches.
|
||||
*/
|
||||
default?: PackageExportsEntry | PackageExportsFallback;
|
||||
/**
|
||||
* The module path that is resolved for TypeScript types when this specifier is imported. Should be listed before other conditions.
|
||||
*/
|
||||
types?: PackageExportsEntry | PackageExportsFallback;
|
||||
/**
|
||||
* The module path that is resolved when this environment matches the property name.
|
||||
*
|
||||
@@ -15481,6 +15491,10 @@ export interface PackageExportsEntryObject1 {
|
||||
* The module path that is resolved when no other export type matches.
|
||||
*/
|
||||
default?: PackageExportsEntry | PackageExportsFallback;
|
||||
/**
|
||||
* The module path that is resolved for TypeScript types when this specifier is imported. Should be listed before other conditions.
|
||||
*/
|
||||
types?: PackageExportsEntry | PackageExportsFallback;
|
||||
/**
|
||||
* The module path that is resolved when this environment matches the property name.
|
||||
*
|
||||
@@ -17440,7 +17454,7 @@ export interface Block {
|
||||
);
|
||||
"block-closing-brace-newline-after"?: NewlineSpaceWithIgnoreRule;
|
||||
"block-closing-brace-newline-before"?: NewlineRule;
|
||||
"block-closing-brace-space-afte"?: NewlineSpaceRule;
|
||||
"block-closing-brace-space-after"?: NewlineSpaceRule;
|
||||
"block-closing-brace-space-before"?: NewlineSpaceRule1;
|
||||
"block-no-empty"?: BooleanRule1;
|
||||
"block-no-single-line"?: BooleanRule2;
|
||||
|
||||
+3
-3
@@ -9,6 +9,6 @@
|
||||
"scripts": {},
|
||||
"typeScriptVersion": "2.2",
|
||||
"types": "index.d.ts",
|
||||
"typesPublisherContentHash": "4643ec01eaaf150d3302a3fd1e3e3cb7329b192ebec86d0660777a13c741c6b7",
|
||||
"version": "0.0.8"
|
||||
}
|
||||
"typesPublisherContentHash": "706ba9014643c594ac6ab92494abf9e4a452b9fe9ab42b75d159300ddf0ee64e",
|
||||
"version": "0.0.10"
|
||||
}
|
||||
|
||||
+2
@@ -19,6 +19,8 @@ module.exports = {
|
||||
'brace-style': 'off',
|
||||
'@typescript-eslint/brace-style': 'error',
|
||||
'@typescript-eslint/class-literal-property-style': 'error',
|
||||
'class-methods-use-this': 'off',
|
||||
'@typescript-eslint/class-methods-use-this': 'error',
|
||||
'comma-dangle': 'off',
|
||||
'@typescript-eslint/comma-dangle': 'error',
|
||||
'comma-spacing': 'off',
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"file":"all.js","sourceRoot":"","sources":["../../src/configs/all.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"all.js","sourceRoot":"","sources":["../../src/configs/all.ts"],"names":[],"mappings":"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"}
|
||||
Generated
Vendored
+217
@@ -0,0 +1,217 @@
|
||||
"use strict";
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
var desc = Object.getOwnPropertyDescriptor(m, k);
|
||||
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
||||
desc = { enumerable: true, get: function() { return m[k]; } };
|
||||
}
|
||||
Object.defineProperty(o, k2, desc);
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
}));
|
||||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||
}) : function(o, v) {
|
||||
o["default"] = v;
|
||||
});
|
||||
var __importStar = (this && this.__importStar) || function (mod) {
|
||||
if (mod && mod.__esModule) return mod;
|
||||
var result = {};
|
||||
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||
__setModuleDefault(result, mod);
|
||||
return result;
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const utils_1 = require("@typescript-eslint/utils");
|
||||
const util = __importStar(require("../util"));
|
||||
exports.default = util.createRule({
|
||||
name: 'class-methods-use-this',
|
||||
meta: {
|
||||
type: 'suggestion',
|
||||
docs: {
|
||||
description: 'Enforce that class methods utilize `this`',
|
||||
extendsBaseRule: true,
|
||||
requiresTypeChecking: false,
|
||||
},
|
||||
fixable: 'code',
|
||||
hasSuggestions: false,
|
||||
schema: [
|
||||
{
|
||||
type: 'object',
|
||||
properties: {
|
||||
exceptMethods: {
|
||||
type: 'array',
|
||||
description: 'Allows specified method names to be ignored with this rule',
|
||||
items: {
|
||||
type: 'string',
|
||||
},
|
||||
},
|
||||
enforceForClassFields: {
|
||||
type: 'boolean',
|
||||
description: 'Enforces that functions used as instance field initializers utilize `this`',
|
||||
default: true,
|
||||
},
|
||||
ignoreOverrideMethods: {
|
||||
type: 'boolean',
|
||||
description: 'Ingore members marked with the `override` modifier',
|
||||
},
|
||||
ignoreClassesThatImplementAnInterface: {
|
||||
type: 'boolean',
|
||||
description: 'Ignore classes that specifically implement some interface',
|
||||
},
|
||||
},
|
||||
additionalProperties: false,
|
||||
},
|
||||
],
|
||||
messages: {
|
||||
missingThis: "Expected 'this' to be used by class {{name}}.",
|
||||
},
|
||||
},
|
||||
defaultOptions: [
|
||||
{
|
||||
enforceForClassFields: true,
|
||||
exceptMethods: [],
|
||||
ignoreClassesThatImplementAnInterface: false,
|
||||
ignoreOverrideMethods: false,
|
||||
},
|
||||
],
|
||||
create(context, [{ enforceForClassFields, exceptMethods: exceptMethodsRaw, ignoreClassesThatImplementAnInterface, ignoreOverrideMethods, },]) {
|
||||
const exceptMethods = new Set(exceptMethodsRaw);
|
||||
let stack;
|
||||
const sourceCode = context.getSourceCode();
|
||||
function pushContext(member) {
|
||||
if (member?.parent.type === utils_1.AST_NODE_TYPES.ClassBody) {
|
||||
stack = {
|
||||
member,
|
||||
class: member.parent.parent,
|
||||
usesThis: false,
|
||||
parent: stack,
|
||||
};
|
||||
}
|
||||
else {
|
||||
stack = {
|
||||
member: null,
|
||||
class: null,
|
||||
usesThis: false,
|
||||
parent: stack,
|
||||
};
|
||||
}
|
||||
}
|
||||
function enterFunction(node) {
|
||||
if (node.parent.type === utils_1.AST_NODE_TYPES.MethodDefinition ||
|
||||
node.parent.type === utils_1.AST_NODE_TYPES.PropertyDefinition) {
|
||||
pushContext(node.parent);
|
||||
}
|
||||
else {
|
||||
pushContext();
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Pop `this` used flag from the stack.
|
||||
*/
|
||||
function popContext() {
|
||||
const oldStack = stack;
|
||||
stack = stack?.parent;
|
||||
return oldStack;
|
||||
}
|
||||
/**
|
||||
* Check if the node is an instance method not excluded by config
|
||||
*/
|
||||
function isIncludedInstanceMethod(node) {
|
||||
if (node.static ||
|
||||
(node.type === utils_1.AST_NODE_TYPES.MethodDefinition &&
|
||||
node.kind === 'constructor') ||
|
||||
(node.type === utils_1.AST_NODE_TYPES.PropertyDefinition &&
|
||||
!enforceForClassFields)) {
|
||||
return false;
|
||||
}
|
||||
if (node.computed || exceptMethods.size === 0) {
|
||||
return true;
|
||||
}
|
||||
const hashIfNeeded = node.key.type === utils_1.AST_NODE_TYPES.PrivateIdentifier ? '#' : '';
|
||||
const name = node.key.type === utils_1.AST_NODE_TYPES.Literal
|
||||
? util.getStaticStringValue(node.key)
|
||||
: node.key.name || '';
|
||||
return !exceptMethods.has(hashIfNeeded + (name ?? ''));
|
||||
}
|
||||
/**
|
||||
* Checks if we are leaving a function that is a method, and reports if 'this' has not been used.
|
||||
* Static methods and the constructor are exempt.
|
||||
* Then pops the context off the stack.
|
||||
*/
|
||||
function exitFunction(node) {
|
||||
const stackContext = popContext();
|
||||
if (stackContext?.member == null ||
|
||||
stackContext.class == null ||
|
||||
stackContext.usesThis ||
|
||||
(ignoreOverrideMethods && stackContext.member.override) ||
|
||||
(ignoreClassesThatImplementAnInterface &&
|
||||
stackContext.class.implements != null)) {
|
||||
return;
|
||||
}
|
||||
if (isIncludedInstanceMethod(stackContext.member)) {
|
||||
context.report({
|
||||
node,
|
||||
loc: util.getFunctionHeadLoc(node, sourceCode),
|
||||
messageId: 'missingThis',
|
||||
data: {
|
||||
name: util.getFunctionNameWithKind(node),
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
return {
|
||||
// function declarations have their own `this` context
|
||||
FunctionDeclaration() {
|
||||
pushContext();
|
||||
},
|
||||
'FunctionDeclaration:exit'() {
|
||||
popContext();
|
||||
},
|
||||
FunctionExpression(node) {
|
||||
enterFunction(node);
|
||||
},
|
||||
'FunctionExpression:exit'(node) {
|
||||
exitFunction(node);
|
||||
},
|
||||
...(enforceForClassFields
|
||||
? {
|
||||
'PropertyDefinition > ArrowFunctionExpression.value'(node) {
|
||||
enterFunction(node);
|
||||
},
|
||||
'PropertyDefinition > ArrowFunctionExpression.value:exit'(node) {
|
||||
exitFunction(node);
|
||||
},
|
||||
}
|
||||
: {}),
|
||||
/*
|
||||
* Class field value are implicit functions.
|
||||
*/
|
||||
'PropertyDefinition > *.key:exit'() {
|
||||
pushContext();
|
||||
},
|
||||
'PropertyDefinition:exit'() {
|
||||
popContext();
|
||||
},
|
||||
/*
|
||||
* Class static blocks are implicit functions. They aren't required to use `this`,
|
||||
* but we have to push context so that it captures any use of `this` in the static block
|
||||
* separately from enclosing contexts, because static blocks have their own `this` and it
|
||||
* shouldn't count as used `this` in enclosing contexts.
|
||||
*/
|
||||
StaticBlock() {
|
||||
pushContext();
|
||||
},
|
||||
'StaticBlock:exit'() {
|
||||
popContext();
|
||||
},
|
||||
'ThisExpression, Super'() {
|
||||
if (stack) {
|
||||
stack.usesThis = true;
|
||||
}
|
||||
},
|
||||
};
|
||||
},
|
||||
});
|
||||
//# sourceMappingURL=class-methods-use-this.js.map
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"class-methods-use-this.js","sourceRoot":"","sources":["../../src/rules/class-methods-use-this.ts"],"names":[],"mappings":"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"}
|
||||
+2
@@ -12,6 +12,7 @@ const ban_types_1 = __importDefault(require("./ban-types"));
|
||||
const block_spacing_1 = __importDefault(require("./block-spacing"));
|
||||
const brace_style_1 = __importDefault(require("./brace-style"));
|
||||
const class_literal_property_style_1 = __importDefault(require("./class-literal-property-style"));
|
||||
const class_methods_use_this_1 = __importDefault(require("./class-methods-use-this"));
|
||||
const comma_dangle_1 = __importDefault(require("./comma-dangle"));
|
||||
const comma_spacing_1 = __importDefault(require("./comma-spacing"));
|
||||
const consistent_generic_constructors_1 = __importDefault(require("./consistent-generic-constructors"));
|
||||
@@ -145,6 +146,7 @@ exports.default = {
|
||||
'block-spacing': block_spacing_1.default,
|
||||
'brace-style': brace_style_1.default,
|
||||
'class-literal-property-style': class_literal_property_style_1.default,
|
||||
'class-methods-use-this': class_methods_use_this_1.default,
|
||||
'comma-dangle': comma_dangle_1.default,
|
||||
'comma-spacing': comma_spacing_1.default,
|
||||
'consistent-generic-constructors': consistent_generic_constructors_1.default,
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+3
@@ -615,6 +615,9 @@ exports.default = util.createRule({
|
||||
return isCorrectlySorted;
|
||||
}
|
||||
function naturalOutOfOrder(name, previousName, order) {
|
||||
if (name === previousName) {
|
||||
return false;
|
||||
}
|
||||
switch (order) {
|
||||
case 'alphabetically':
|
||||
return name < previousName;
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
Generated
Vendored
+1
-1
@@ -69,7 +69,7 @@ exports.default = util.createRule({
|
||||
return typeChecker.getTypeAtLocation(parserServices.esTreeNodeToTSNodeMap.get(node));
|
||||
}
|
||||
return {
|
||||
'BinaryExpression[operator=/=|<|>/]'(node) {
|
||||
'BinaryExpression[operator=/^[<>!=]?={0,2}$/]'(node) {
|
||||
const left = getTypeFromNode(node.left);
|
||||
const right = getTypeFromNode(node.right);
|
||||
// Allow comparisons that don't have anything to do with enums:
|
||||
|
||||
Generated
Vendored
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"file":"no-unsafe-enum-comparison.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-enum-comparison.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"no-unsafe-enum-comparison.js","sourceRoot":"","sources":["../../src/rules/no-unsafe-enum-comparison.ts"],"names":[],"mappings":"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"}
|
||||
Generated
Vendored
+3
-1
@@ -250,7 +250,9 @@ exports.default = util.createRule({
|
||||
]
|
||||
.filter((flag) => flag !== undefined)
|
||||
.reduce((previous, flag) => previous | flag, 0);
|
||||
if (type.types.some(t => tsutils.isTypeFlagSet(t, ignorableFlags))) {
|
||||
if (type.flags !== ts.TypeFlags.Null &&
|
||||
type.flags !== ts.TypeFlags.Undefined &&
|
||||
type.types.some(t => tsutils.isTypeFlagSet(t, ignorableFlags))) {
|
||||
return;
|
||||
}
|
||||
const barBarOperator = util.nullThrows(sourceCode.getTokenAfter(node.left, token => token.type === utils_1.AST_TOKEN_TYPES.Punctuator &&
|
||||
|
||||
Generated
Vendored
+1
-1
File diff suppressed because one or more lines are too long
+146
-36
@@ -1,52 +1,162 @@
|
||||
"use strict";
|
||||
// adapted from https://github.com/eslint/eslint/blob/5bdaae205c3a0089ea338b382df59e21d5b06436/lib/rules/utils/ast-utils.js#L1668-L1787
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.getFunctionHeadLoc = void 0;
|
||||
const utils_1 = require("@typescript-eslint/utils");
|
||||
const astUtils_1 = require("./astUtils");
|
||||
/**
|
||||
* Creates a report location for the given function.
|
||||
* The location only encompasses the "start" of the function, and not the body
|
||||
* Gets the `(` token of the given function node.
|
||||
* @param node The function node to get.
|
||||
* @param sourceCode The source code object to get tokens.
|
||||
* @returns `(` token.
|
||||
*/
|
||||
function getOpeningParenOfParams(node, sourceCode) {
|
||||
// If the node is an arrow function and doesn't have parens, this returns the identifier of the first param.
|
||||
if (node.type === utils_1.AST_NODE_TYPES.ArrowFunctionExpression &&
|
||||
node.params.length === 1) {
|
||||
const argToken = utils_1.ESLintUtils.nullThrows(sourceCode.getFirstToken(node.params[0]), utils_1.ESLintUtils.NullThrowsReasons.MissingToken('parameter', 'arrow function'));
|
||||
const maybeParenToken = sourceCode.getTokenBefore(argToken);
|
||||
return maybeParenToken && (0, astUtils_1.isOpeningParenToken)(maybeParenToken)
|
||||
? maybeParenToken
|
||||
: argToken;
|
||||
}
|
||||
// Otherwise, returns paren.
|
||||
return node.id != null
|
||||
? utils_1.ESLintUtils.nullThrows(sourceCode.getTokenAfter(node.id, astUtils_1.isOpeningParenToken), utils_1.ESLintUtils.NullThrowsReasons.MissingToken('id', 'function'))
|
||||
: utils_1.ESLintUtils.nullThrows(sourceCode.getFirstToken(node, astUtils_1.isOpeningParenToken), utils_1.ESLintUtils.NullThrowsReasons.MissingToken('opening parenthesis', 'function'));
|
||||
}
|
||||
/**
|
||||
* Gets the location of the given function node for reporting.
|
||||
*
|
||||
* eg.
|
||||
*
|
||||
* ```
|
||||
* function foo(args) {}
|
||||
* ^^^^^^^^^^^^^^^^^^
|
||||
*
|
||||
* get y(args) {}
|
||||
* ^^^^^^^^^^^
|
||||
*
|
||||
* const x = (args) => {}
|
||||
* ^^^^^^^^^
|
||||
* ```
|
||||
* - `function foo() {}`
|
||||
* ^^^^^^^^^^^^
|
||||
* - `(function foo() {})`
|
||||
* ^^^^^^^^^^^^
|
||||
* - `(function() {})`
|
||||
* ^^^^^^^^
|
||||
* - `function* foo() {}`
|
||||
* ^^^^^^^^^^^^^
|
||||
* - `(function* foo() {})`
|
||||
* ^^^^^^^^^^^^^
|
||||
* - `(function*() {})`
|
||||
* ^^^^^^^^^
|
||||
* - `() => {}`
|
||||
* ^^
|
||||
* - `async () => {}`
|
||||
* ^^
|
||||
* - `({ foo: function foo() {} })`
|
||||
* ^^^^^^^^^^^^^^^^^
|
||||
* - `({ foo: function() {} })`
|
||||
* ^^^^^^^^^^^^^
|
||||
* - `({ ['foo']: function() {} })`
|
||||
* ^^^^^^^^^^^^^^^^^
|
||||
* - `({ [foo]: function() {} })`
|
||||
* ^^^^^^^^^^^^^^^
|
||||
* - `({ foo() {} })`
|
||||
* ^^^
|
||||
* - `({ foo: function* foo() {} })`
|
||||
* ^^^^^^^^^^^^^^^^^^
|
||||
* - `({ foo: function*() {} })`
|
||||
* ^^^^^^^^^^^^^^
|
||||
* - `({ ['foo']: function*() {} })`
|
||||
* ^^^^^^^^^^^^^^^^^^
|
||||
* - `({ [foo]: function*() {} })`
|
||||
* ^^^^^^^^^^^^^^^^
|
||||
* - `({ *foo() {} })`
|
||||
* ^^^^
|
||||
* - `({ foo: async function foo() {} })`
|
||||
* ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
* - `({ foo: async function() {} })`
|
||||
* ^^^^^^^^^^^^^^^^^^^
|
||||
* - `({ ['foo']: async function() {} })`
|
||||
* ^^^^^^^^^^^^^^^^^^^^^^^
|
||||
* - `({ [foo]: async function() {} })`
|
||||
* ^^^^^^^^^^^^^^^^^^^^^
|
||||
* - `({ async foo() {} })`
|
||||
* ^^^^^^^^^
|
||||
* - `({ get foo() {} })`
|
||||
* ^^^^^^^
|
||||
* - `({ set foo(a) {} })`
|
||||
* ^^^^^^^
|
||||
* - `class A { constructor() {} }`
|
||||
* ^^^^^^^^^^^
|
||||
* - `class A { foo() {} }`
|
||||
* ^^^
|
||||
* - `class A { *foo() {} }`
|
||||
* ^^^^
|
||||
* - `class A { async foo() {} }`
|
||||
* ^^^^^^^^^
|
||||
* - `class A { ['foo']() {} }`
|
||||
* ^^^^^^^
|
||||
* - `class A { *['foo']() {} }`
|
||||
* ^^^^^^^^
|
||||
* - `class A { async ['foo']() {} }`
|
||||
* ^^^^^^^^^^^^^
|
||||
* - `class A { [foo]() {} }`
|
||||
* ^^^^^
|
||||
* - `class A { *[foo]() {} }`
|
||||
* ^^^^^^
|
||||
* - `class A { async [foo]() {} }`
|
||||
* ^^^^^^^^^^^
|
||||
* - `class A { get foo() {} }`
|
||||
* ^^^^^^^
|
||||
* - `class A { set foo(a) {} }`
|
||||
* ^^^^^^^
|
||||
* - `class A { static foo() {} }`
|
||||
* ^^^^^^^^^^
|
||||
* - `class A { static *foo() {} }`
|
||||
* ^^^^^^^^^^^
|
||||
* - `class A { static async foo() {} }`
|
||||
* ^^^^^^^^^^^^^^^^
|
||||
* - `class A { static get foo() {} }`
|
||||
* ^^^^^^^^^^^^^^
|
||||
* - `class A { static set foo(a) {} }`
|
||||
* ^^^^^^^^^^^^^^
|
||||
* - `class A { foo = function() {} }`
|
||||
* ^^^^^^^^^^^^^^
|
||||
* - `class A { static foo = function() {} }`
|
||||
* ^^^^^^^^^^^^^^^^^^^^^
|
||||
* - `class A { foo = (a, b) => {} }`
|
||||
* ^^^^^^
|
||||
* @param node The function node to get.
|
||||
* @param sourceCode The source code object to get tokens.
|
||||
* @returns The location of the function node for reporting.
|
||||
*/
|
||||
function getFunctionHeadLoc(node, sourceCode) {
|
||||
function getLocStart() {
|
||||
if (node.parent.type === utils_1.AST_NODE_TYPES.MethodDefinition) {
|
||||
// return the start location for class method
|
||||
if (node.parent.decorators && node.parent.decorators.length > 0) {
|
||||
// exclude decorators
|
||||
return sourceCode.getTokenAfter(node.parent.decorators[node.parent.decorators.length - 1]).loc.start;
|
||||
}
|
||||
return node.parent.loc.start;
|
||||
const parent = node.parent;
|
||||
let start = null;
|
||||
let end = null;
|
||||
if (parent.type === utils_1.AST_NODE_TYPES.MethodDefinition ||
|
||||
parent.type === utils_1.AST_NODE_TYPES.PropertyDefinition) {
|
||||
// the decorator's range is included within the member
|
||||
// however it's usually irrelevant to the member itself - so we don't want
|
||||
// to highlight it ever.
|
||||
if (parent.decorators.length > 0) {
|
||||
const lastDecorator = parent.decorators[parent.decorators.length - 1];
|
||||
const firstTokenAfterDecorator = utils_1.ESLintUtils.nullThrows(sourceCode.getTokenAfter(lastDecorator), utils_1.ESLintUtils.NullThrowsReasons.MissingToken('modifier or member name', 'class member'));
|
||||
start = firstTokenAfterDecorator.loc.start;
|
||||
}
|
||||
if (node.parent.type === utils_1.AST_NODE_TYPES.Property && node.parent.method) {
|
||||
// return the start location for object method shorthand
|
||||
return node.parent.loc.start;
|
||||
else {
|
||||
start = parent.loc.start;
|
||||
}
|
||||
// return the start location for a regular function
|
||||
return node.loc.start;
|
||||
end = getOpeningParenOfParams(node, sourceCode).loc.start;
|
||||
}
|
||||
function getLocEnd() {
|
||||
if (node.type === utils_1.AST_NODE_TYPES.ArrowFunctionExpression) {
|
||||
// find the end location for arrow function expression
|
||||
return sourceCode.getTokenBefore(node.body, token => token.type === utils_1.AST_TOKEN_TYPES.Punctuator && token.value === '=>').loc.end;
|
||||
}
|
||||
// return the end location for a regular function
|
||||
return sourceCode.getTokenBefore(node.body).loc.end;
|
||||
else if (parent.type === utils_1.AST_NODE_TYPES.Property) {
|
||||
start = parent.loc.start;
|
||||
end = getOpeningParenOfParams(node, sourceCode).loc.start;
|
||||
}
|
||||
else if (node.type === utils_1.AST_NODE_TYPES.ArrowFunctionExpression) {
|
||||
const arrowToken = utils_1.ESLintUtils.nullThrows(sourceCode.getTokenBefore(node.body, astUtils_1.isArrowToken), utils_1.ESLintUtils.NullThrowsReasons.MissingToken('arrow token', 'arrow function'));
|
||||
start = arrowToken.loc.start;
|
||||
end = arrowToken.loc.end;
|
||||
}
|
||||
else {
|
||||
start = node.loc.start;
|
||||
end = getOpeningParenOfParams(node, sourceCode).loc.start;
|
||||
}
|
||||
return {
|
||||
start: getLocStart(),
|
||||
end: getLocEnd(),
|
||||
start: Object.assign({}, start),
|
||||
end: Object.assign({}, end),
|
||||
};
|
||||
}
|
||||
exports.getFunctionHeadLoc = getFunctionHeadLoc;
|
||||
|
||||
Generated
Vendored
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"file":"getFunctionHeadLoc.js","sourceRoot":"","sources":["../../src/util/getFunctionHeadLoc.ts"],"names":[],"mappings":";;;AACA,oDAA2E;AAO3E;;;;;;;;;;;;;;;;GAgBG;AACH,SAAgB,kBAAkB,CAChC,IAAkB,EAClB,UAA+B;IAE/B,SAAS,WAAW;QAClB,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,sBAAc,CAAC,gBAAgB,EAAE;YACxD,6CAA6C;YAE7C,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;gBAC/D,qBAAqB;gBACrB,OAAO,UAAU,CAAC,aAAa,CAC7B,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC,CACzD,CAAC,GAAG,CAAC,KAAK,CAAC;aACd;YAED,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;SAC9B;QAED,IAAI,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,sBAAc,CAAC,QAAQ,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE;YACtE,wDAAwD;YACxD,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;SAC9B;QAED,mDAAmD;QACnD,OAAO,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC;IACxB,CAAC;IAED,SAAS,SAAS;QAChB,IAAI,IAAI,CAAC,IAAI,KAAK,sBAAc,CAAC,uBAAuB,EAAE;YACxD,sDAAsD;YACtD,OAAO,UAAU,CAAC,cAAc,CAC9B,IAAI,CAAC,IAAI,EACT,KAAK,CAAC,EAAE,CACN,KAAK,CAAC,IAAI,KAAK,uBAAe,CAAC,UAAU,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CACnE,CAAC,GAAG,CAAC,GAAG,CAAC;SACZ;QAED,iDAAiD;QACjD,OAAO,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAE,CAAC,GAAG,CAAC,GAAG,CAAC;IACvD,CAAC;IAED,OAAO;QACL,KAAK,EAAE,WAAW,EAAE;QACpB,GAAG,EAAE,SAAS,EAAE;KACjB,CAAC;AACJ,CAAC;AA7CD,gDA6CC"}
|
||||
{"version":3,"file":"getFunctionHeadLoc.js","sourceRoot":"","sources":["../../src/util/getFunctionHeadLoc.ts"],"names":[],"mappings":"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"}
|
||||
+46
@@ -0,0 +1,46 @@
|
||||
"use strict";
|
||||
// adapted from https://github.com/eslint/eslint/blob/5bdaae205c3a0089ea338b382df59e21d5b06436/lib/rules/utils/ast-utils.js#L191-L230
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.getStaticStringValue = void 0;
|
||||
const utils_1 = require("@typescript-eslint/utils");
|
||||
const isNullLiteral_1 = require("./isNullLiteral");
|
||||
/**
|
||||
* Returns the result of the string conversion applied to the evaluated value of the given expression node,
|
||||
* if it can be determined statically.
|
||||
*
|
||||
* This function returns a `string` value for all `Literal` nodes and simple `TemplateLiteral` nodes only.
|
||||
* In all other cases, this function returns `null`.
|
||||
* @param node Expression node.
|
||||
* @returns String value if it can be determined. Otherwise, `null`.
|
||||
*/
|
||||
function getStaticStringValue(node) {
|
||||
switch (node.type) {
|
||||
case utils_1.AST_NODE_TYPES.Literal:
|
||||
// eslint-disable-next-line eqeqeq -- intentional strict comparison for literal value
|
||||
if (node.value === null) {
|
||||
if ((0, isNullLiteral_1.isNullLiteral)(node)) {
|
||||
return String(node.value); // "null"
|
||||
}
|
||||
if ('regex' in node) {
|
||||
return `/${node.regex.pattern}/${node.regex.flags}`;
|
||||
}
|
||||
if ('bigint' in node) {
|
||||
return node.bigint;
|
||||
}
|
||||
// Otherwise, this is an unknown literal. The function will return null.
|
||||
}
|
||||
else {
|
||||
return String(node.value);
|
||||
}
|
||||
break;
|
||||
case utils_1.AST_NODE_TYPES.TemplateLiteral:
|
||||
if (node.expressions.length === 0 && node.quasis.length === 1) {
|
||||
return node.quasis[0].value.cooked;
|
||||
}
|
||||
break;
|
||||
// no default
|
||||
}
|
||||
return null;
|
||||
}
|
||||
exports.getStaticStringValue = getStaticStringValue;
|
||||
//# sourceMappingURL=getStaticStringValue.js.map
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"file":"getStaticStringValue.js","sourceRoot":"","sources":["../../src/util/getStaticStringValue.ts"],"names":[],"mappings":";AAAA,qIAAqI;;;AAGrI,oDAA0D;AAE1D,mDAAgD;AAEhD;;;;;;;;GAQG;AACH,SAAgB,oBAAoB,CAAC,IAAmB;IACtD,QAAQ,IAAI,CAAC,IAAI,EAAE;QACjB,KAAK,sBAAc,CAAC,OAAO;YACzB,qFAAqF;YACrF,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;gBACvB,IAAI,IAAA,6BAAa,EAAC,IAAI,CAAC,EAAE;oBACvB,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;iBACrC;gBACD,IAAI,OAAO,IAAI,IAAI,EAAE;oBACnB,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;iBACrD;gBAED,IAAI,QAAQ,IAAI,IAAI,EAAE;oBACpB,OAAO,IAAI,CAAC,MAAM,CAAC;iBACpB;gBAED,wEAAwE;aACzE;iBAAM;gBACL,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aAC3B;YACD,MAAM;QAER,KAAK,sBAAc,CAAC,eAAe;YACjC,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;gBAC7D,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;aACpC;YACD,MAAM;QAER,aAAa;KACd;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAhCD,oDAgCC"}
|
||||
+1
@@ -21,6 +21,7 @@ __exportStar(require("./collectUnusedVariables"), exports);
|
||||
__exportStar(require("./createRule"), exports);
|
||||
__exportStar(require("./getFunctionHeadLoc"), exports);
|
||||
__exportStar(require("./getOperatorPrecedence"), exports);
|
||||
__exportStar(require("./getStaticStringValue"), exports);
|
||||
__exportStar(require("./getStringLength"), exports);
|
||||
__exportStar(require("./getThisExpression"), exports);
|
||||
__exportStar(require("./getWrappingFixer"), exports);
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oDAAuD;AAEvD,6CAA2B;AAC3B,2DAAyC;AACzC,+CAA6B;AAC7B,uDAAqC;AACrC,0DAAwC;AACxC,oDAAkC;AAClC,sDAAoC;AACpC,qDAAmC;AACnC,gDAA8B;AAC9B,kDAAgC;AAChC,0DAAwC;AACxC,yCAAuB;AACvB,oDAAkC;AAElC,sEAAsE;AACtE,gEAA8C;AAC9C,MAAM,EACJ,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,GAClB,GAAG,mBAAW,CAAC;AAMd,oCAAY;AACZ,8BAAS;AACT,4CAAgB;AAChB,8CAAiB;AACjB,gCAAU;AAGV,8CAAiB"}
|
||||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/util/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,oDAAuD;AAEvD,6CAA2B;AAC3B,2DAAyC;AACzC,+CAA6B;AAC7B,uDAAqC;AACrC,0DAAwC;AACxC,yDAAuC;AACvC,oDAAkC;AAClC,sDAAoC;AACpC,qDAAmC;AACnC,gDAA8B;AAC9B,kDAAgC;AAChC,0DAAwC;AACxC,yCAAuB;AACvB,oDAAkC;AAElC,sEAAsE;AACtE,gEAA8C;AAC9C,MAAM,EACJ,YAAY,EACZ,SAAS,EACT,gBAAgB,EAChB,iBAAiB,EACjB,UAAU,EACV,iBAAiB,GAClB,GAAG,mBAAW,CAAC;AAMd,oCAAY;AACZ,8BAAS;AACT,4CAAgB;AAChB,8CAAiB;AACjB,gCAAU;AAGV,8CAAiB"}
|
||||
+5
-1
@@ -1,6 +1,10 @@
|
||||
---
|
||||
description: '<Description from rule metadata here>'
|
||||
---
|
||||
|
||||
> 🛑 This file is source code, not the primary documentation location! 🛑
|
||||
>
|
||||
> See **https://typescript-eslint.io/rules/your-rule-name** for documentation.
|
||||
> See **https://typescript-eslint.io/rules/RULE_NAME_REPLACEME** for documentation.
|
||||
|
||||
## Examples
|
||||
|
||||
|
||||
Generated
Vendored
+57
@@ -0,0 +1,57 @@
|
||||
---
|
||||
description: 'Enforce that class methods utilize `this`.'
|
||||
---
|
||||
|
||||
> 🛑 This file is source code, not the primary documentation location! 🛑
|
||||
>
|
||||
> See **https://typescript-eslint.io/rules/class-methods-use-this** for documentation.
|
||||
|
||||
## Examples
|
||||
|
||||
This rule extends the base [`eslint/class-methods-use-this`](https://eslint.org/docs/rules/class-methods-use-this) rule.
|
||||
It adds support for ignoring `override` methods or methods on classes that implement an interface.
|
||||
|
||||
## Options
|
||||
|
||||
This rule adds the following options:
|
||||
|
||||
```ts
|
||||
interface Options extends BaseClassMethodsUseThisOptions {
|
||||
ignoreOverrideMethods?: boolean;
|
||||
ignoreClassesThatImplementAnInterface?: boolean;
|
||||
}
|
||||
|
||||
const defaultOptions: Options = {
|
||||
...baseClassMethodsUseThisOptions,
|
||||
ignoreOverrideMethods: false,
|
||||
ignoreClassesThatImplementAnInterface: false,
|
||||
};
|
||||
```
|
||||
|
||||
### `ignoreOverrideMethods`
|
||||
|
||||
Makes the rule to ignores any class member explicitly marked with `override`.
|
||||
|
||||
Example of a correct code when `ignoreOverrideMethods` is set to `true`:
|
||||
|
||||
```ts
|
||||
class X {
|
||||
override method() {}
|
||||
override property = () => {};
|
||||
}
|
||||
```
|
||||
|
||||
### `ignoreClassesThatImplementAnInterface`
|
||||
|
||||
Makes the rule ignore all class members that are defined within a class that `implements` a type.
|
||||
|
||||
It's important to note that this option does not only apply to members defined in the interface as that would require type information.
|
||||
|
||||
Example of a correct code when `ignoreClassesThatImplementAnInterface` is set to `true`:
|
||||
|
||||
```ts
|
||||
class X implements Y {
|
||||
method() {}
|
||||
property = () => {};
|
||||
}
|
||||
```
|
||||
+9
-9
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@typescript-eslint/eslint-plugin",
|
||||
"version": "6.1.0",
|
||||
"version": "6.2.0",
|
||||
"description": "TypeScript plugin for ESLint",
|
||||
"files": [
|
||||
"dist",
|
||||
@@ -51,16 +51,16 @@
|
||||
"generate:breaking-changes": "yarn tsx tools/generate-breaking-changes.mts",
|
||||
"generate:configs": "yarn tsx tools/generate-configs.ts",
|
||||
"lint": "nx lint",
|
||||
"test": "jest --coverage",
|
||||
"test": "jest --coverage --logHeapUsage",
|
||||
"test-single": "jest --no-coverage",
|
||||
"typecheck": "tsc -p tsconfig.json --noEmit"
|
||||
},
|
||||
"dependencies": {
|
||||
"@eslint-community/regexpp": "^4.5.1",
|
||||
"@typescript-eslint/scope-manager": "6.1.0",
|
||||
"@typescript-eslint/type-utils": "6.1.0",
|
||||
"@typescript-eslint/utils": "6.1.0",
|
||||
"@typescript-eslint/visitor-keys": "6.1.0",
|
||||
"@typescript-eslint/scope-manager": "6.2.0",
|
||||
"@typescript-eslint/type-utils": "6.2.0",
|
||||
"@typescript-eslint/utils": "6.2.0",
|
||||
"@typescript-eslint/visitor-keys": "6.2.0",
|
||||
"debug": "^4.3.4",
|
||||
"graphemer": "^1.4.0",
|
||||
"ignore": "^5.2.4",
|
||||
@@ -74,8 +74,8 @@
|
||||
"@types/marked": "*",
|
||||
"@types/natural-compare": "*",
|
||||
"@types/prettier": "*",
|
||||
"@typescript-eslint/rule-schema-to-typescript-types": "6.1.0",
|
||||
"@typescript-eslint/rule-tester": "6.1.0",
|
||||
"@typescript-eslint/rule-schema-to-typescript-types": "6.2.0",
|
||||
"@typescript-eslint/rule-tester": "6.2.0",
|
||||
"ajv": "^6.12.6",
|
||||
"chalk": "^5.3.0",
|
||||
"cross-fetch": "*",
|
||||
@@ -100,5 +100,5 @@
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/typescript-eslint"
|
||||
},
|
||||
"gitHead": "d98f1e811a6a06128a86f10824b6005984dc8265"
|
||||
"gitHead": "c869aa1792ed8e3c89d5ada2df8c00f8fe36526a"
|
||||
}
|
||||
|
||||
+1
-1
@@ -41,4 +41,4 @@ export interface TypeScriptESLintRules {
|
||||
[ruleName: string]: RuleModule<string, unknown[]>;
|
||||
}
|
||||
declare const rules: TypeScriptESLintRules;
|
||||
export = rules;
|
||||
export default rules;
|
||||
|
||||
+6
-6
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@typescript-eslint/parser",
|
||||
"version": "6.1.0",
|
||||
"version": "6.2.0",
|
||||
"description": "An ESLint custom parser which leverages TypeScript ESTree",
|
||||
"files": [
|
||||
"dist",
|
||||
@@ -51,10 +51,10 @@
|
||||
"eslint": "^7.0.0 || ^8.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@typescript-eslint/scope-manager": "6.1.0",
|
||||
"@typescript-eslint/types": "6.1.0",
|
||||
"@typescript-eslint/typescript-estree": "6.1.0",
|
||||
"@typescript-eslint/visitor-keys": "6.1.0",
|
||||
"@typescript-eslint/scope-manager": "6.2.0",
|
||||
"@typescript-eslint/types": "6.2.0",
|
||||
"@typescript-eslint/typescript-estree": "6.2.0",
|
||||
"@typescript-eslint/visitor-keys": "6.2.0",
|
||||
"debug": "^4.3.4"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -77,5 +77,5 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"gitHead": "d98f1e811a6a06128a86f10824b6005984dc8265"
|
||||
"gitHead": "c869aa1792ed8e3c89d5ada2df8c00f8fe36526a"
|
||||
}
|
||||
|
||||
+5
-5
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@typescript-eslint/scope-manager",
|
||||
"version": "6.1.0",
|
||||
"version": "6.2.0",
|
||||
"description": "TypeScript scope analyser for ESLint",
|
||||
"files": [
|
||||
"dist",
|
||||
@@ -44,12 +44,12 @@
|
||||
"typecheck": "nx typecheck"
|
||||
},
|
||||
"dependencies": {
|
||||
"@typescript-eslint/types": "6.1.0",
|
||||
"@typescript-eslint/visitor-keys": "6.1.0"
|
||||
"@typescript-eslint/types": "6.2.0",
|
||||
"@typescript-eslint/visitor-keys": "6.2.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/glob": "*",
|
||||
"@typescript-eslint/typescript-estree": "6.1.0",
|
||||
"@typescript-eslint/typescript-estree": "6.2.0",
|
||||
"glob": "*",
|
||||
"jest-specific-snapshot": "*",
|
||||
"make-dir": "*",
|
||||
@@ -69,5 +69,5 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"gitHead": "d98f1e811a6a06128a86f10824b6005984dc8265"
|
||||
"gitHead": "c869aa1792ed8e3c89d5ada2df8c00f8fe36526a"
|
||||
}
|
||||
|
||||
+5
-5
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@typescript-eslint/type-utils",
|
||||
"version": "6.1.0",
|
||||
"version": "6.2.0",
|
||||
"description": "Type utilities for working with TypeScript + ESLint together",
|
||||
"files": [
|
||||
"dist",
|
||||
@@ -45,13 +45,13 @@
|
||||
"typecheck": "tsc -p tsconfig.json --noEmit"
|
||||
},
|
||||
"dependencies": {
|
||||
"@typescript-eslint/typescript-estree": "6.1.0",
|
||||
"@typescript-eslint/utils": "6.1.0",
|
||||
"@typescript-eslint/typescript-estree": "6.2.0",
|
||||
"@typescript-eslint/utils": "6.2.0",
|
||||
"debug": "^4.3.4",
|
||||
"ts-api-utils": "^1.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@typescript-eslint/parser": "6.1.0",
|
||||
"@typescript-eslint/parser": "6.2.0",
|
||||
"ajv": "^8.12.0",
|
||||
"typescript": "*"
|
||||
},
|
||||
@@ -74,5 +74,5 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"gitHead": "d98f1e811a6a06128a86f10824b6005984dc8265"
|
||||
"gitHead": "c869aa1792ed8e3c89d5ada2df8c00f8fe36526a"
|
||||
}
|
||||
|
||||
+2
-2
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@typescript-eslint/types",
|
||||
"version": "6.1.0",
|
||||
"version": "6.2.0",
|
||||
"description": "Types for the TypeScript-ESTree AST spec",
|
||||
"files": [
|
||||
"dist",
|
||||
@@ -86,5 +86,5 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"gitHead": "d98f1e811a6a06128a86f10824b6005984dc8265"
|
||||
"gitHead": "c869aa1792ed8e3c89d5ada2df8c00f8fe36526a"
|
||||
}
|
||||
|
||||
Generated
Vendored
+2
-8
@@ -1,19 +1,13 @@
|
||||
import type * as ts from 'typescript';
|
||||
declare module 'typescript' {
|
||||
interface NamedTupleMember extends ts.Node {
|
||||
}
|
||||
interface TemplateLiteralTypeNode extends ts.Node {
|
||||
}
|
||||
interface PrivateIdentifier extends ts.Node {
|
||||
}
|
||||
interface ClassStaticBlockDeclaration extends ts.Node {
|
||||
}
|
||||
interface AssertClause extends ts.Node {
|
||||
}
|
||||
interface AssertEntry extends ts.Node {
|
||||
}
|
||||
interface SatisfiesExpression extends ts.Node {
|
||||
}
|
||||
interface JsxNamespacedName extends ts.Node {
|
||||
}
|
||||
}
|
||||
export type TSToken = ts.Token<ts.SyntaxKind>;
|
||||
export type TSNode = ts.AssertClause | ts.AssertEntry | ts.Modifier | ts.Identifier | ts.PrivateIdentifier | ts.QualifiedName | ts.ComputedPropertyName | ts.Decorator | ts.TypeParameterDeclaration | ts.CallSignatureDeclaration | ts.ConstructSignatureDeclaration | ts.VariableDeclaration | ts.VariableDeclarationList | ts.ParameterDeclaration | ts.BindingElement | ts.PropertySignature | ts.PropertyDeclaration | ts.PropertyAssignment | ts.ShorthandPropertyAssignment | ts.SpreadAssignment | ts.ObjectBindingPattern | ts.ArrayBindingPattern | ts.FunctionDeclaration | ts.MethodSignature | ts.MethodDeclaration | ts.ConstructorDeclaration | ts.SemicolonClassElement | ts.GetAccessorDeclaration | ts.SetAccessorDeclaration | ts.IndexSignatureDeclaration | ts.KeywordTypeNode | ts.ImportTypeNode | ts.ThisTypeNode | ts.ClassStaticBlockDeclaration | ts.ConstructorTypeNode | ts.FunctionTypeNode | ts.TypeReferenceNode | ts.TypePredicateNode | ts.TypeQueryNode | ts.TypeLiteralNode | ts.ArrayTypeNode | ts.NamedTupleMember | ts.TupleTypeNode | ts.OptionalTypeNode | ts.RestTypeNode | ts.UnionTypeNode | ts.IntersectionTypeNode | ts.ConditionalTypeNode | ts.InferTypeNode | ts.ParenthesizedTypeNode | ts.TypeOperatorNode | ts.IndexedAccessTypeNode | ts.MappedTypeNode | ts.LiteralTypeNode | ts.StringLiteral | ts.OmittedExpression | ts.PartiallyEmittedExpression | ts.PrefixUnaryExpression | ts.PostfixUnaryExpression | ts.NullLiteral | ts.BooleanLiteral | ts.ThisExpression | ts.SuperExpression | ts.ImportExpression | ts.DeleteExpression | ts.TypeOfExpression | ts.VoidExpression | ts.AwaitExpression | ts.YieldExpression | ts.SyntheticExpression | ts.BinaryExpression | ts.ConditionalExpression | ts.FunctionExpression | ts.ArrowFunction | ts.RegularExpressionLiteral | ts.NoSubstitutionTemplateLiteral | ts.NumericLiteral | ts.BigIntLiteral | ts.TemplateHead | ts.TemplateMiddle | ts.TemplateTail | ts.TemplateExpression | ts.TemplateSpan | ts.ParenthesizedExpression | ts.ArrayLiteralExpression | ts.SpreadElement | ts.ObjectLiteralExpression | ts.PropertyAccessExpression | ts.ElementAccessExpression | ts.CallExpression | ts.ExpressionWithTypeArguments | ts.NewExpression | ts.TaggedTemplateExpression | ts.AsExpression | ts.TypeAssertion | ts.NonNullExpression | ts.MetaProperty | ts.JsxElement | ts.JsxOpeningElement | ts.JsxSelfClosingElement | ts.JsxFragment | ts.JsxOpeningFragment | ts.JsxClosingFragment | ts.JsxAttribute | ts.JsxSpreadAttribute | ts.JsxClosingElement | ts.JsxExpression | ts.JsxNamespacedName | ts.JsxText | ts.NotEmittedStatement | ts.CommaListExpression | ts.EmptyStatement | ts.DebuggerStatement | ts.MissingDeclaration | ts.Block | ts.VariableStatement | ts.ExpressionStatement | ts.IfStatement | ts.DoStatement | ts.WhileStatement | ts.ForStatement | ts.ForInStatement | ts.ForOfStatement | ts.BreakStatement | ts.ContinueStatement | ts.ReturnStatement | ts.WithStatement | ts.SwitchStatement | ts.CaseBlock | ts.CaseClause | ts.DefaultClause | ts.LabeledStatement | ts.ThrowStatement | ts.TryStatement | ts.CatchClause | ts.ClassDeclaration | ts.ClassExpression | ts.InterfaceDeclaration | ts.HeritageClause | ts.TypeAliasDeclaration | ts.EnumMember | ts.EnumDeclaration | ts.ModuleDeclaration | ts.ModuleBlock | ts.ImportEqualsDeclaration | ts.ExternalModuleReference | ts.ImportDeclaration | ts.ImportClause | ts.NamespaceImport | ts.NamespaceExportDeclaration | ts.ExportDeclaration | ts.NamedImports | ts.NamedExports | ts.ImportSpecifier | ts.ExportSpecifier | ts.ExportAssignment | ts.SourceFile | ts.Bundle | ts.InputFiles | ts.UnparsedSource | ts.JsonMinusNumericLiteral | ts.TemplateLiteralTypeNode | ts.SatisfiesExpression | ts.JSDoc | ts.JSDocTypeExpression | ts.JSDocUnknownTag | ts.JSDocAugmentsTag | ts.JSDocClassTag | ts.JSDocEnumTag | ts.JSDocThisTag | ts.JSDocTemplateTag | ts.JSDocReturnTag | ts.JSDocTypeTag | ts.JSDocTypedefTag | ts.JSDocCallbackTag | ts.JSDocSignature | ts.JSDocPropertyTag | ts.JSDocParameterTag | ts.JSDocTypeLiteral | ts.JSDocFunctionType | ts.JSDocAllType | ts.JSDocUnknownType | ts.JSDocNullableType | ts.JSDocNonNullableType | ts.JSDocOptionalType | ts.JSDocVariadicType | ts.JSDocAuthorTag;
|
||||
|
||||
+2
-8
@@ -1,19 +1,13 @@
|
||||
import type * as ts from 'typescript';
|
||||
declare module 'typescript' {
|
||||
interface NamedTupleMember extends ts.Node {
|
||||
}
|
||||
interface TemplateLiteralTypeNode extends ts.Node {
|
||||
}
|
||||
interface PrivateIdentifier extends ts.Node {
|
||||
}
|
||||
interface ClassStaticBlockDeclaration extends ts.Node {
|
||||
}
|
||||
interface AssertClause extends ts.Node {
|
||||
}
|
||||
interface AssertEntry extends ts.Node {
|
||||
}
|
||||
interface SatisfiesExpression extends ts.Node {
|
||||
}
|
||||
interface JsxNamespacedName extends ts.Node {
|
||||
}
|
||||
}
|
||||
export type TSToken = ts.Token<ts.SyntaxKind>;
|
||||
export type TSNode = ts.AssertClause | ts.AssertEntry | ts.Modifier | ts.Identifier | ts.PrivateIdentifier | ts.QualifiedName | ts.ComputedPropertyName | ts.Decorator | ts.TypeParameterDeclaration | ts.CallSignatureDeclaration | ts.ConstructSignatureDeclaration | ts.VariableDeclaration | ts.VariableDeclarationList | ts.ParameterDeclaration | ts.BindingElement | ts.PropertySignature | ts.PropertyDeclaration | ts.PropertyAssignment | ts.ShorthandPropertyAssignment | ts.SpreadAssignment | ts.ObjectBindingPattern | ts.ArrayBindingPattern | ts.FunctionDeclaration | ts.MethodSignature | ts.MethodDeclaration | ts.ConstructorDeclaration | ts.SemicolonClassElement | ts.GetAccessorDeclaration | ts.SetAccessorDeclaration | ts.IndexSignatureDeclaration | ts.KeywordTypeNode | ts.ImportTypeNode | ts.ThisTypeNode | ts.ClassStaticBlockDeclaration | ts.ConstructorTypeNode | ts.FunctionTypeNode | ts.TypeReferenceNode | ts.TypePredicateNode | ts.TypeQueryNode | ts.TypeLiteralNode | ts.ArrayTypeNode | ts.NamedTupleMember | ts.TupleTypeNode | ts.OptionalTypeNode | ts.RestTypeNode | ts.UnionTypeNode | ts.IntersectionTypeNode | ts.ConditionalTypeNode | ts.InferTypeNode | ts.ParenthesizedTypeNode | ts.TypeOperatorNode | ts.IndexedAccessTypeNode | ts.MappedTypeNode | ts.LiteralTypeNode | ts.StringLiteral | ts.OmittedExpression | ts.PartiallyEmittedExpression | ts.PrefixUnaryExpression | ts.PostfixUnaryExpression | ts.NullLiteral | ts.BooleanLiteral | ts.ThisExpression | ts.SuperExpression | ts.ImportExpression | ts.DeleteExpression | ts.TypeOfExpression | ts.VoidExpression | ts.AwaitExpression | ts.YieldExpression | ts.SyntheticExpression | ts.BinaryExpression | ts.ConditionalExpression | ts.FunctionExpression | ts.ArrowFunction | ts.RegularExpressionLiteral | ts.NoSubstitutionTemplateLiteral | ts.NumericLiteral | ts.BigIntLiteral | ts.TemplateHead | ts.TemplateMiddle | ts.TemplateTail | ts.TemplateExpression | ts.TemplateSpan | ts.ParenthesizedExpression | ts.ArrayLiteralExpression | ts.SpreadElement | ts.ObjectLiteralExpression | ts.PropertyAccessExpression | ts.ElementAccessExpression | ts.CallExpression | ts.ExpressionWithTypeArguments | ts.NewExpression | ts.TaggedTemplateExpression | ts.AsExpression | ts.TypeAssertion | ts.NonNullExpression | ts.MetaProperty | ts.JsxElement | ts.JsxOpeningElement | ts.JsxSelfClosingElement | ts.JsxFragment | ts.JsxOpeningFragment | ts.JsxClosingFragment | ts.JsxAttribute | ts.JsxSpreadAttribute | ts.JsxClosingElement | ts.JsxExpression | ts.JsxNamespacedName | ts.JsxText | ts.NotEmittedStatement | ts.CommaListExpression | ts.EmptyStatement | ts.DebuggerStatement | ts.MissingDeclaration | ts.Block | ts.VariableStatement | ts.ExpressionStatement | ts.IfStatement | ts.DoStatement | ts.WhileStatement | ts.ForStatement | ts.ForInStatement | ts.ForOfStatement | ts.BreakStatement | ts.ContinueStatement | ts.ReturnStatement | ts.WithStatement | ts.SwitchStatement | ts.CaseBlock | ts.CaseClause | ts.DefaultClause | ts.LabeledStatement | ts.ThrowStatement | ts.TryStatement | ts.CatchClause | ts.ClassDeclaration | ts.ClassExpression | ts.InterfaceDeclaration | ts.HeritageClause | ts.TypeAliasDeclaration | ts.EnumMember | ts.EnumDeclaration | ts.ModuleDeclaration | ts.ModuleBlock | ts.ImportEqualsDeclaration | ts.ExternalModuleReference | ts.ImportDeclaration | ts.ImportClause | ts.NamespaceImport | ts.NamespaceExportDeclaration | ts.ExportDeclaration | ts.NamedImports | ts.NamedExports | ts.ImportSpecifier | ts.ExportSpecifier | ts.ExportAssignment | ts.SourceFile | ts.Bundle | ts.InputFiles | ts.UnparsedSource | ts.JsonMinusNumericLiteral | ts.TemplateLiteralTypeNode | ts.SatisfiesExpression | ts.JSDoc | ts.JSDocTypeExpression | ts.JSDocUnknownTag | ts.JSDocAugmentsTag | ts.JSDocClassTag | ts.JSDocEnumTag | ts.JSDocThisTag | ts.JSDocTemplateTag | ts.JSDocReturnTag | ts.JSDocTypeTag | ts.JSDocTypedefTag | ts.JSDocCallbackTag | ts.JSDocSignature | ts.JSDocPropertyTag | ts.JSDocParameterTag | ts.JSDocTypeLiteral | ts.JSDocFunctionType | ts.JSDocAllType | ts.JSDocUnknownType | ts.JSDocNullableType | ts.JSDocNonNullableType | ts.JSDocOptionalType | ts.JSDocVariadicType | ts.JSDocAuthorTag;
|
||||
|
||||
Generated
Vendored
+1
-1
@@ -1 +1 @@
|
||||
{"version":3,"file":"ts-nodes.d.ts","sourceRoot":"","sources":["../../src/ts-estree/ts-nodes.ts"],"names":[],"mappings":"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"}
|
||||
{"version":3,"file":"ts-nodes.d.ts","sourceRoot":"","sources":["../../src/ts-estree/ts-nodes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,EAAE,MAAM,YAAY,CAAC;AAKtC,OAAO,QAAQ,YAAY,CAAC;IAE1B,UAAiB,YAAa,SAAQ,EAAE,CAAC,IAAI;KAAG;IAChD,UAAiB,WAAY,SAAQ,EAAE,CAAC,IAAI;KAAG;IAE/C,UAAiB,mBAAoB,SAAQ,EAAE,CAAC,IAAI;KAAG;IAEvD,UAAiB,iBAAkB,SAAQ,EAAE,CAAC,IAAI;KAAG;CACtD;AAGD,MAAM,MAAM,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC;AAE9C,MAAM,MAAM,MAAM,GACd,EAAE,CAAC,YAAY,GACf,EAAE,CAAC,WAAW,GACd,EAAE,CAAC,QAAQ,GACX,EAAE,CAAC,UAAU,GACb,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,aAAa,GAChB,EAAE,CAAC,oBAAoB,GACvB,EAAE,CAAC,SAAS,GACZ,EAAE,CAAC,wBAAwB,GAE3B,EAAE,CAAC,wBAAwB,GAC3B,EAAE,CAAC,6BAA6B,GAChC,EAAE,CAAC,mBAAmB,GACtB,EAAE,CAAC,uBAAuB,GAC1B,EAAE,CAAC,oBAAoB,GACvB,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,mBAAmB,GACtB,EAAE,CAAC,kBAAkB,GACrB,EAAE,CAAC,2BAA2B,GAC9B,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,oBAAoB,GACvB,EAAE,CAAC,mBAAmB,GACtB,EAAE,CAAC,mBAAmB,GACtB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,sBAAsB,GACzB,EAAE,CAAC,qBAAqB,GACxB,EAAE,CAAC,sBAAsB,GACzB,EAAE,CAAC,sBAAsB,GACzB,EAAE,CAAC,yBAAyB,GAC5B,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,YAAY,GACf,EAAE,CAAC,2BAA2B,GAE9B,EAAE,CAAC,mBAAmB,GACtB,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,aAAa,GAChB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,aAAa,GAChB,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,aAAa,GAChB,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,YAAY,GACf,EAAE,CAAC,aAAa,GAChB,EAAE,CAAC,oBAAoB,GACvB,EAAE,CAAC,mBAAmB,GACtB,EAAE,CAAC,aAAa,GAChB,EAAE,CAAC,qBAAqB,GACxB,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,qBAAqB,GACxB,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,aAAa,GAChB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,0BAA0B,GAC7B,EAAE,CAAC,qBAAqB,GACxB,EAAE,CAAC,sBAAsB,GACzB,EAAE,CAAC,WAAW,GACd,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,mBAAmB,GACtB,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,qBAAqB,GACxB,EAAE,CAAC,kBAAkB,GACrB,EAAE,CAAC,aAAa,GAChB,EAAE,CAAC,wBAAwB,GAC3B,EAAE,CAAC,6BAA6B,GAChC,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,aAAa,GAChB,EAAE,CAAC,YAAY,GACf,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,YAAY,GACf,EAAE,CAAC,kBAAkB,GACrB,EAAE,CAAC,YAAY,GACf,EAAE,CAAC,uBAAuB,GAC1B,EAAE,CAAC,sBAAsB,GACzB,EAAE,CAAC,aAAa,GAChB,EAAE,CAAC,uBAAuB,GAC1B,EAAE,CAAC,wBAAwB,GAC3B,EAAE,CAAC,uBAAuB,GAC1B,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,2BAA2B,GAC9B,EAAE,CAAC,aAAa,GAChB,EAAE,CAAC,wBAAwB,GAC3B,EAAE,CAAC,YAAY,GACf,EAAE,CAAC,aAAa,GAChB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,YAAY,GACf,EAAE,CAAC,UAAU,GACb,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,qBAAqB,GACxB,EAAE,CAAC,WAAW,GACd,EAAE,CAAC,kBAAkB,GACrB,EAAE,CAAC,kBAAkB,GACrB,EAAE,CAAC,YAAY,GACf,EAAE,CAAC,kBAAkB,GACrB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,aAAa,GAChB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,OAAO,GACV,EAAE,CAAC,mBAAmB,GACtB,EAAE,CAAC,mBAAmB,GACtB,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,kBAAkB,GACrB,EAAE,CAAC,KAAK,GACR,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,mBAAmB,GACtB,EAAE,CAAC,WAAW,GACd,EAAE,CAAC,WAAW,GACd,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,YAAY,GACf,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,aAAa,GAChB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,SAAS,GACZ,EAAE,CAAC,UAAU,GACb,EAAE,CAAC,aAAa,GAChB,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,YAAY,GACf,EAAE,CAAC,WAAW,GAEd,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,oBAAoB,GACvB,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,oBAAoB,GACvB,EAAE,CAAC,UAAU,GACb,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,WAAW,GACd,EAAE,CAAC,uBAAuB,GAC1B,EAAE,CAAC,uBAAuB,GAC1B,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,YAAY,GACf,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,0BAA0B,GAC7B,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,YAAY,GACf,EAAE,CAAC,YAAY,GACf,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,UAAU,GACb,EAAE,CAAC,MAAM,GAET,EAAE,CAAC,UAAU,GAEb,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,uBAAuB,GAC1B,EAAE,CAAC,uBAAuB,GAC1B,EAAE,CAAC,mBAAmB,GAGtB,EAAE,CAAC,KAAK,GACR,EAAE,CAAC,mBAAmB,GACtB,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,aAAa,GAChB,EAAE,CAAC,YAAY,GACf,EAAE,CAAC,YAAY,GACf,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,YAAY,GACf,EAAE,CAAC,eAAe,GAClB,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,cAAc,GACjB,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,YAAY,GACf,EAAE,CAAC,gBAAgB,GACnB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,oBAAoB,GACvB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,iBAAiB,GACpB,EAAE,CAAC,cAAc,CAAC"}
|
||||
+4
-4
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@typescript-eslint/typescript-estree",
|
||||
"version": "6.1.0",
|
||||
"version": "6.2.0",
|
||||
"description": "A parser that converts TypeScript source code into an ESTree compatible form",
|
||||
"files": [
|
||||
"dist",
|
||||
@@ -52,8 +52,8 @@
|
||||
"typecheck": "tsc -p tsconfig.json --noEmit"
|
||||
},
|
||||
"dependencies": {
|
||||
"@typescript-eslint/types": "6.1.0",
|
||||
"@typescript-eslint/visitor-keys": "6.1.0",
|
||||
"@typescript-eslint/types": "6.2.0",
|
||||
"@typescript-eslint/visitor-keys": "6.2.0",
|
||||
"debug": "^4.3.4",
|
||||
"globby": "^11.1.0",
|
||||
"is-glob": "^4.0.3",
|
||||
@@ -85,5 +85,5 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"gitHead": "d98f1e811a6a06128a86f10824b6005984dc8265"
|
||||
"gitHead": "c869aa1792ed8e3c89d5ada2df8c00f8fe36526a"
|
||||
}
|
||||
|
||||
+6
-6
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@typescript-eslint/utils",
|
||||
"version": "6.1.0",
|
||||
"version": "6.2.0",
|
||||
"description": "Utilities for working with TypeScript + ESLint together",
|
||||
"files": [
|
||||
"dist",
|
||||
@@ -68,16 +68,16 @@
|
||||
"@eslint-community/eslint-utils": "^4.4.0",
|
||||
"@types/json-schema": "^7.0.12",
|
||||
"@types/semver": "^7.5.0",
|
||||
"@typescript-eslint/scope-manager": "6.1.0",
|
||||
"@typescript-eslint/types": "6.1.0",
|
||||
"@typescript-eslint/typescript-estree": "6.1.0",
|
||||
"@typescript-eslint/scope-manager": "6.2.0",
|
||||
"@typescript-eslint/types": "6.2.0",
|
||||
"@typescript-eslint/typescript-estree": "6.2.0",
|
||||
"semver": "^7.5.4"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"eslint": "^7.0.0 || ^8.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@typescript-eslint/parser": "6.1.0",
|
||||
"@typescript-eslint/parser": "6.2.0",
|
||||
"typescript": "*"
|
||||
},
|
||||
"funding": {
|
||||
@@ -91,5 +91,5 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"gitHead": "d98f1e811a6a06128a86f10824b6005984dc8265"
|
||||
"gitHead": "c869aa1792ed8e3c89d5ada2df8c00f8fe36526a"
|
||||
}
|
||||
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@typescript-eslint/visitor-keys",
|
||||
"version": "6.1.0",
|
||||
"version": "6.2.0",
|
||||
"description": "Visitor keys used to help traverse the TypeScript-ESTree AST",
|
||||
"files": [
|
||||
"dist",
|
||||
@@ -45,7 +45,7 @@
|
||||
"typecheck": "tsc -p tsconfig.json --noEmit"
|
||||
},
|
||||
"dependencies": {
|
||||
"@typescript-eslint/types": "6.1.0",
|
||||
"@typescript-eslint/types": "6.2.0",
|
||||
"eslint-visitor-keys": "^3.4.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
@@ -62,5 +62,5 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
"gitHead": "d98f1e811a6a06128a86f10824b6005984dc8265"
|
||||
"gitHead": "c869aa1792ed8e3c89d5ada2df8c00f8fe36526a"
|
||||
}
|
||||
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"root": true,
|
||||
|
||||
"extends": "@ljharb",
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: [ljharb]
|
||||
patreon: # Replace with a single Patreon username
|
||||
open_collective: # Replace with a single Open Collective username
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
tidelift: npm/array-buffer-byte-length
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: # Replace with a single Liberapay username
|
||||
issuehunt: # Replace with a single IssueHunt username
|
||||
otechie: # Replace with a single Otechie username
|
||||
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"all": true,
|
||||
"check-coverage": false,
|
||||
"reporter": ["text-summary", "text", "html", "json"],
|
||||
"lines": 86,
|
||||
"statements": 85.93,
|
||||
"functions": 82.43,
|
||||
"branches": 76.06,
|
||||
"exclude": [
|
||||
"coverage",
|
||||
"test"
|
||||
]
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## v1.0.0 - 2023-02-28
|
||||
|
||||
### Commits
|
||||
|
||||
- Initial implementation, tests, readme [`2db6cad`](https://github.com/inspect-js/array-buffer-byte-length/commit/2db6cad79270ab1966f5ea80160abbcd4534c91d)
|
||||
- Initial commit [`b2a0c9c`](https://github.com/inspect-js/array-buffer-byte-length/commit/b2a0c9c2246514b7999d331aad868c4f32326db7)
|
||||
- npm init [`376acdb`](https://github.com/inspect-js/array-buffer-byte-length/commit/376acdbd4435cb1d4c31d107cacb3b86f2363aee)
|
||||
- Only apps should have lockfiles [`70cf325`](https://github.com/inspect-js/array-buffer-byte-length/commit/70cf32526fc727d0d16a12d85a4bddea70075e31)
|
||||
Generated
Vendored
+1
-1
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2019 typescript-eslint and other contributors
|
||||
Copyright (c) 2023 Inspect JS
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
+40
@@ -0,0 +1,40 @@
|
||||
# array-buffer-byte-length <sup>[![Version Badge][npm-version-svg]][package-url]</sup>
|
||||
|
||||
[![github actions][actions-image]][actions-url]
|
||||
[![coverage][codecov-image]][codecov-url]
|
||||
[![License][license-image]][license-url]
|
||||
[![Downloads][downloads-image]][downloads-url]
|
||||
|
||||
[![npm badge][npm-badge-png]][package-url]
|
||||
|
||||
Get the byte length of an ArrayBuffer, even in engines without a `.byteLength` method.
|
||||
|
||||
## Example
|
||||
|
||||
```js
|
||||
const assert = require('assert');
|
||||
const byteLength = require('array-buffer-byte-length');
|
||||
|
||||
assert.equal(byteLength([]), NaN, 'an array is not an ArrayBuffer, yields NaN');
|
||||
|
||||
assert.equal(byteLength(new ArrayBuffer(0)), 0, 'ArrayBuffer of byteLength 0, yields 0');
|
||||
```
|
||||
|
||||
## Tests
|
||||
Simply clone the repo, `npm install`, and run `npm test`
|
||||
|
||||
[package-url]: https://npmjs.org/package/array-buffer-byte-length
|
||||
[npm-version-svg]: https://versionbadg.es/inspect-js/array-buffer-byte-length.svg
|
||||
[deps-svg]: https://david-dm.org/inspect-js/array-buffer-byte-length.svg
|
||||
[deps-url]: https://david-dm.org/inspect-js/array-buffer-byte-length
|
||||
[dev-deps-svg]: https://david-dm.org/inspect-js/array-buffer-byte-length/dev-status.svg
|
||||
[dev-deps-url]: https://david-dm.org/inspect-js/array-buffer-byte-length#info=devDependencies
|
||||
[npm-badge-png]: https://nodei.co/npm/array-buffer-byte-length.png?downloads=true&stars=true
|
||||
[license-image]: https://img.shields.io/npm/l/array-buffer-byte-length.svg
|
||||
[license-url]: LICENSE
|
||||
[downloads-image]: https://img.shields.io/npm/dm/array-buffer-byte-length.svg
|
||||
[downloads-url]: https://npm-stat.com/charts.html?package=array-buffer-byte-length
|
||||
[codecov-image]: https://codecov.io/gh/inspect-js/array-buffer-byte-length/branch/main/graphs/badge.svg
|
||||
[codecov-url]: https://app.codecov.io/gh/inspect-js/array-buffer-byte-length/
|
||||
[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/inspect-js/array-buffer-byte-length
|
||||
[actions-url]: https://github.com/inspect-js/array-buffer-byte-length/actions
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
'use strict';
|
||||
|
||||
var callBound = require('call-bind/callBound');
|
||||
var $byteLength = callBound('ArrayBuffer.prototype.byteLength', true);
|
||||
|
||||
var isArrayBuffer = require('is-array-buffer');
|
||||
|
||||
module.exports = function byteLength(ab) {
|
||||
if (!isArrayBuffer(ab)) {
|
||||
return NaN;
|
||||
}
|
||||
return $byteLength ? $byteLength(ab) : ab.byteLength;
|
||||
}; // in node < 0.11, byteLength is an own nonconfigurable property
|
||||
+81
@@ -0,0 +1,81 @@
|
||||
{
|
||||
"name": "array-buffer-byte-length",
|
||||
"version": "1.0.0",
|
||||
"description": "Get the byte length of an ArrayBuffer, even in engines without a `.byteLength` method.",
|
||||
"main": "index.js",
|
||||
"exports": {
|
||||
".": "./index.js",
|
||||
"./package.json": "./package.json"
|
||||
},
|
||||
"scripts": {
|
||||
"prepack": "npmignore --auto --commentLines=autogenerated",
|
||||
"prepublishOnly": "safe-publish-latest",
|
||||
"prepublish": "not-in-publish || npm run prepublishOnly",
|
||||
"pretest": "npm run lint",
|
||||
"prelint": "evalmd README.md",
|
||||
"lint": "eslint --ext=js,mjs .",
|
||||
"tests-only": "nyc tape 'test/**/*.js'",
|
||||
"test": "npm run tests-only",
|
||||
"posttest": "aud --production",
|
||||
"version": "auto-changelog && git add CHANGELOG.md",
|
||||
"postversion": "auto-changelog && git add CHANGELOG.md && git commit --no-edit --amend && git tag -f \"v$(node -e \"console.log(require('./package.json').version)\")\""
|
||||
},
|
||||
"keywords": [
|
||||
"shim",
|
||||
"polyfill",
|
||||
"ArrayBuffer",
|
||||
"byteLength",
|
||||
"byte",
|
||||
"length",
|
||||
"es-shim API",
|
||||
"es-shims"
|
||||
],
|
||||
"author": "Jordan Harband <ljharb@gmail.com>",
|
||||
"funding": {
|
||||
"url": "https://github.com/sponsors/ljharb"
|
||||
},
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/inspect-js/array-buffer-byte-length.git"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/inspect-js/array-buffer-byte-length/issues"
|
||||
},
|
||||
"homepage": "https://github.com/inspect-js/array-buffer-byte-length#readme",
|
||||
"dependencies": {
|
||||
"call-bind": "^1.0.2",
|
||||
"is-array-buffer": "^3.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@ljharb/eslint-config": "^21.0.1",
|
||||
"aud": "^2.0.2",
|
||||
"auto-changelog": "^2.4.0",
|
||||
"es-value-fixtures": "^1.4.2",
|
||||
"eslint": "=8.8.0",
|
||||
"evalmd": "^0.0.19",
|
||||
"for-each": "^0.3.3",
|
||||
"in-publish": "^2.0.1",
|
||||
"npmignore": "^0.3.0",
|
||||
"nyc": "^10.3.2",
|
||||
"object-inspect": "^1.12.3",
|
||||
"safe-publish-latest": "^2.0.0",
|
||||
"tape": "^5.6.3"
|
||||
},
|
||||
"auto-changelog": {
|
||||
"output": "CHANGELOG.md",
|
||||
"template": "keepachangelog",
|
||||
"unreleased": false,
|
||||
"commitLimit": false,
|
||||
"backfillLimit": false,
|
||||
"hideCredit": true
|
||||
},
|
||||
"testling": {
|
||||
"files": "test/index.js"
|
||||
},
|
||||
"publishConfig": {
|
||||
"ignore": [
|
||||
".github/workflows"
|
||||
]
|
||||
}
|
||||
}
|
||||
+26
@@ -0,0 +1,26 @@
|
||||
'use strict';
|
||||
|
||||
var test = require('tape');
|
||||
var forEach = require('for-each');
|
||||
var v = require('es-value-fixtures');
|
||||
var inspect = require('object-inspect');
|
||||
|
||||
var byteLength = require('../');
|
||||
|
||||
test('byteLength', function (t) {
|
||||
forEach(v.objects.concat(v.primitives), function (nonAB) {
|
||||
t.equal(byteLength(nonAB), NaN, inspect(nonAB) + ' is not an ArrayBuffer, and yields NaN');
|
||||
});
|
||||
|
||||
t.test('ArrayBuffers', { skip: typeof ArrayBuffer !== 'function' }, function (st) {
|
||||
var ab32 = new ArrayBuffer(32);
|
||||
st.equal(byteLength(ab32), 32, 'works on an ArrayBuffer of length 32: ' + inspect(ab32));
|
||||
|
||||
var ab0 = new ArrayBuffer(0);
|
||||
st.equal(byteLength(ab0), 0, 'works on an ArrayBuffer of length 0: ' + inspect(ab0));
|
||||
|
||||
st.end();
|
||||
});
|
||||
|
||||
t.end();
|
||||
});
|
||||
+36
@@ -0,0 +1,36 @@
|
||||
{
|
||||
"root": true,
|
||||
|
||||
"extends": "@ljharb",
|
||||
|
||||
"rules": {
|
||||
"array-bracket-newline": 0,
|
||||
"id-length": 0,
|
||||
"new-cap": [2, {
|
||||
"capIsNewExceptions": [
|
||||
"GetIntrinsic",
|
||||
"Call",
|
||||
"Get",
|
||||
"IsCallable",
|
||||
"LengthOfArrayLike",
|
||||
"RequireObjectCoercible",
|
||||
"ToBoolean",
|
||||
"ToObject",
|
||||
"ToString",
|
||||
],
|
||||
}],
|
||||
"no-magic-numbers": 0,
|
||||
},
|
||||
|
||||
"overrides": [
|
||||
{
|
||||
"files": "test/**",
|
||||
"rules": {
|
||||
"func-name-matching": 0,
|
||||
"max-lines-per-function": 0,
|
||||
"no-invalid-this": 1,
|
||||
"strict": 1,
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
# These are supported funding model platforms
|
||||
|
||||
github: [ljharb]
|
||||
patreon: # Replace with a single Patreon username
|
||||
open_collective: # Replace with a single Open Collective username
|
||||
ko_fi: # Replace with a single Ko-fi username
|
||||
tidelift: npm/array.prototype.findlastindex
|
||||
community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry
|
||||
liberapay: # Replace with a single Liberapay username
|
||||
issuehunt: # Replace with a single IssueHunt username
|
||||
otechie: # Replace with a single Otechie username
|
||||
custom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']
|
||||
+9
@@ -0,0 +1,9 @@
|
||||
{
|
||||
"all": true,
|
||||
"check-coverage": false,
|
||||
"reporter": ["text-summary", "text", "html", "json"],
|
||||
"exclude": [
|
||||
"coverage",
|
||||
"test"
|
||||
]
|
||||
}
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
# Changelog
|
||||
|
||||
All notable changes to this project will be documented in this file.
|
||||
|
||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/)
|
||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
||||
|
||||
## [v1.2.2](https://github.com/es-shims/Array.prototype.findLastIndex/compare/v1.2.1...v1.2.2) - 2022-11-02
|
||||
|
||||
### Commits
|
||||
|
||||
- [meta] use `npmignore` to autogenerate an npmignore file [`f910dc6`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/f910dc6e5999e6941892232810ae9b3910d925ec)
|
||||
- [Deps] update `es-abstract`, `get-intrinsic` [`6e44207`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/6e4420705d7435b8b9bb978e4858814ba0216fa5)
|
||||
- [actions] update rebase action to use reusable workflow [`aac0471`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/aac0471a0b2f0f44765ac6055211b58f26fa6636)
|
||||
- [Deps] update `define-properties`, `es-abstract`, `get-intrinsic` [`c1d1d70`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/c1d1d7083bfa8ab32a9e5560e4b2aa16ce9d0a6d)
|
||||
- [Dev Deps] update `es-value-fixtures`, `object-inspect`, `tape` [`64c4c0f`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/64c4c0f6dda4793c5d9db5110ec82c6004bcc4ef)
|
||||
- [Dev Deps] update `aud`, `tape` [`603fbac`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/603fbacf4d034298ff40ab6886f6af7031651acd)
|
||||
- [Tests] add indication of whether it was shimmed [`7d711f6`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/7d711f6e68c9c5e4e0556946d026c159f7d82f22)
|
||||
- [Tests] make nullish receiver tests more robust [`335cf53`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/335cf5381ec0bc7ce60de8824b736cb3b40918ae)
|
||||
|
||||
## [v1.2.1](https://github.com/es-shims/Array.prototype.findLastIndex/compare/v1.2.0...v1.2.1) - 2022-04-11
|
||||
|
||||
### Commits
|
||||
|
||||
- [Refactor] use `es-shim-unscopables` [`abe84ee`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/abe84ee8794ce9c84180bc01cf499a7bb2494b3d)
|
||||
|
||||
## [v1.2.0](https://github.com/es-shims/Array.prototype.findLastIndex/compare/v1.1.1...v1.2.0) - 2022-04-11
|
||||
|
||||
### Commits
|
||||
|
||||
- [actions] reuse common workflows [`670cc4c`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/670cc4c0b6f23b7f01d365a9afd2dd88ee2e4967)
|
||||
- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `@es-shims/api`, `object-inspect`, `safe-publish-latest`, `tape` [`11bc460`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/11bc460ab842d2a08c43b67aab182e0697d65308)
|
||||
- [Dev Deps] update `eslint`, `@ljharb/eslint-config`, `aud`, `auto-changelog`, `object-inspect`, `tape` [`b076ad6`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/b076ad6ed9246f3139efa72d0ddbf2e0d861f982)
|
||||
- [actions] update codecov uploader [`0d62d86`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/0d62d8602c2d3ecefdd0965c25cafb2a864c0903)
|
||||
- [New] `shim`/`auto`: add `findLast` to `Symbol.unscopables` [`b09e4a6`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/b09e4a6a194366b45945c6d65cdcc64ca786e570)
|
||||
- [Deps] update `es-abstract` [`024128c`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/024128c1abc5b58863859ea8b9cf4c1cb1df548b)
|
||||
- [Deps] update `es-abstract` [`2dcab99`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/2dcab99e3ed43546cd6610b12d489d95d8e94d90)
|
||||
|
||||
## [v1.1.1](https://github.com/es-shims/Array.prototype.findLastIndex/compare/v1.1.0...v1.1.1) - 2021-10-01
|
||||
|
||||
### Commits
|
||||
|
||||
- [Refactor] remove unnecessary ESM files [`35161c7`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/35161c76758835dd3fbecdf0b5fbf41a3ce9f218)
|
||||
- [Tests] add new tests from test262 [`e26fa25`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/e26fa256601f60b1feb5918e4fbcc76d0d773d13)
|
||||
- [Deps] update `es-abstract` [`5ff80b1`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/5ff80b116f2e083ae72605275af0efec367f3a89)
|
||||
- [readme] fix URLs [`b962fe2`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/b962fe225fac8a450624d861b5d6e444526bcf32)
|
||||
- [Dev Deps] update `@ljharb/eslint-config`, `@es-shims/api` [`5aa11dd`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/5aa11dd23ee2bcdc9ca7d2d6007e7f44a9356743)
|
||||
|
||||
## [v1.1.0](https://github.com/es-shims/Array.prototype.findLastIndex/compare/v1.0.0...v1.1.0) - 2021-08-07
|
||||
|
||||
### Commits
|
||||
|
||||
- [New] add ESM entry points [`ac5ada3`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/ac5ada3d359ff267e6933dd817f4106e6de2c157)
|
||||
- [Fix] ES3 engines: ensure nullish receiver throws [`4c6592a`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/4c6592a7962351e82bb1b06c79de496bf4bcd08d)
|
||||
- [Dev Deps] update `eslint`, `@tape` [`6895166`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/6895166742a738a80d19ac4eaa6f12c97a5c7814)
|
||||
- [Fix] add missing entry points to `exports` [`ac2f138`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/ac2f1384dcd9a9f736ce1c3c5dc7ac87e16c4f90)
|
||||
- [Deps] update `es-abstract` [`c379fb7`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/c379fb7681ea3bb078891bf394756b1086bc43e7)
|
||||
|
||||
## v1.0.0 - 2021-07-13
|
||||
|
||||
### Commits
|
||||
|
||||
- Implementation & Tests [`cf5cae1`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/cf5cae1d78c0c74588a5baade5156950e17f4558)
|
||||
- Initial commit [`2778f1c`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/2778f1cc708cc79d3bdbc20d5b84d210b9670b8a)
|
||||
- npm init [`873482d`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/873482d650b6800e9484865c3b0d6d33664bcf9e)
|
||||
- Only apps should have lockfiles [`b7c73ee`](https://github.com/es-shims/Array.prototype.findLastIndex/commit/b7c73ee858f01b0b1ff70800e09c0bbc2632e1a5)
|
||||
Generated
Vendored
+1
-1
@@ -1,6 +1,6 @@
|
||||
MIT License
|
||||
|
||||
Copyright (c) 2019 typescript-eslint and other contributors
|
||||
Copyright (c) 2021 ECMAScript Shims
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
+74
@@ -0,0 +1,74 @@
|
||||
# array.prototype.findlastindex <sup>[![Version Badge][npm-version-svg]][package-url]</sup>
|
||||
|
||||
[![github actions][actions-image]][actions-url]
|
||||
[![coverage][codecov-image]][codecov-url]
|
||||
[![dependency status][deps-svg]][deps-url]
|
||||
[![dev dependency status][dev-deps-svg]][dev-deps-url]
|
||||
[![License][license-image]][license-url]
|
||||
[![Downloads][downloads-image]][downloads-url]
|
||||
|
||||
[![npm badge][npm-badge-png]][package-url]
|
||||
|
||||
An ESnext spec-compliant `Array.prototype.findLastIndex` shim/polyfill/replacement that works as far down as ES3.
|
||||
|
||||
This package implements the [es-shim API](https://github.com/es-shims/api) interface. It works in an ES3-supported environment and complies with the proposed [spec](https://tc39.es/proposal-array-find-from-last).
|
||||
|
||||
Because `Array.prototype.findLastIndex` depends on a receiver (the `this` value), the main export takes the array to operate on as the first argument.
|
||||
|
||||
## Getting started
|
||||
|
||||
```sh
|
||||
npm install --save array.prototype.findlastindex
|
||||
```
|
||||
|
||||
## Usage/Examples
|
||||
|
||||
```js
|
||||
var findLastIndex = require('array.prototype.findlastindex');
|
||||
var assert = require('assert');
|
||||
|
||||
var arr = [1, [2], [], 3, [[4]]];
|
||||
var isNumber = function (x) { return typeof x === 'number' };
|
||||
|
||||
assert.deepEqual(findLastIndex(arr, isNumber), 3);
|
||||
```
|
||||
|
||||
```js
|
||||
var findLastIndex = require('array.prototype.findlastindex');
|
||||
var assert = require('assert');
|
||||
/* when Array#findLastIndex is not present */
|
||||
delete Array.prototype.findLastIndex;
|
||||
var shimmed = findLastIndex.shim();
|
||||
|
||||
assert.equal(shimmed, findLastIndex.getPolyfill());
|
||||
assert.deepEqual(arr.findLastIndex(isNumber), findLastIndex(arr, isNumber));
|
||||
```
|
||||
|
||||
```js
|
||||
var findLastIndex = require('array.prototype.findlastindex');
|
||||
var assert = require('assert');
|
||||
/* when Array#findLastIndex is present */
|
||||
var shimmed = findLastIndex.shim();
|
||||
|
||||
assert.equal(shimmed, Array.prototype.findLastIndex);
|
||||
assert.deepEqual(arr.findLastIndex(isNumber), findLastIndex(arr, isNumber));
|
||||
```
|
||||
|
||||
## Tests
|
||||
Simply clone the repo, `npm install`, and run `npm test`
|
||||
|
||||
[package-url]: https://npmjs.org/package/array.prototype.findlastindex
|
||||
[npm-version-svg]: https://versionbadg.es/es-shims/Array.prototype.findLastIndex.svg
|
||||
[deps-svg]: https://david-dm.org/es-shims/Array.prototype.findLastIndex.svg
|
||||
[deps-url]: https://david-dm.org/es-shims/Array.prototype.findLastIndex
|
||||
[dev-deps-svg]: https://david-dm.org/es-shims/Array.prototype.findLastIndex/dev-status.svg
|
||||
[dev-deps-url]: https://david-dm.org/es-shims/Array.prototype.findLastIndex#info=devDependencies
|
||||
[npm-badge-png]: https://nodei.co/npm/array.prototype.findlastindex.png?downloads=true&stars=true
|
||||
[license-image]: https://img.shields.io/npm/l/array.prototype.findlastindex.svg
|
||||
[license-url]: LICENSE
|
||||
[downloads-image]: https://img.shields.io/npm/dm/array.prototype.findlastindex.svg
|
||||
[downloads-url]: https://npm-stat.com/charts.html?package=array.prototype.findlastindex
|
||||
[codecov-image]: https://codecov.io/gh/es-shims/Array.prototype.findLastIndex/branch/main/graphs/badge.svg
|
||||
[codecov-url]: https://app.codecov.io/gh/es-shims/Array.prototype.findLastIndex/
|
||||
[actions-image]: https://img.shields.io/endpoint?url=https://github-actions-badge-u3jn4tfpocch.runkit.sh/es-shims/Array.prototype.findLastIndex
|
||||
[actions-url]: https://github.com/es-shims/Array.prototype.findLastIndex
|
||||
+3
@@ -0,0 +1,3 @@
|
||||
'use strict';
|
||||
|
||||
require('./shim')();
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user