diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 00000000..3a974ae1 --- /dev/null +++ b/.eslintignore @@ -0,0 +1,7 @@ +# don't ever lint node_modules +node_modules +# don't lint definitions +src/lib/definitions/**/* +# don't lint build output +dist +out-tsc \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 00000000..74b489ef --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,17 @@ +module.exports = { + root: true, + parser: '@typescript-eslint/parser', + plugins: [ + '@typescript-eslint', + ], + extends: [ + 'eslint:recommended', + 'plugin:@typescript-eslint/eslint-recommended', + 'plugin:@typescript-eslint/recommended', + 'prettier' + ], + rules: { + '@typescript-eslint/no-explicit-any': 0, + '@typescript-eslint/no-inferrable-types': 0 + } +}; \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index 9478bcd1..e463fcd5 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -1,16 +1,16 @@ ---- -name: Bug Report -about: Report a bug encountered with the Serverless Workflow Typescript SDK -labels: kind/bug - ---- - -**What happened**: - -**What you expected to happen**: - -**How to reproduce it**: - -**Anything else we need to know?**: - +--- +name: Bug Report +about: Report a bug encountered with the Serverless Workflow Typescript SDK +labels: kind/bug + +--- + +**What happened**: + +**What you expected to happen**: + +**How to reproduce it**: + +**Anything else we need to know?**: + **Environment**: \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/enhancement.md b/.github/ISSUE_TEMPLATE/enhancement.md index 065b2b60..56685e51 100644 --- a/.github/ISSUE_TEMPLATE/enhancement.md +++ b/.github/ISSUE_TEMPLATE/enhancement.md @@ -1,10 +1,10 @@ ---- -name: Enhancement Request -about: Suggest an enhancement to the Serverless Workflow Typescript SDK -labels: kind/feature - ---- - -**What would you like to be added**: - +--- +name: Enhancement Request +about: Suggest an enhancement to the Serverless Workflow Typescript SDK +labels: kind/feature + +--- + +**What would you like to be added**: + **Why is this needed**: \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md index e094964f..88910eb8 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/question.md @@ -1,8 +1,8 @@ ---- -name: Question -about: Ask a question about the Serverless Workflow Typescript SDK -labels: kind/question - ---- - +--- +name: Question +about: Ask a question about the Serverless Workflow Typescript SDK +labels: kind/question + +--- + **What is the question**: \ No newline at end of file diff --git a/.github/OWNERS b/.github/OWNERS index 1010c333..f5553dfc 100644 --- a/.github/OWNERS +++ b/.github/OWNERS @@ -1,12 +1,12 @@ -reviewers: - - tsurdilo - - manuelstein - - ricardozanini - - antmendoza -approvers: - - tsurdilo - - manuelstein - - ricardozanini - - antmendoza -labels: +reviewers: + - tsurdilo + - manuelstein + - ricardozanini + - antmendoza +approvers: + - tsurdilo + - manuelstein + - ricardozanini + - antmendoza +labels: - sig/contributor-experience \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 157cd18e..0f2ec2f8 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,7 +1,7 @@ -**Many thanks for submitting your Pull Request :heart:!** - -**What this PR does / why we need it**: - -**Special notes for reviewers**: - +**Many thanks for submitting your Pull Request :heart:!** + +**What this PR does / why we need it**: + +**Special notes for reviewers**: + **Additional information (if needed):** \ No newline at end of file diff --git a/.github/workflows/node-ci.yml b/.github/workflows/node-ci.yml index d9371cbb..7fe57b39 100644 --- a/.github/workflows/node-ci.yml +++ b/.github/workflows/node-ci.yml @@ -1,26 +1,26 @@ -name: Node CI - -on: - push: - branches: [ main ] - pull_request: - branches: [ main ] - -jobs: - build: - - runs-on: ubuntu-latest - - strategy: - matrix: - node-version: [10.x, 12.x, 14.x, 15.x] - - steps: - - uses: actions/checkout@v2 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 - with: - node-version: ${{ matrix.node-version }} - - run: npm ci - - run: npm run build --if-present +name: Node CI + +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + build: + + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [10.x, 12.x, 14.x, 15.x] + + steps: + - uses: actions/checkout@v2 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + - run: npm ci + - run: npm run build --if-present - run: npm test \ No newline at end of file diff --git a/.gitignore b/.gitignore index 3ff7bd71..67739384 100644 --- a/.gitignore +++ b/.gitignore @@ -1,19 +1,19 @@ -# Dependency directory -node_modules -bower_components - -# Editors -.idea -.vscode -*.iml - -# OS metadata -.DS_Store -Thumbs.db - -# Ignore built ts files -dist/**/* -out-tsc - -# ignore yarn.lock +# Dependency directory +node_modules +bower_components + +# Editors +.idea +.vscode +*.iml + +# OS metadata +.DS_Store +Thumbs.db + +# Ignore built ts files +dist/**/* +out-tsc + +# ignore yarn.lock yarn.lock \ No newline at end of file diff --git a/.gitpod.Dockerfile b/.gitpod.Dockerfile index 11afbf8e..626e1a32 100644 --- a/.gitpod.Dockerfile +++ b/.gitpod.Dockerfile @@ -1 +1 @@ -FROM node:16-buster +FROM node:16-buster diff --git a/.gitpod.yml b/.gitpod.yml index 1c012315..1dd668f1 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -1,20 +1,20 @@ -image: - file: .gitpod.Dockerfile - -# List the start up tasks. You can start them in parallel in multiple terminals. -# https://www.gitpod.io/docs/config-start-tasks/ -tasks: - - init: > - npm install && - npm run build - command: npm run test - -# Enable prebuilds of your project to enable faster workspace start times. -# https://www.gitpod.io/docs/prebuilds/#configure-the-github-app -github: - prebuilds: - master: true - branches: true - pullRequests: true - pullRequestsFromForks: true - addCheck: true +image: + file: .gitpod.Dockerfile + +# List the start up tasks. You can start them in parallel in multiple terminals. +# https://www.gitpod.io/docs/config-start-tasks/ +tasks: + - init: > + npm install && + npm run build + command: npm run test + +# Enable prebuilds of your project to enable faster workspace start times. +# https://www.gitpod.io/docs/prebuilds/#configure-the-github-app +github: + prebuilds: + master: true + branches: true + pullRequests: true + pullRequestsFromForks: true + addCheck: true diff --git a/.husky/.gitignore b/.husky/.gitignore new file mode 100644 index 00000000..31354ec1 --- /dev/null +++ b/.husky/.gitignore @@ -0,0 +1 @@ +_ diff --git a/.huskyrc.json b/.huskyrc.json new file mode 100644 index 00000000..47cebfdb --- /dev/null +++ b/.huskyrc.json @@ -0,0 +1,6 @@ +{ + "hooks": { + "pre-commit": "lint-staged", + "pre-push": "npm run test" + } +} \ No newline at end of file diff --git a/.lintstagedrc.json b/.lintstagedrc.json new file mode 100644 index 00000000..353b9297 --- /dev/null +++ b/.lintstagedrc.json @@ -0,0 +1,3 @@ +{ + "*.ts": "prettier --write" +} \ No newline at end of file diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000..28a7ecfb --- /dev/null +++ b/.prettierignore @@ -0,0 +1,4 @@ +node_modules +dist +out-tsc +src/lib/validation/validators-paths.ts \ No newline at end of file diff --git a/.prettierrc.js b/.prettierrc.js new file mode 100644 index 00000000..ac12b22c --- /dev/null +++ b/.prettierrc.js @@ -0,0 +1,24 @@ +module.exports = { + printWidth: 120, /** Specify the line length that the printer will wrap on. */ + // tabWidth: 2, /** Specify the number of spaces per indentation-level. */ + // useTabs: false, /** Indent lines with tabs instead of spaces. */ + // semi: true, /** Print semicolons at the ends of statements. */ + singleQuote: true, /** Use single quotes instead of double quotes. */ + // quoteProps: 'as-needed', /** Change when properties in objects are quoted. */ + // jsxSingleQuote: false, /** Use single quotes instead of double quotes in JSX. */ + // trailingComma: 'es5', /** Print trailing commas wherever possible in multi-line comma-separated syntactic structures. (A single-line array, for example, never gets trailing commas.) */ + // bracketSpacing: true, /** Print spaces between brackets in object literals. */ + // jsxBracketSameLine: false, /** Put the > of a multi-line JSX element at the end of the last line instead of being alone on the next line (does not apply to self closing elements). */ + // arrowParens: 'always', /** Include parentheses around a sole arrow function parameter. */ + // rangeStart: 0, /** Format only a segment of a file. */ + // rangeEnd: Infinity, /** Format only a segment of a file. */ + // parser: None, /** Prettier automatically infers the parser from the input file path, so you shouldn’t have to change this setting. */ + // filepath: None, /** Specify the file name to use to infer which parser to use. */ + // requirePragma: false, /** Prettier can restrict itself to only format files that contain a special comment, called a pragma, at the top of the file. This is very useful when gradually transitioning large, unformatted codebases to Prettier. */ + // insertPragma: false, /** Prettier can insert a special @format marker at the top of files specifying that the file has been formatted with Prettier. This works well when used in tandem with the --require-pragma option. If there is already a docblock at the top of the file then this option will add a newline to it with the @format marker. */ + // proseWrap: 'preserve', /** By default, Prettier will wrap markdown text as-is since some services use a linebreak-sensitive renderer, e.g. GitHub comment and BitBucket. In some cases you may want to rely on editor/viewer soft wrapping instead, so this option allows you to opt out with "never". */ + // htmlWhitespaceSensitivity: 'css', /** Specify the global whitespace sensitivity for HTML, Vue, Angular, and Handlebars. See whitespace-sensitive formatting for more info. */ + // vueIndentScriptAndStyle: false, /** Whether or not to indent the code inside - - - + + + + + Serveless Workflow JS SDK + + + + + +
+ + + + diff --git a/examples/node/index.js b/examples/node/index.js index d4bfb805..767ce9c6 100644 --- a/examples/node/index.js +++ b/examples/node/index.js @@ -1,18 +1,18 @@ -const { workflowBuilder, injectstateBuilder } = require('../../dist'); -const workflow = workflowBuilder() - .id("helloworld") - .version("1.0") - .name("Hello World Workflow") - .description("Inject Hello World") - .start("Hello State") - .states([ - injectstateBuilder() - .name("Hello State") - .data({ - "result": "Hello World!" - }) - .end(true) - .build() - ]) - .build(); +const { workflowBuilder, injectstateBuilder } = require('../../dist'); +const workflow = workflowBuilder() + .id("helloworld") + .version("1.0") + .name("Hello World Workflow") + .description("Inject Hello World") + .start("Hello State") + .states([ + injectstateBuilder() + .name("Hello State") + .data({ + "result": "Hello World!" + }) + .end(true) + .build() + ]) + .build(); console.log(workflow.id); \ No newline at end of file diff --git a/examples/node/index.ts b/examples/node/index.ts index 9c098674..b5768952 100644 --- a/examples/node/index.ts +++ b/examples/node/index.ts @@ -1,18 +1,18 @@ import { workflowBuilder, injectstateBuilder, Specification } from '../../dist'; const workflow: Specification.Workflow = workflowBuilder() - .id("helloworld") - .version("1.0") - .name("Hello World Workflow") - .description("Inject Hello World") - .start("Hello State") - .states([ - injectstateBuilder() - .name("Hello State") - .data({ - "result": "Hello World!" - }) - .end(true) - .build() - ]) - .build(); -console.log(workflow.id); \ No newline at end of file + .id('helloworld') + .version('1.0') + .name('Hello World Workflow') + .description('Inject Hello World') + .start('Hello State') + .states([ + injectstateBuilder() + .name('Hello State') + .data({ + result: 'Hello World!', + }) + .end(true) + .build(), + ]) + .build(); +console.log(workflow.id); diff --git a/examples/node/tsconfig.json b/examples/node/tsconfig.json index 9536a0f4..a86f07e5 100644 --- a/examples/node/tsconfig.json +++ b/examples/node/tsconfig.json @@ -1,3 +1,3 @@ -{ - "extends": "../../tsconfig.base.json" -} +{ + "extends": "../../tsconfig.base.json" +} diff --git a/maintainer_guidelines.md b/maintainer_guidelines.md index 328ffba2..db5f923f 100644 --- a/maintainer_guidelines.md +++ b/maintainer_guidelines.md @@ -1,29 +1,29 @@ -# Maintainer's Guide - -## Tips - -Here are a few tips for repository maintainers. - -* Stay on top of your pull requests. PRs that languish for too long can become difficult to merge. -* Work from your own fork. As you are making contributions to the project, you should be working from your own fork just as outside contributors do. This keeps the branches in github to a minimum and reduces unnecessary CI runs. -* Try to proactively label issues with backport labels if it's obvious that a change should be backported to previous releases. -* When landing pull requests, if there is more than one commit, try to squash into a single commit. Usually this can just be done with the GitHub UI when merging the PR. Use "Squash and merge". -* Triage issues once in a while in order to keep the repository alive. During the triage: - * If some issues are stale for too long because they are no longer valid/relevant or because the discussion reached no significant action items to perform, close them and invite the users to reopen if they need it. - * If some PRs are no longer valid but still needed, ask the user to rebase them - * If some issues and PRs are still relevant, use labels to help organize tasks - * If you find an issue that you want to create a fix for and submit a pull request, be sure to assign it to yourself so that others maintainers don't start working on it at the same time. - -## Branch Management - -The `main` branch is the bleeding edge. New major versions of the module -are cut from this branch and tagged. If you intend to submit a pull request -you should use `main HEAD` as your starting point. - -Each major release will result in a new branch and tag. For example, the -release of version 1.0.0 of the project results in a `v1.0.0` tag on the -release commit, and a new branch `release-1.y.z` for subsequent minor and patch -level releases of that major version if necessary. However, development will continue -apace on `main` for the next major version - e.g. 2.0.0. Version branches -are only created for each major version. Minor and patch level releases -are simply tagged. +# Maintainer's Guide + +## Tips + +Here are a few tips for repository maintainers. + +* Stay on top of your pull requests. PRs that languish for too long can become difficult to merge. +* Work from your own fork. As you are making contributions to the project, you should be working from your own fork just as outside contributors do. This keeps the branches in github to a minimum and reduces unnecessary CI runs. +* Try to proactively label issues with backport labels if it's obvious that a change should be backported to previous releases. +* When landing pull requests, if there is more than one commit, try to squash into a single commit. Usually this can just be done with the GitHub UI when merging the PR. Use "Squash and merge". +* Triage issues once in a while in order to keep the repository alive. During the triage: + * If some issues are stale for too long because they are no longer valid/relevant or because the discussion reached no significant action items to perform, close them and invite the users to reopen if they need it. + * If some PRs are no longer valid but still needed, ask the user to rebase them + * If some issues and PRs are still relevant, use labels to help organize tasks + * If you find an issue that you want to create a fix for and submit a pull request, be sure to assign it to yourself so that others maintainers don't start working on it at the same time. + +## Branch Management + +The `main` branch is the bleeding edge. New major versions of the module +are cut from this branch and tagged. If you intend to submit a pull request +you should use `main HEAD` as your starting point. + +Each major release will result in a new branch and tag. For example, the +release of version 1.0.0 of the project results in a `v1.0.0` tag on the +release commit, and a new branch `release-1.y.z` for subsequent minor and patch +level releases of that major version if necessary. However, development will continue +apace on `main` for the next major version - e.g. 2.0.0. Version branches +are only created for each major version. Minor and patch level releases +are simply tagged. diff --git a/package-lock.json b/package-lock.json index c7d28c9b..c7634658 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,2854 +1,6800 @@ -{ - "name": "@severlessworkflow/sdk-typescript", - "version": "0.6.0", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "@severlessworkflow/sdk-typescript", - "version": "0.6.0", - "license": "http://www.apache.org/licenses/LICENSE-2.0.txt", - "dependencies": { - "ajv": "^8.1.0", - "js-yaml": "^4.1.0" - }, - "devDependencies": { - "@apidevtools/json-schema-ref-parser": "^9.0.7", - "@dtsgenerator/replace-namespace": "^1.4.1", - "@rollup/plugin-json": "^4.1.0", - "@types/jasmine": "^3.6.10", - "@types/js-yaml": "^4.0.1", - "@types/node-fetch": "^2.5.10", - "@types/rimraf": "^3.0.0", - "@types/yargs": "^16.0.1", - "dtsgenerator": "^3.10.0", - "jasmine": "^3.7.0", - "node-fetch": "^2.6.1", - "rimraf": "^3.0.2", - "rollup": "^2.47.0", - "rollup-plugin-commonjs": "^10.1.0", - "rollup-plugin-node-resolve": "^5.2.0", - "rollup-plugin-sourcemaps": "^0.6.3", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.30.0", - "shx": "^0.3.3", - "ts-node": "^9.1.1", - "typescript": "^4.2.4", - "yargs": "^17.0.1" - }, - "engines": { - "node": ">=15.0", - "npm": ">=7.0.0" - } - }, - "node_modules/@apidevtools/json-schema-ref-parser": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.7.tgz", - "integrity": "sha512-QdwOGF1+eeyFh+17v2Tz626WX0nucd1iKOm6JUTUvCZdbolblCOOQCxGrQPY0f7jEhn36PiAWqZnsC2r5vmUWg==", - "dev": true, - "dependencies": { - "@jsdevtools/ono": "^7.1.3", - "call-me-maybe": "^1.0.1", - "js-yaml": "^3.13.1" - } - }, - "node_modules/@apidevtools/json-schema-ref-parser/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@apidevtools/json-schema-ref-parser/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.12.13" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true - }, - "node_modules/@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "node_modules/@dtsgenerator/replace-namespace": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@dtsgenerator/replace-namespace/-/replace-namespace-1.4.1.tgz", - "integrity": "sha512-L0DFdirXdb6CBYiV5ILYfcgqY83ThhhYBhauhn3MserpTPs+ODLLMGCRPyWPAxH9z7YUCho3y37si7EVGfJYJQ==", - "dev": true, - "dependencies": { - "dtsgenerator": "^3.5.0", - "tslib": "^2.0.3" - } - }, - "node_modules/@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", - "dev": true - }, - "node_modules/@rollup/plugin-json": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", - "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.0.8" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "node_modules/@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "node_modules/@types/jasmine": { - "version": "3.6.10", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.6.10.tgz", - "integrity": "sha512-yfCl7JGtIc5LjScFpeIGBBNhJFkJdAAcsAnAd9ZRHwzh+sR2zkt257BKkTCF5VpJ8wMPnzzZ8QatRdXM8tqpKA==", - "dev": true - }, - "node_modules/@types/js-yaml": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.1.tgz", - "integrity": "sha512-xdOvNmXmrZqqPy3kuCQ+fz6wA0xU5pji9cd1nDrflWaAWtYLLGk5ykW0H6yg5TVyehHP1pfmuuSaZkhP+kspVA==", - "dev": true - }, - "node_modules/@types/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.1.tgz", - "integrity": "sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA==", - "dev": true - }, - "node_modules/@types/node-fetch": { - "version": "2.5.10", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.10.tgz", - "integrity": "sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "node_modules/@types/resolve": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/rimraf": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.0.tgz", - "integrity": "sha512-7WhJ0MdpFgYQPXlF4Dx+DhgvlPCfz/x5mHaeDQAKhcenvQP1KCpLQ18JklAqeGMYSAT2PxLpzd0g2/HE7fj7hQ==", - "dev": true, - "dependencies": { - "@types/glob": "*", - "@types/node": "*" - } - }, - "node_modules/@types/yargs": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.1.tgz", - "integrity": "sha512-x4HABGLyzr5hKUzBC9dvjciOTm11WVH1NWonNjGgxapnTHu5SWUqyqn0zQ6Re0yQU0lsQ6ztLCoMAKDGZflyxA==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "20.2.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", - "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", - "dev": true - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.2.0.tgz", - "integrity": "sha512-WSNGFuyWd//XO8n/m/EaOlNLtO0yL8EXT/74LqT4khdhpZjP7lkj/kT5uwRmGitKEVp/Oj7ZUHeGfPtgHhQ5CA==", - "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true, - "bin": { - "atob": "bin/atob.js" - }, - "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "node_modules/builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, - "engines": { - "node": ">= 10" - } - }, - "node_modules/commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/cross-fetch": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", - "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", - "dev": true, - "dependencies": { - "node-fetch": "2.6.1" - } - }, - "node_modules/debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dtsgenerator": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/dtsgenerator/-/dtsgenerator-3.10.0.tgz", - "integrity": "sha512-3MOlYOB7Y9OcWhbInWr3ndasfvwi8K5eB1SCQT3MsyeYFJ49j8ffFnGv09fz8hptOzvhDW0SzutB/HuMoaUP8w==", - "dev": true, - "dependencies": { - "commander": "^7.2.0", - "cross-fetch": "^3.1.4", - "debug": "^4.3.1", - "glob": "^7.1.6", - "https-proxy-agent": "^5.0.0", - "js-yaml": "^4.1.0", - "tslib": "^2.2.0", - "typescript": "^4.2.4" - }, - "bin": { - "dtsgen": "bin/dtsgen" - }, - "engines": { - "node": ">= 10.0" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "node_modules/find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-core-module": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz", - "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "node_modules/is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/jasmine": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.7.0.tgz", - "integrity": "sha512-wlzGQ+cIFzMEsI+wDqmOwvnjTvolLFwlcpYLCqSPPH0prOQaW3P+IzMhHYn934l1imNvw07oCyX+vGUv3wmtSQ==", - "dev": true, - "dependencies": { - "glob": "^7.1.6", - "jasmine-core": "~3.7.0" - }, - "bin": { - "jasmine": "bin/jasmine.js" - } - }, - "node_modules/jasmine-core": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.7.1.tgz", - "integrity": "sha512-DH3oYDS/AUvvr22+xUBW62m1Xoy7tUlY1tsxKEJvl5JeJ7q8zd1K5bUwiOxdH+erj6l2vAMM3hV25Xs9/WrmuQ==", - "dev": true - }, - "node_modules/jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">= 10.13.0" - } - }, - "node_modules/jest-worker/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.4" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", - "dev": true, - "dependencies": { - "mime-db": "1.47.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true, - "engines": { - "node": "4.x || >=6.0.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", - "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "engines": { - "node": ">=6" - } - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "dependencies": { - "resolve": "^1.1.6" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "dependencies": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rollup": { - "version": "2.47.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.47.0.tgz", - "integrity": "sha512-rqBjgq9hQfW0vRmz+0S062ORRNJXvwRpzxhFXORvar/maZqY6za3rgQ/p1Glg+j1hnc1GtYyQCPiAei95uTElg==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.1" - } - }, - "node_modules/rollup-plugin-commonjs": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz", - "integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-commonjs.", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1", - "is-reference": "^1.1.2", - "magic-string": "^0.25.2", - "resolve": "^1.11.0", - "rollup-pluginutils": "^2.8.1" - }, - "peerDependencies": { - "rollup": ">=1.12.0" - } - }, - "node_modules/rollup-plugin-commonjs/node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "node_modules/rollup-plugin-node-resolve": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz", - "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==", - "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-node-resolve.", - "dev": true, - "dependencies": { - "@types/resolve": "0.0.8", - "builtin-modules": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.11.1", - "rollup-pluginutils": "^2.8.1" - }, - "peerDependencies": { - "rollup": ">=1.11.0" - } - }, - "node_modules/rollup-plugin-sourcemaps": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz", - "integrity": "sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^3.0.9", - "source-map-resolve": "^0.6.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "@types/node": ">=10.0.0", - "rollup": ">=0.31.2" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - }, - "peerDependencies": { - "rollup": "^2.0.0" - } - }, - "node_modules/rollup-plugin-typescript2": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.30.0.tgz", - "integrity": "sha512-NUFszIQyhgDdhRS9ya/VEmsnpTe+GERDMmFo0Y+kf8ds51Xy57nPNGglJY+W6x1vcouA7Au7nsTgsLFj2I0PxQ==", - "dev": true, - "dependencies": { - "@rollup/pluginutils": "^4.1.0", - "find-cache-dir": "^3.3.1", - "fs-extra": "8.1.0", - "resolve": "1.20.0", - "tslib": "2.1.0" - }, - "peerDependencies": { - "rollup": ">=1.26.3", - "typescript": ">=2.4.0" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/@rollup/pluginutils": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz", - "integrity": "sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==", - "dev": true, - "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/rollup-plugin-typescript2/node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/rollup-plugin-typescript2/node_modules/tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", - "dev": true - }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "dependencies": { - "estree-walker": "^0.6.1" - } - }, - "node_modules/rollup-pluginutils/node_modules/estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "dev": true, - "dependencies": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - }, - "bin": { - "shjs": "bin/shjs" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/shx": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.3.tgz", - "integrity": "sha512-nZJ3HFWVoTSyyB+evEKjJ1STiixGztlqwKLTUNV5KqMWtGey9fTd4KU1gdZ1X9BV6215pswQ/Jew9NsuS/fNDA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.3", - "shelljs": "^0.8.4" - }, - "bin": { - "shx": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", - "dev": true, - "dependencies": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/source-map-support/node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/terser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", - "dev": true, - "dependencies": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, - "node_modules/ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "dev": true, - "dependencies": { - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "typescript": ">=2.7" - } - }, - "node_modules/tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", - "dev": true - }, - "node_modules/typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.0.1.tgz", - "integrity": "sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.7", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", - "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - } - }, - "dependencies": { - "@apidevtools/json-schema-ref-parser": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.7.tgz", - "integrity": "sha512-QdwOGF1+eeyFh+17v2Tz626WX0nucd1iKOm6JUTUvCZdbolblCOOQCxGrQPY0f7jEhn36PiAWqZnsC2r5vmUWg==", - "dev": true, - "requires": { - "@jsdevtools/ono": "^7.1.3", - "call-me-maybe": "^1.0.1", - "js-yaml": "^3.13.1" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, - "@babel/code-frame": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", - "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", - "dev": true, - "requires": { - "@babel/highlight": "^7.12.13" - } - }, - "@babel/helper-validator-identifier": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", - "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", - "dev": true - }, - "@babel/highlight": { - "version": "7.14.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", - "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.14.0", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - } - }, - "@dtsgenerator/replace-namespace": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/@dtsgenerator/replace-namespace/-/replace-namespace-1.4.1.tgz", - "integrity": "sha512-L0DFdirXdb6CBYiV5ILYfcgqY83ThhhYBhauhn3MserpTPs+ODLLMGCRPyWPAxH9z7YUCho3y37si7EVGfJYJQ==", - "dev": true, - "requires": { - "dtsgenerator": "^3.5.0", - "tslib": "^2.0.3" - } - }, - "@jsdevtools/ono": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", - "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", - "dev": true - }, - "@rollup/plugin-json": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", - "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.0.8" - } - }, - "@rollup/pluginutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", - "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", - "dev": true, - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - } - }, - "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", - "dev": true - }, - "@types/glob": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", - "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, - "@types/jasmine": { - "version": "3.6.10", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.6.10.tgz", - "integrity": "sha512-yfCl7JGtIc5LjScFpeIGBBNhJFkJdAAcsAnAd9ZRHwzh+sR2zkt257BKkTCF5VpJ8wMPnzzZ8QatRdXM8tqpKA==", - "dev": true - }, - "@types/js-yaml": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.1.tgz", - "integrity": "sha512-xdOvNmXmrZqqPy3kuCQ+fz6wA0xU5pji9cd1nDrflWaAWtYLLGk5ykW0H6yg5TVyehHP1pfmuuSaZkhP+kspVA==", - "dev": true - }, - "@types/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", - "dev": true - }, - "@types/node": { - "version": "15.0.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.1.tgz", - "integrity": "sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA==", - "dev": true - }, - "@types/node-fetch": { - "version": "2.5.10", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.10.tgz", - "integrity": "sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ==", - "dev": true, - "requires": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "@types/resolve": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", - "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/rimraf": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.0.tgz", - "integrity": "sha512-7WhJ0MdpFgYQPXlF4Dx+DhgvlPCfz/x5mHaeDQAKhcenvQP1KCpLQ18JklAqeGMYSAT2PxLpzd0g2/HE7fj7hQ==", - "dev": true, - "requires": { - "@types/glob": "*", - "@types/node": "*" - } - }, - "@types/yargs": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.1.tgz", - "integrity": "sha512-x4HABGLyzr5hKUzBC9dvjciOTm11WVH1NWonNjGgxapnTHu5SWUqyqn0zQ6Re0yQU0lsQ6ztLCoMAKDGZflyxA==", - "dev": true, - "requires": { - "@types/yargs-parser": "*" - } - }, - "@types/yargs-parser": { - "version": "20.2.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", - "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "ajv": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.2.0.tgz", - "integrity": "sha512-WSNGFuyWd//XO8n/m/EaOlNLtO0yL8EXT/74LqT4khdhpZjP7lkj/kT5uwRmGitKEVp/Oj7ZUHeGfPtgHhQ5CA==", - "requires": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" - } - }, - "ansi-regex": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "buffer-from": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true - }, - "builtin-modules": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", - "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", - "dev": true - }, - "call-me-maybe": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", - "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", - "dev": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - }, - "commondir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", - "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "cross-fetch": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", - "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", - "dev": true, - "requires": { - "node-fetch": "2.6.1" - } - }, - "debug": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", - "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - }, - "dtsgenerator": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/dtsgenerator/-/dtsgenerator-3.10.0.tgz", - "integrity": "sha512-3MOlYOB7Y9OcWhbInWr3ndasfvwi8K5eB1SCQT3MsyeYFJ49j8ffFnGv09fz8hptOzvhDW0SzutB/HuMoaUP8w==", - "dev": true, - "requires": { - "commander": "^7.2.0", - "cross-fetch": "^3.1.4", - "debug": "^4.3.1", - "glob": "^7.1.6", - "https-proxy-agent": "^5.0.0", - "js-yaml": "^4.1.0", - "tslib": "^2.2.0", - "typescript": "^4.2.4" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "estree-walker": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", - "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" - }, - "find-cache-dir": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", - "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "glob": { - "version": "7.1.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", - "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", - "dev": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "https-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", - "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "interpret": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", - "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", - "dev": true - }, - "is-core-module": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz", - "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==", - "dev": true, - "requires": { - "has": "^1.0.3" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", - "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", - "dev": true - }, - "is-reference": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", - "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", - "dev": true, - "requires": { - "@types/estree": "*" - } - }, - "jasmine": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.7.0.tgz", - "integrity": "sha512-wlzGQ+cIFzMEsI+wDqmOwvnjTvolLFwlcpYLCqSPPH0prOQaW3P+IzMhHYn934l1imNvw07oCyX+vGUv3wmtSQ==", - "dev": true, - "requires": { - "glob": "^7.1.6", - "jasmine-core": "~3.7.0" - } - }, - "jasmine-core": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.7.1.tgz", - "integrity": "sha512-DH3oYDS/AUvvr22+xUBW62m1Xoy7tUlY1tsxKEJvl5JeJ7q8zd1K5bUwiOxdH+erj6l2vAMM3hV25Xs9/WrmuQ==", - "dev": true - }, - "jest-worker": { - "version": "26.6.2", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", - "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", - "dev": true, - "requires": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^7.0.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "requires": { - "argparse": "^2.0.1" - } - }, - "json-schema-traverse": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "magic-string": { - "version": "0.25.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", - "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", - "dev": true, - "requires": { - "sourcemap-codec": "^1.4.4" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "requires": { - "semver": "^6.0.0" - } - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "mime-db": { - "version": "1.47.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", - "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", - "dev": true - }, - "mime-types": { - "version": "2.1.30", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", - "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", - "dev": true, - "requires": { - "mime-db": "1.47.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "picomatch": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", - "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", - "dev": true - }, - "pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "requires": { - "find-up": "^4.0.0" - } - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" - }, - "resolve": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", - "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", - "dev": true, - "requires": { - "is-core-module": "^2.2.0", - "path-parse": "^1.0.6" - } - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "rollup": { - "version": "2.47.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.47.0.tgz", - "integrity": "sha512-rqBjgq9hQfW0vRmz+0S062ORRNJXvwRpzxhFXORvar/maZqY6za3rgQ/p1Glg+j1hnc1GtYyQCPiAei95uTElg==", - "dev": true, - "requires": { - "fsevents": "~2.3.1" - } - }, - "rollup-plugin-commonjs": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz", - "integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==", - "dev": true, - "requires": { - "estree-walker": "^0.6.1", - "is-reference": "^1.1.2", - "magic-string": "^0.25.2", - "resolve": "^1.11.0", - "rollup-pluginutils": "^2.8.1" - }, - "dependencies": { - "estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - } - } - }, - "rollup-plugin-node-resolve": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz", - "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==", - "dev": true, - "requires": { - "@types/resolve": "0.0.8", - "builtin-modules": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.11.1", - "rollup-pluginutils": "^2.8.1" - } - }, - "rollup-plugin-sourcemaps": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz", - "integrity": "sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^3.0.9", - "source-map-resolve": "^0.6.0" - } - }, - "rollup-plugin-terser": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", - "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", - "dev": true, - "requires": { - "@babel/code-frame": "^7.10.4", - "jest-worker": "^26.2.1", - "serialize-javascript": "^4.0.0", - "terser": "^5.0.0" - } - }, - "rollup-plugin-typescript2": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.30.0.tgz", - "integrity": "sha512-NUFszIQyhgDdhRS9ya/VEmsnpTe+GERDMmFo0Y+kf8ds51Xy57nPNGglJY+W6x1vcouA7Au7nsTgsLFj2I0PxQ==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^4.1.0", - "find-cache-dir": "^3.3.1", - "fs-extra": "8.1.0", - "resolve": "1.20.0", - "tslib": "2.1.0" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz", - "integrity": "sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==", - "dev": true, - "requires": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" - } - }, - "estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "tslib": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", - "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", - "dev": true - } - } - }, - "rollup-pluginutils": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", - "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", - "dev": true, - "requires": { - "estree-walker": "^0.6.1" - }, - "dependencies": { - "estree-walker": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", - "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", - "dev": true - } - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "serialize-javascript": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", - "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "shelljs": { - "version": "0.8.4", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", - "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", - "dev": true, - "requires": { - "glob": "^7.0.0", - "interpret": "^1.0.0", - "rechoir": "^0.6.2" - } - }, - "shx": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.3.tgz", - "integrity": "sha512-nZJ3HFWVoTSyyB+evEKjJ1STiixGztlqwKLTUNV5KqMWtGey9fTd4KU1gdZ1X9BV6215pswQ/Jew9NsuS/fNDA==", - "dev": true, - "requires": { - "minimist": "^1.2.3", - "shelljs": "^0.8.4" - } - }, - "source-map": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", - "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", - "dev": true - }, - "source-map-resolve": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", - "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", - "dev": true, - "requires": { - "atob": "^2.1.2", - "decode-uri-component": "^0.2.0" - } - }, - "source-map-support": { - "version": "0.5.19", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", - "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "dev": true - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - }, - "string-width": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", - "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.0" - } - }, - "strip-ansi": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", - "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.0" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "terser": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", - "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", - "dev": true, - "requires": { - "commander": "^2.20.0", - "source-map": "~0.7.2", - "source-map-support": "~0.5.19" - }, - "dependencies": { - "commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - } - } - }, - "ts-node": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", - "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", - "dev": true, - "requires": { - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - } - }, - "tslib": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", - "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", - "dev": true - }, - "typescript": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", - "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", - "dev": true - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "requires": { - "punycode": "^2.1.0" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yargs": { - "version": "17.0.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.0.1.tgz", - "integrity": "sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.7", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", - "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", - "dev": true - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - } - } -} +{ + "name": "@severlessworkflow/sdk-typescript", + "version": "0.6.0", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "@severlessworkflow/sdk-typescript", + "version": "0.6.0", + "license": "http://www.apache.org/licenses/LICENSE-2.0.txt", + "dependencies": { + "ajv": "^8.1.0", + "js-yaml": "^4.1.0" + }, + "devDependencies": { + "@apidevtools/json-schema-ref-parser": "^9.0.7", + "@dtsgenerator/replace-namespace": "^1.4.1", + "@rollup/plugin-json": "^4.1.0", + "@types/jasmine": "^3.6.10", + "@types/js-yaml": "^4.0.1", + "@types/node-fetch": "^2.5.10", + "@types/rimraf": "^3.0.0", + "@types/yargs": "^16.0.1", + "@typescript-eslint/eslint-plugin": "^4.23.0", + "@typescript-eslint/parser": "^4.23.0", + "dtsgenerator": "^3.10.0", + "eslint": "^7.26.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-prettier": "^3.4.0", + "husky": "6.0.0", + "jasmine": "^3.7.0", + "lint-staged": "11.0.0", + "node-fetch": "^2.6.1", + "prettier": "^2.3.0", + "rimraf": "^3.0.2", + "rollup": "^2.47.0", + "rollup-plugin-commonjs": "^10.1.0", + "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-sourcemaps": "^0.6.3", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-typescript2": "^0.30.0", + "shx": "^0.3.3", + "ts-node": "^9.1.1", + "typescript": "^4.2.4", + "yargs": "^17.0.1" + }, + "engines": { + "node": ">=15.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.7.tgz", + "integrity": "sha512-QdwOGF1+eeyFh+17v2Tz626WX0nucd1iKOm6JUTUvCZdbolblCOOQCxGrQPY0f7jEhn36PiAWqZnsC2r5vmUWg==", + "dev": true, + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "call-me-maybe": "^1.0.1", + "js-yaml": "^3.13.1" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.12.13" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "node_modules/@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "node_modules/@dtsgenerator/replace-namespace": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@dtsgenerator/replace-namespace/-/replace-namespace-1.4.1.tgz", + "integrity": "sha512-L0DFdirXdb6CBYiV5ILYfcgqY83ThhhYBhauhn3MserpTPs+ODLLMGCRPyWPAxH9z7YUCho3y37si7EVGfJYJQ==", + "dev": true, + "dependencies": { + "dtsgenerator": "^3.5.0", + "tslib": "^2.0.3" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", + "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/@eslint/eslintrc/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", + "dev": true + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@rollup/plugin-json": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", + "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.0.8" + }, + "peerDependencies": { + "rollup": "^1.20.0 || ^2.0.0" + } + }, + "node_modules/@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "dependencies": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "node_modules/@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "3.6.10", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.6.10.tgz", + "integrity": "sha512-yfCl7JGtIc5LjScFpeIGBBNhJFkJdAAcsAnAd9ZRHwzh+sR2zkt257BKkTCF5VpJ8wMPnzzZ8QatRdXM8tqpKA==", + "dev": true + }, + "node_modules/@types/js-yaml": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.1.tgz", + "integrity": "sha512-xdOvNmXmrZqqPy3kuCQ+fz6wA0xU5pji9cd1nDrflWaAWtYLLGk5ykW0H6yg5TVyehHP1pfmuuSaZkhP+kspVA==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.1.tgz", + "integrity": "sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA==", + "dev": true + }, + "node_modules/@types/node-fetch": { + "version": "2.5.10", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.10.tgz", + "integrity": "sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/rimraf": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.0.tgz", + "integrity": "sha512-7WhJ0MdpFgYQPXlF4Dx+DhgvlPCfz/x5mHaeDQAKhcenvQP1KCpLQ18JklAqeGMYSAT2PxLpzd0g2/HE7fj7hQ==", + "dev": true, + "dependencies": { + "@types/glob": "*", + "@types/node": "*" + } + }, + "node_modules/@types/yargs": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.1.tgz", + "integrity": "sha512-x4HABGLyzr5hKUzBC9dvjciOTm11WVH1NWonNjGgxapnTHu5SWUqyqn0zQ6Re0yQU0lsQ6ztLCoMAKDGZflyxA==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", + "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.23.0.tgz", + "integrity": "sha512-tGK1y3KIvdsQEEgq6xNn1DjiFJtl+wn8JJQiETtCbdQxw1vzjXyAaIkEmO2l6Nq24iy3uZBMFQjZ6ECf1QdgGw==", + "dev": true, + "dependencies": { + "@typescript-eslint/experimental-utils": "4.23.0", + "@typescript-eslint/scope-manager": "4.23.0", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "lodash": "^4.17.15", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^4.0.0", + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.23.0.tgz", + "integrity": "sha512-WAFNiTDnQfrF3Z2fQ05nmCgPsO5o790vOhmWKXbbYQTO9erE1/YsFot5/LnOUizLzU2eeuz6+U/81KV5/hFTGA==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/scope-manager": "4.23.0", + "@typescript-eslint/types": "4.23.0", + "@typescript-eslint/typescript-estree": "4.23.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.23.0.tgz", + "integrity": "sha512-wsvjksHBMOqySy/Pi2Q6UuIuHYbgAMwLczRl4YanEPKW5KVxI9ZzDYh3B5DtcZPQTGRWFJrfcbJ6L01Leybwug==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "4.23.0", + "@typescript-eslint/types": "4.23.0", + "@typescript-eslint/typescript-estree": "4.23.0", + "debug": "^4.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0 || ^7.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.23.0.tgz", + "integrity": "sha512-ZZ21PCFxPhI3n0wuqEJK9omkw51wi2bmeKJvlRZPH5YFkcawKOuRMQMnI8mH6Vo0/DoHSeZJnHiIx84LmVQY+w==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.23.0", + "@typescript-eslint/visitor-keys": "4.23.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.23.0.tgz", + "integrity": "sha512-oqkNWyG2SLS7uTWLZf6Sr7Dm02gA5yxiz1RP87tvsmDsguVATdpVguHr4HoGOcFOpCvx9vtCSCyQUGfzq28YCw==", + "dev": true, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.23.0.tgz", + "integrity": "sha512-5Sty6zPEVZF5fbvrZczfmLCOcby3sfrSPu30qKoY1U3mca5/jvU5cwsPb/CO6Q3ByRjixTMIVsDkqwIxCf/dMw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.23.0", + "@typescript-eslint/visitor-keys": "4.23.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.23.0.tgz", + "integrity": "sha512-5PNe5cmX9pSifit0H+nPoQBXdbNzi5tOEec+3riK+ku4e3er37pKxMKDH5Ct5Y4fhWxcD4spnlYjxi9vXbSpwg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "4.23.0", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.2.0.tgz", + "integrity": "sha512-WSNGFuyWd//XO8n/m/EaOlNLtO0yL8EXT/74LqT4khdhpZjP7lkj/kT5uwRmGitKEVp/Oj7ZUHeGfPtgHhQ5CA==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true, + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "node_modules/builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cli-truncate/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cli-truncate/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/cli-truncate/node_modules/slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-fetch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", + "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", + "dev": true, + "dependencies": { + "node-fetch": "2.6.1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "node_modules/deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dtsgenerator": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/dtsgenerator/-/dtsgenerator-3.10.0.tgz", + "integrity": "sha512-3MOlYOB7Y9OcWhbInWr3ndasfvwi8K5eB1SCQT3MsyeYFJ49j8ffFnGv09fz8hptOzvhDW0SzutB/HuMoaUP8w==", + "dev": true, + "dependencies": { + "commander": "^7.2.0", + "cross-fetch": "^3.1.4", + "debug": "^4.3.1", + "glob": "^7.1.6", + "https-proxy-agent": "^5.0.0", + "js-yaml": "^4.1.0", + "tslib": "^2.2.0", + "typescript": "^4.2.4" + }, + "bin": { + "dtsgen": "bin/dtsgen" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz", + "integrity": "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.21", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz", + "integrity": "sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==", + "dev": true, + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=5.0.0", + "prettier": ">=1.13.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/eslint/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "node_modules/fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "dependencies": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "node_modules/form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", + "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", + "dev": true, + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/husky": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz", + "integrity": "sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==", + "dev": true, + "bin": { + "husky": "lib/bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz", + "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "node_modules/jasmine": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.7.0.tgz", + "integrity": "sha512-wlzGQ+cIFzMEsI+wDqmOwvnjTvolLFwlcpYLCqSPPH0prOQaW3P+IzMhHYn934l1imNvw07oCyX+vGUv3wmtSQ==", + "dev": true, + "dependencies": { + "glob": "^7.1.6", + "jasmine-core": "~3.7.0" + }, + "bin": { + "jasmine": "bin/jasmine.js" + } + }, + "node_modules/jasmine-core": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.7.1.tgz", + "integrity": "sha512-DH3oYDS/AUvvr22+xUBW62m1Xoy7tUlY1tsxKEJvl5JeJ7q8zd1K5bUwiOxdH+erj6l2vAMM3hV25Xs9/WrmuQ==", + "dev": true + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "node_modules/lint-staged": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.0.0.tgz", + "integrity": "sha512-3rsRIoyaE8IphSUtO1RVTFl1e0SLBtxxUOPBtHxQgBHS5/i6nqvjcUfNioMa4BU9yGnPzbO+xkfLtXtxBpCzjw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.1", + "cli-truncate": "^2.1.0", + "commander": "^7.2.0", + "cosmiconfig": "^7.0.0", + "debug": "^4.3.1", + "dedent": "^0.7.0", + "enquirer": "^2.3.6", + "execa": "^5.0.0", + "listr2": "^3.8.2", + "log-symbols": "^4.1.0", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", + "please-upgrade-node": "^3.2.0", + "string-argv": "0.3.1", + "stringify-object": "^3.3.0" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/lint-staged/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/lint-staged/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/lint-staged/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.8.2.tgz", + "integrity": "sha512-E28Fw7Zd3HQlCJKzb9a8C8M0HtFWQeucE+S8YrSrqZObuCLPRHMRrR8gNmYt65cU9orXYHwvN5agXC36lYt7VQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.1", + "cli-truncate": "^2.1.0", + "figures": "^3.2.0", + "indent-string": "^4.0.0", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rxjs": "^6.6.7", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/listr2/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/listr2/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/listr2/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/listr2/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-update/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "dependencies": { + "sourcemap-codec": "^1.4.4" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "dependencies": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "dev": true, + "dependencies": { + "mime-db": "1.47.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node_modules/node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "dev": true, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "dependencies": { + "semver-compare": "^1.0.0" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz", + "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "dependencies": { + "resolve": "^1.1.6" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "dependencies": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "2.47.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.47.0.tgz", + "integrity": "sha512-rqBjgq9hQfW0vRmz+0S062ORRNJXvwRpzxhFXORvar/maZqY6za3rgQ/p1Glg+j1hnc1GtYyQCPiAei95uTElg==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.1" + } + }, + "node_modules/rollup-plugin-commonjs": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz", + "integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-commonjs.", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1", + "is-reference": "^1.1.2", + "magic-string": "^0.25.2", + "resolve": "^1.11.0", + "rollup-pluginutils": "^2.8.1" + }, + "peerDependencies": { + "rollup": ">=1.12.0" + } + }, + "node_modules/rollup-plugin-commonjs/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "node_modules/rollup-plugin-node-resolve": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz", + "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==", + "deprecated": "This package has been deprecated and is no longer maintained. Please use @rollup/plugin-node-resolve.", + "dev": true, + "dependencies": { + "@types/resolve": "0.0.8", + "builtin-modules": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.11.1", + "rollup-pluginutils": "^2.8.1" + }, + "peerDependencies": { + "rollup": ">=1.11.0" + } + }, + "node_modules/rollup-plugin-sourcemaps": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz", + "integrity": "sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^3.0.9", + "source-map-resolve": "^0.6.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "@types/node": ">=10.0.0", + "rollup": ">=0.31.2" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + }, + "peerDependencies": { + "rollup": "^2.0.0" + } + }, + "node_modules/rollup-plugin-typescript2": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.30.0.tgz", + "integrity": "sha512-NUFszIQyhgDdhRS9ya/VEmsnpTe+GERDMmFo0Y+kf8ds51Xy57nPNGglJY+W6x1vcouA7Au7nsTgsLFj2I0PxQ==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^4.1.0", + "find-cache-dir": "^3.3.1", + "fs-extra": "8.1.0", + "resolve": "1.20.0", + "tslib": "2.1.0" + }, + "peerDependencies": { + "rollup": ">=1.26.3", + "typescript": ">=2.4.0" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/@rollup/pluginutils": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz", + "integrity": "sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==", + "dev": true, + "dependencies": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0" + } + }, + "node_modules/rollup-plugin-typescript2/node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/rollup-plugin-typescript2/node_modules/tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + }, + "node_modules/rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "dependencies": { + "estree-walker": "^0.6.1" + } + }, + "node_modules/rollup-pluginutils/node_modules/estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + }, + "bin": { + "shjs": "bin/shjs" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/shx": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.3.tgz", + "integrity": "sha512-nZJ3HFWVoTSyyB+evEKjJ1STiixGztlqwKLTUNV5KqMWtGey9fTd4KU1gdZ1X9BV6215pswQ/Jew9NsuS/fNDA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.3", + "shelljs": "^0.8.4" + }, + "bin": { + "shx": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "dev": true, + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "node_modules/string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "dependencies": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/terser": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", + "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", + "dev": true, + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "dependencies": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, + "node_modules/tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typescript": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", + "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.0.1.tgz", + "integrity": "sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + } + }, + "dependencies": { + "@apidevtools/json-schema-ref-parser": { + "version": "9.0.7", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.7.tgz", + "integrity": "sha512-QdwOGF1+eeyFh+17v2Tz626WX0nucd1iKOm6JUTUvCZdbolblCOOQCxGrQPY0f7jEhn36PiAWqZnsC2r5vmUWg==", + "dev": true, + "requires": { + "@jsdevtools/ono": "^7.1.3", + "call-me-maybe": "^1.0.1", + "js-yaml": "^3.13.1" + }, + "dependencies": { + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + } + } + }, + "@babel/code-frame": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.13.tgz", + "integrity": "sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g==", + "dev": true, + "requires": { + "@babel/highlight": "^7.12.13" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.0.tgz", + "integrity": "sha512-V3ts7zMSu5lfiwWDVWzRDGIN+lnCEUdaXgtVHJgLb1rGaA6jMrtB9EmE7L18foXJIE8Un/A/h6NJfGQp/e1J4A==", + "dev": true + }, + "@babel/highlight": { + "version": "7.14.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.0.tgz", + "integrity": "sha512-YSCOwxvTYEIMSGaBQb5kDDsCopDdiUGsqpatp3fOlI4+2HQSkTmEVWnVuySdAC5EWCqSWWTv0ib63RjR7dTBdg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.0", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + } + }, + "@dtsgenerator/replace-namespace": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@dtsgenerator/replace-namespace/-/replace-namespace-1.4.1.tgz", + "integrity": "sha512-L0DFdirXdb6CBYiV5ILYfcgqY83ThhhYBhauhn3MserpTPs+ODLLMGCRPyWPAxH9z7YUCho3y37si7EVGfJYJQ==", + "dev": true, + "requires": { + "dtsgenerator": "^3.5.0", + "tslib": "^2.0.3" + } + }, + "@eslint/eslintrc": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.1.tgz", + "integrity": "sha512-5v7TDE9plVhvxQeWLXDTvFvJBdH6pEsdnl2g/dAptmuFEPedQ4Erq5rsDsX+mvAM610IhNaO2W5V1dOOnDKxkQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "globals": { + "version": "12.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, + "@rollup/plugin-json": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", + "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.8" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/glob": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz", + "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/jasmine": { + "version": "3.6.10", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-3.6.10.tgz", + "integrity": "sha512-yfCl7JGtIc5LjScFpeIGBBNhJFkJdAAcsAnAd9ZRHwzh+sR2zkt257BKkTCF5VpJ8wMPnzzZ8QatRdXM8tqpKA==", + "dev": true + }, + "@types/js-yaml": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.1.tgz", + "integrity": "sha512-xdOvNmXmrZqqPy3kuCQ+fz6wA0xU5pji9cd1nDrflWaAWtYLLGk5ykW0H6yg5TVyehHP1pfmuuSaZkhP+kspVA==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.7", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.7.tgz", + "integrity": "sha512-cxWFQVseBm6O9Gbw1IWb8r6OS4OhSt3hPZLkFApLjM8TEXROBuQGLAH2i2gZpcXdLBIrpXuTDhH7Vbm1iXmNGA==", + "dev": true + }, + "@types/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA==", + "dev": true + }, + "@types/node": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-15.0.1.tgz", + "integrity": "sha512-TMkXt0Ck1y0KKsGr9gJtWGjttxlZnnvDtphxUOSd0bfaR6Q1jle+sPvrzNR1urqYTWMinoKvjKfXUGsumaO1PA==", + "dev": true + }, + "@types/node-fetch": { + "version": "2.5.10", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.10.tgz", + "integrity": "sha512-IpkX0AasN44hgEad0gEF/V6EgR5n69VEqPEgnmoM8GsIGro3PowbWs4tR6IhxUTyPLpOn+fiGG6nrQhcmoCuIQ==", + "dev": true, + "requires": { + "@types/node": "*", + "form-data": "^3.0.0" + } + }, + "@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "@types/resolve": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-0.0.8.tgz", + "integrity": "sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/rimraf": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/rimraf/-/rimraf-3.0.0.tgz", + "integrity": "sha512-7WhJ0MdpFgYQPXlF4Dx+DhgvlPCfz/x5mHaeDQAKhcenvQP1KCpLQ18JklAqeGMYSAT2PxLpzd0g2/HE7fj7hQ==", + "dev": true, + "requires": { + "@types/glob": "*", + "@types/node": "*" + } + }, + "@types/yargs": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.1.tgz", + "integrity": "sha512-x4HABGLyzr5hKUzBC9dvjciOTm11WVH1NWonNjGgxapnTHu5SWUqyqn0zQ6Re0yQU0lsQ6ztLCoMAKDGZflyxA==", + "dev": true, + "requires": { + "@types/yargs-parser": "*" + } + }, + "@types/yargs-parser": { + "version": "20.2.0", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-20.2.0.tgz", + "integrity": "sha512-37RSHht+gzzgYeobbG+KWryeAW8J33Nhr69cjTqSYymXVZEN9NbRYWoYlRtDhHKPVT1FyNKwaTPC1NynKZpzRA==", + "dev": true + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.23.0.tgz", + "integrity": "sha512-tGK1y3KIvdsQEEgq6xNn1DjiFJtl+wn8JJQiETtCbdQxw1vzjXyAaIkEmO2l6Nq24iy3uZBMFQjZ6ECf1QdgGw==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.23.0", + "@typescript-eslint/scope-manager": "4.23.0", + "debug": "^4.1.1", + "functional-red-black-tree": "^1.0.1", + "lodash": "^4.17.15", + "regexpp": "^3.0.0", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.23.0.tgz", + "integrity": "sha512-WAFNiTDnQfrF3Z2fQ05nmCgPsO5o790vOhmWKXbbYQTO9erE1/YsFot5/LnOUizLzU2eeuz6+U/81KV5/hFTGA==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/scope-manager": "4.23.0", + "@typescript-eslint/types": "4.23.0", + "@typescript-eslint/typescript-estree": "4.23.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^2.0.0" + } + }, + "@typescript-eslint/parser": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.23.0.tgz", + "integrity": "sha512-wsvjksHBMOqySy/Pi2Q6UuIuHYbgAMwLczRl4YanEPKW5KVxI9ZzDYh3B5DtcZPQTGRWFJrfcbJ6L01Leybwug==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.23.0", + "@typescript-eslint/types": "4.23.0", + "@typescript-eslint/typescript-estree": "4.23.0", + "debug": "^4.1.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.23.0.tgz", + "integrity": "sha512-ZZ21PCFxPhI3n0wuqEJK9omkw51wi2bmeKJvlRZPH5YFkcawKOuRMQMnI8mH6Vo0/DoHSeZJnHiIx84LmVQY+w==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.23.0", + "@typescript-eslint/visitor-keys": "4.23.0" + } + }, + "@typescript-eslint/types": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.23.0.tgz", + "integrity": "sha512-oqkNWyG2SLS7uTWLZf6Sr7Dm02gA5yxiz1RP87tvsmDsguVATdpVguHr4HoGOcFOpCvx9vtCSCyQUGfzq28YCw==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.23.0.tgz", + "integrity": "sha512-5Sty6zPEVZF5fbvrZczfmLCOcby3sfrSPu30qKoY1U3mca5/jvU5cwsPb/CO6Q3ByRjixTMIVsDkqwIxCf/dMw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.23.0", + "@typescript-eslint/visitor-keys": "4.23.0", + "debug": "^4.1.1", + "globby": "^11.0.1", + "is-glob": "^4.0.1", + "semver": "^7.3.2", + "tsutils": "^3.17.1" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.23.0.tgz", + "integrity": "sha512-5PNe5cmX9pSifit0H+nPoQBXdbNzi5tOEec+3riK+ku4e3er37pKxMKDH5Ct5Y4fhWxcD4spnlYjxi9vXbSpwg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.23.0", + "eslint-visitor-keys": "^2.0.0" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-jsx": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.1.tgz", + "integrity": "sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng==", + "dev": true, + "requires": {} + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "requires": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + } + }, + "ajv": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.2.0.tgz", + "integrity": "sha512-WSNGFuyWd//XO8n/m/EaOlNLtO0yL8EXT/74LqT4khdhpZjP7lkj/kT5uwRmGitKEVp/Oj7ZUHeGfPtgHhQ5CA==", + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "dev": true + }, + "ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "requires": { + "type-fest": "^0.21.3" + }, + "dependencies": { + "type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true + } + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true + }, + "cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "requires": { + "restore-cursor": "^3.1.0" + } + }, + "cli-truncate": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", + "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "dev": true, + "requires": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "slice-ansi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", + "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + } + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "requires": { + "delayed-stream": "~1.0.0" + } + }, + "commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "cosmiconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.0.tgz", + "integrity": "sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA==", + "dev": true, + "requires": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-fetch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-3.1.4.tgz", + "integrity": "sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ==", + "dev": true, + "requires": { + "node-fetch": "2.6.1" + } + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "debug": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.1.tgz", + "integrity": "sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "dtsgenerator": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/dtsgenerator/-/dtsgenerator-3.10.0.tgz", + "integrity": "sha512-3MOlYOB7Y9OcWhbInWr3ndasfvwi8K5eB1SCQT3MsyeYFJ49j8ffFnGv09fz8hptOzvhDW0SzutB/HuMoaUP8w==", + "dev": true, + "requires": { + "commander": "^7.2.0", + "cross-fetch": "^3.1.4", + "debug": "^4.3.1", + "glob": "^7.1.6", + "https-proxy-agent": "^5.0.0", + "js-yaml": "^4.1.0", + "tslib": "^2.2.0", + "typescript": "^4.2.4" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "eslint": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.26.0.tgz", + "integrity": "sha512-4R1ieRf52/izcZE7AlLy56uIHHDLT74Yzz2Iv2l6kDaYvEu9x+wMB5dZArVL8SYGXSYV2YAg70FcW5Y5nGGNIg==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.1", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash": "^4.17.21", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.4", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "eslint-config-prettier": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz", + "integrity": "sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew==", + "dev": true, + "requires": {} + }, + "eslint-plugin-prettier": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz", + "integrity": "sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw==", + "dev": true, + "requires": { + "prettier-linter-helpers": "^1.0.0" + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + } + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "fast-diff": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", + "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", + "dev": true + }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.0", + "merge2": "^1.3.0", + "micromatch": "^4.0.2", + "picomatch": "^2.2.1" + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.0.tgz", + "integrity": "sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "find-cache-dir": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz", + "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==", + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + } + }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", + "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", + "dev": true + }, + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "globals": { + "version": "13.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.8.0.tgz", + "integrity": "sha512-rHtdA6+PDBIjeEvA91rpqzEvk/k3/i7EeNQiryiWuJH0Hw9cpyJMAt2jtbAwUaRdhD+573X4vWw6IcjKPasi9Q==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "globby": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.3.tgz", + "integrity": "sha512-ffdmosjA807y7+lA1NM0jELARVmYul/715xiILEjo3hBLPTcirgQNnXECn5g3mtR8TOLCVbkfua1Hpen25/Xcg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + }, + "dependencies": { + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + } + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true + }, + "husky": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/husky/-/husky-6.0.0.tgz", + "integrity": "sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ==", + "dev": true + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "interpret": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz", + "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-core-module": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.3.0.tgz", + "integrity": "sha512-xSphU2KG9867tsYdLD4RWQ1VqdFl4HTO9Thf3I/3dLEfr0dbPTWKsuCKrgqMljg4nPE+Gq0VCnzT3gr0CyBmsw==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", + "dev": true + }, + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true + }, + "is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true + }, + "is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "jasmine": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-3.7.0.tgz", + "integrity": "sha512-wlzGQ+cIFzMEsI+wDqmOwvnjTvolLFwlcpYLCqSPPH0prOQaW3P+IzMhHYn934l1imNvw07oCyX+vGUv3wmtSQ==", + "dev": true, + "requires": { + "glob": "^7.1.6", + "jasmine-core": "~3.7.0" + } + }, + "jasmine-core": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-3.7.1.tgz", + "integrity": "sha512-DH3oYDS/AUvvr22+xUBW62m1Xoy7tUlY1tsxKEJvl5JeJ7q8zd1K5bUwiOxdH+erj6l2vAMM3hV25Xs9/WrmuQ==", + "dev": true + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "lint-staged": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-11.0.0.tgz", + "integrity": "sha512-3rsRIoyaE8IphSUtO1RVTFl1e0SLBtxxUOPBtHxQgBHS5/i6nqvjcUfNioMa4BU9yGnPzbO+xkfLtXtxBpCzjw==", + "dev": true, + "requires": { + "chalk": "^4.1.1", + "cli-truncate": "^2.1.0", + "commander": "^7.2.0", + "cosmiconfig": "^7.0.0", + "debug": "^4.3.1", + "dedent": "^0.7.0", + "enquirer": "^2.3.6", + "execa": "^5.0.0", + "listr2": "^3.8.2", + "log-symbols": "^4.1.0", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", + "please-upgrade-node": "^3.2.0", + "string-argv": "0.3.1", + "stringify-object": "^3.3.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "listr2": { + "version": "3.8.2", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-3.8.2.tgz", + "integrity": "sha512-E28Fw7Zd3HQlCJKzb9a8C8M0HtFWQeucE+S8YrSrqZObuCLPRHMRrR8gNmYt65cU9orXYHwvN5agXC36lYt7VQ==", + "dev": true, + "requires": { + "chalk": "^4.1.1", + "cli-truncate": "^2.1.0", + "figures": "^3.2.0", + "indent-string": "^4.0.0", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rxjs": "^6.6.7", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "requires": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "log-update": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", + "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "dev": true, + "requires": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "mime-db": { + "version": "1.47.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.47.0.tgz", + "integrity": "sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==", + "dev": true + }, + "mime-types": { + "version": "2.1.30", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.30.tgz", + "integrity": "sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==", + "dev": true, + "requires": { + "mime-db": "1.47.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "dev": true + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "requires": { + "mimic-fn": "^2.1.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "requires": { + "aggregate-error": "^3.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picomatch": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.3.tgz", + "integrity": "sha512-KpELjfwcCDUb9PeigTs2mBJzXUPzAuP2oPcA989He8Rte0+YUAjw1JVedDhuTKPkHjSYzMN3npC9luThGYEKdg==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + } + }, + "please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "requires": { + "semver-compare": "^1.0.0" + } + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "prettier": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.3.0.tgz", + "integrity": "sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w==", + "dev": true + }, + "prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "requires": { + "fast-diff": "^1.1.2" + } + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "rechoir": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", + "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", + "dev": true, + "requires": { + "resolve": "^1.1.6" + } + }, + "regexpp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.1.0.tgz", + "integrity": "sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "requires": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + } + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "rollup": { + "version": "2.47.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.47.0.tgz", + "integrity": "sha512-rqBjgq9hQfW0vRmz+0S062ORRNJXvwRpzxhFXORvar/maZqY6za3rgQ/p1Glg+j1hnc1GtYyQCPiAei95uTElg==", + "dev": true, + "requires": { + "fsevents": "~2.3.1" + } + }, + "rollup-plugin-commonjs": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz", + "integrity": "sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1", + "is-reference": "^1.1.2", + "magic-string": "^0.25.2", + "resolve": "^1.11.0", + "rollup-pluginutils": "^2.8.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + } + } + }, + "rollup-plugin-node-resolve": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz", + "integrity": "sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw==", + "dev": true, + "requires": { + "@types/resolve": "0.0.8", + "builtin-modules": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.11.1", + "rollup-pluginutils": "^2.8.1" + } + }, + "rollup-plugin-sourcemaps": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz", + "integrity": "sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.9", + "source-map-resolve": "^0.6.0" + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + } + }, + "rollup-plugin-typescript2": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.30.0.tgz", + "integrity": "sha512-NUFszIQyhgDdhRS9ya/VEmsnpTe+GERDMmFo0Y+kf8ds51Xy57nPNGglJY+W6x1vcouA7Au7nsTgsLFj2I0PxQ==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^4.1.0", + "find-cache-dir": "^3.3.1", + "fs-extra": "8.1.0", + "resolve": "1.20.0", + "tslib": "2.1.0" + }, + "dependencies": { + "@rollup/pluginutils": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz", + "integrity": "sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==", + "dev": true, + "requires": { + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" + } + }, + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "tslib": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.1.0.tgz", + "integrity": "sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A==", + "dev": true + } + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + } + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "requires": { + "tslib": "^1.9.0" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=", + "dev": true + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shelljs": { + "version": "0.8.4", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.4.tgz", + "integrity": "sha512-7gk3UZ9kOfPLIAbslLzyWeGiEqx9e3rxwZM0KE6EL8GlGwjym9Mrlx5/p33bWTu9YG6vcS4MBxYZDHYr5lr8BQ==", + "dev": true, + "requires": { + "glob": "^7.0.0", + "interpret": "^1.0.0", + "rechoir": "^0.6.2" + } + }, + "shx": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/shx/-/shx-0.3.3.tgz", + "integrity": "sha512-nZJ3HFWVoTSyyB+evEKjJ1STiixGztlqwKLTUNV5KqMWtGey9fTd4KU1gdZ1X9BV6215pswQ/Jew9NsuS/fNDA==", + "dev": true, + "requires": { + "minimist": "^1.2.3", + "shelljs": "^0.8.4" + } + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "string-argv": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", + "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "dev": true + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "requires": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + } + }, + "terser": { + "version": "5.7.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.0.tgz", + "integrity": "sha512-HP5/9hp2UaZt5fYkuhNBR8YyRcT8juw8+uFbAme53iN9hblvKnLUTKkmwJG6ocWpIKf8UK4DoeWG4ty0J6S6/g==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "ts-node": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.1.1.tgz", + "integrity": "sha512-hPlt7ZACERQGf03M253ytLY3dHbGNGrAq9qIHWUY9XHYl1z7wYngSr3OQ5xmui8o2AaxsONxIzjafLUiWBo1Fg==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + } + }, + "tslib": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.2.0.tgz", + "integrity": "sha512-gS9GVHRU+RGn5KQM2rllAlR3dU6m7AcpJKdtH8gFvQiC4Otgk98XnmMU+nZenHt/+VhnBPWwgrJsyrdcw6i23w==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + }, + "dependencies": { + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + } + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "typescript": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.2.4.tgz", + "integrity": "sha512-V+evlYHZnQkaz8TRBuxTA92yZBPotr5H+WhQ7bD3hZUndx5tGOa1fuCgeSjxAzM1RiN5IzvadIXTVefuuwZCRg==", + "dev": true + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "requires": { + "punycode": "^2.1.0" + } + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yargs": { + "version": "17.0.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.0.1.tgz", + "integrity": "sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.7", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.7.tgz", + "integrity": "sha512-FiNkvbeHzB/syOjIUxFDCnhSfzAL8R5vs40MgLFBorXACCOAEaWu0gRZl14vG8MR9AOJIZbmkjhusqBYZ3HTHw==", + "dev": true + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + } + } +} diff --git a/package.json b/package.json index e0190506..98d39cbe 100644 --- a/package.json +++ b/package.json @@ -1,73 +1,87 @@ -{ - "name": "@severlessworkflow/sdk-typescript", - "version": "0.6.0", - "description": "Typescript SDK for Serverless Workflow Specification", - "main": "umd/index.umd.min.js", - "browser": "umd/index.umd.min.js", - "module": "esm/index.esm.min.js", - "typings": "index.d.ts", - "scripts": { - "rimraf": "npx rimraf", - "shx": "npx shx", - "tsc": "npx tsc", - "ts-node": "npx ts-node", - "clean": "npx rimraf dist && rimraf out-tsc", - "tools:download-schemas": "npx ts-node --project ./tools/tsconfig.json ./tools/download-schemas.ts", - "tools:generate-definitions": "npx ts-node --project ./tools/tsconfig.json ./tools/generate-definitions.ts", - "tools:generate-builders": "npx ts-node --project ./tools/tsconfig.json ./tools/generate-builders.ts", - "update-code-base": "npm run tools:download-schemas && npm run tools:generate-definitions && npm run tools:generate-builders", - "pretest": "npx rimraf out-tsc", - "test": "npx tsc --project ./tests/tsconfig.json && npx jasmine --config=./tests/support/jasmine.json", - "prebuild": "npx rimraf dist", - "build": "npx rollup -c rollup.config.ts", - "postbuild": "npx shx cp ./package.json ./README.md ./LICENSE ./dist/", - "verify-publish-directory": "node -e 'if (!process.cwd().endsWith(\"dist\")) { console.error(\"Packaging/Publishing should be done from ./dist/\"); process.exitCode = 1; } process.exit();'", - "prepack": "npm run verify-publish-directory", - "prepublishOnly": "npm run verify-publish-directory" - }, - "dependencies": { - "ajv": "^8.1.0", - "js-yaml": "^4.1.0" - }, - "devDependencies": { - "@apidevtools/json-schema-ref-parser": "^9.0.7", - "@dtsgenerator/replace-namespace": "^1.4.1", - "@rollup/plugin-json": "^4.1.0", - "@types/jasmine": "^3.6.10", - "@types/js-yaml": "^4.0.1", - "@types/node-fetch": "^2.5.10", - "@types/rimraf": "^3.0.0", - "@types/yargs": "^16.0.1", - "dtsgenerator": "^3.10.0", - "jasmine": "^3.7.0", - "node-fetch": "^2.6.1", - "rimraf": "^3.0.2", - "rollup": "^2.47.0", - "rollup-plugin-commonjs": "^10.1.0", - "rollup-plugin-node-resolve": "^5.2.0", - "rollup-plugin-sourcemaps": "^0.6.3", - "rollup-plugin-terser": "^7.0.2", - "rollup-plugin-typescript2": "^0.30.0", - "shx": "^0.3.3", - "ts-node": "^9.1.1", - "typescript": "^4.2.4", - "yargs": "^17.0.1" - }, - "repository": { - "type": "git", - "url": "https://github.com/serverlessworkflow/sdk-typescript.git" - }, - "author": { - "name": "Serverless Workflow Contributors", - "url": "https://serverlessworkflow.io" - }, - "license": "http://www.apache.org/licenses/LICENSE-2.0.txt", - "bugs": { - "url": "https://github.com/serverlessworkflow/sdk-typescript/issues" - }, - "homepage": "https://serverlessworkflow.io", - "engines": { - "node": ">=15.0", - "npm": ">=7.0.0" - } -} +{ + "name": "@severlessworkflow/sdk-typescript", + "version": "0.6.0", + "description": "Typescript SDK for Serverless Workflow Specification", + "main": "umd/index.umd.min.js", + "browser": "umd/index.umd.min.js", + "module": "esm/index.esm.min.js", + "typings": "index.d.ts", + "scripts": { + "rimraf": "npx rimraf", + "shx": "npx shx", + "tsc": "npx tsc", + "ts-node": "npx ts-node", + "eslint": "npx eslint", + "prettier": "npx prettier", + "lint-staged": "npx lint-staged", + "clean": "npx rimraf dist && rimraf out-tsc", + "tools:download-schemas": "npx ts-node --project ./tools/tsconfig.json ./tools/download-schemas.ts", + "tools:generate-definitions": "npx ts-node --project ./tools/tsconfig.json ./tools/generate-definitions.ts", + "tools:generate-builders": "npx ts-node --project ./tools/tsconfig.json ./tools/generate-builders.ts", + "update-code-base": "npm run tools:download-schemas && npm run tools:generate-definitions && npm run tools:generate-builders", + "format": "npx prettier --write \"**/*.ts\"", + "lint": "npx eslint . --ext .ts && npx prettier --check \"**/*.ts\"", + "pretest": "npx rimraf out-tsc", + "test": "npx tsc --project ./tests/tsconfig.json && npx jasmine --config=./tests/support/jasmine.json", + "prebuild": "npx rimraf dist", + "build": "npx rollup -c rollup.config.ts", + "postbuild": "npx shx cp ./package.json ./README.md ./LICENSE ./dist/", + "verify-publish-directory": "node -e 'if (!process.cwd().endsWith(\"dist\")) { console.error(\"Packaging/Publishing should be done from ./dist/\"); process.exitCode = 1; } process.exit();'", + "prepack": "npm run verify-publish-directory", + "prepublishOnly": "npm run verify-publish-directory", + "prepare": "husky install" + }, + "dependencies": { + "ajv": "^8.1.0", + "js-yaml": "^4.1.0" + }, + "devDependencies": { + "@apidevtools/json-schema-ref-parser": "^9.0.7", + "@dtsgenerator/replace-namespace": "^1.4.1", + "@rollup/plugin-json": "^4.1.0", + "@types/jasmine": "^3.6.10", + "@types/js-yaml": "^4.0.1", + "@types/node-fetch": "^2.5.10", + "@types/rimraf": "^3.0.0", + "@types/yargs": "^16.0.1", + "@typescript-eslint/eslint-plugin": "^4.23.0", + "@typescript-eslint/parser": "^4.23.0", + "dtsgenerator": "^3.10.0", + "eslint": "^7.26.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-prettier": "^3.4.0", + "husky": "6.0.0", + "jasmine": "^3.7.0", + "lint-staged": "11.0.0", + "node-fetch": "^2.6.1", + "prettier": "^2.3.0", + "rimraf": "^3.0.2", + "rollup": "^2.47.0", + "rollup-plugin-commonjs": "^10.1.0", + "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-sourcemaps": "^0.6.3", + "rollup-plugin-terser": "^7.0.2", + "rollup-plugin-typescript2": "^0.30.0", + "shx": "^0.3.3", + "ts-node": "^9.1.1", + "typescript": "^4.2.4", + "yargs": "^17.0.1" + }, + "repository": { + "type": "git", + "url": "https://github.com/serverlessworkflow/sdk-typescript.git" + }, + "author": { + "name": "Serverless Workflow Contributors", + "url": "https://serverlessworkflow.io" + }, + "license": "http://www.apache.org/licenses/LICENSE-2.0.txt", + "bugs": { + "url": "https://github.com/serverlessworkflow/sdk-typescript/issues" + }, + "homepage": "https://serverlessworkflow.io", + "engines": { + "node": ">=15.0", + "npm": ">=7.0.0" + } +} diff --git a/rollup.config.ts b/rollup.config.ts index 37304595..527ec9ce 100644 --- a/rollup.config.ts +++ b/rollup.config.ts @@ -1,25 +1,25 @@ import json from '@rollup/plugin-json'; import typescript from 'rollup-plugin-typescript2'; -import resolve from 'rollup-plugin-node-resolve' -import commonjs from 'rollup-plugin-commonjs' -import sourceMaps from 'rollup-plugin-sourcemaps' -import {terser} from 'rollup-plugin-terser'; +import resolve from 'rollup-plugin-node-resolve'; +import commonjs from 'rollup-plugin-commonjs'; +import sourceMaps from 'rollup-plugin-sourcemaps'; +import { terser } from 'rollup-plugin-terser'; export default { input: 'src/index.ts', output: [ { file: 'dist/umd/index.umd.js', name: 'serverWorkflowSdk', format: 'umd', sourcemap: true }, - { file: 'dist/umd/index.umd.min.js', name: 'serverWorkflowSdk', format: 'umd', sourcemap: true, plugins: [terser()] }, + { + file: 'dist/umd/index.umd.min.js', + name: 'serverWorkflowSdk', + format: 'umd', + sourcemap: true, + plugins: [terser()], + }, { file: 'dist/esm/index.esm.js', format: 'es', sourcemap: true }, { file: 'dist/esm/index.esm.min.js', format: 'es', sourcemap: true, plugins: [terser()] }, { file: 'dist/systemjs/index.systemjs.js', format: 'system', sourcemap: true }, { file: 'dist/systemjs/index.systemjs.min.js', format: 'system', sourcemap: true, plugins: [terser()] }, ], - plugins: [ - json(), - typescript({ useTsconfigDeclarationDir: true }), - commonjs(), - resolve(), - sourceMaps(), - ] -} \ No newline at end of file + plugins: [json(), typescript({ useTsconfigDeclarationDir: true }), commonjs(), resolve(), sourceMaps()], +}; diff --git a/src/index.ts b/src/index.ts index b956b909..e5d3f81b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1 +1,18 @@ -export * from './serverless-workflow-sdk'; \ No newline at end of file +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +export * from './serverless-workflow-sdk'; diff --git a/src/lib/builder.ts b/src/lib/builder.ts index 9c425eef..2eafa5f7 100644 --- a/src/lib/builder.ts +++ b/src/lib/builder.ts @@ -1,30 +1,53 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +/** + * Represents a builder proxy + */ export type Builder = { - build: () => T + build: () => T; } & { - [k in keyof T]-?: (arg: T[k]) => Builder + [k in T extends T ? keyof T : never]-?: (arg: T[k]) => Builder; }; /** - * A builder factory to proxy properties assignations and validate against schema on build - * @param {Function} validatorFn The function used to validated and produce the object on build() + * A factory for builders that proxy properties assignations and validate against schema on build + * @param {Function} buildingFn The function used to validate and produce the object on build() * @returns {Builder} A builder proxy */ -export function builder(validatorFn?: (data: Partial) => (() => T)): Builder { +export function builder(buildingFn?: (data: Partial) => () => T): Builder { const data: Partial = {}; - const defaultValidatorFn = (data: Partial): (() => T) => () => data as T; + const defaultBuildingFn = + (data: Partial): (() => T) => + () => + data as T; const proxy = new Proxy({} as Builder, { get: (_, prop) => { if (prop === 'build') { - return (validatorFn||defaultValidatorFn)(data); + return (buildingFn || defaultBuildingFn)(data); } return (value: unknown): Builder => { (data as any)[prop.toString()] = value; return proxy; - } + }; }, set: () => { return false; - } + }, }); return proxy; -} \ No newline at end of file +} diff --git a/src/lib/builders/action-builder.ts b/src/lib/builders/action-builder.ts index e0b2e988..7cc3afb0 100644 --- a/src/lib/builders/action-builder.ts +++ b/src/lib/builders/action-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function actionValidator(data: Specification.Action): (() => Specification.Action) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Action} data The underlying object + * @returns {Specification.Action} The validated underlying object + */ +function actionBuildingFn(data: Specification.Action): () => Specification.Action { return () => { const validate = validators.get('Action'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function actionValidator(data: Specification.Action): (() => Specificatio }; } +/** + * A factory to create a builder proxy for the type `Specification.Action` + * @returns {Specification.Action} A builder for `Specification.Action` + */ export function actionBuilder(): Builder { - return builder(actionValidator); -} \ No newline at end of file + return builder(actionBuildingFn); +} diff --git a/src/lib/builders/actiondatafilter-builder.ts b/src/lib/builders/actiondatafilter-builder.ts index bfb66bcc..fb348293 100644 --- a/src/lib/builders/actiondatafilter-builder.ts +++ b/src/lib/builders/actiondatafilter-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function actiondatafilterValidator(data: Specification.Actiondatafilter): (() => Specification.Actiondatafilter) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Actiondatafilter} data The underlying object + * @returns {Specification.Actiondatafilter} The validated underlying object + */ +function actiondatafilterBuildingFn(data: Specification.Actiondatafilter): () => Specification.Actiondatafilter { return () => { const validate = validators.get('Actiondatafilter'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function actiondatafilterValidator(data: Specification.Actiondatafilter): }; } +/** + * A factory to create a builder proxy for the type `Specification.Actiondatafilter` + * @returns {Specification.Actiondatafilter} A builder for `Specification.Actiondatafilter` + */ export function actiondatafilterBuilder(): Builder { - return builder(actiondatafilterValidator); -} \ No newline at end of file + return builder(actiondatafilterBuildingFn); +} diff --git a/src/lib/builders/branch-builder.ts b/src/lib/builders/branch-builder.ts index aefe2066..b27c5917 100644 --- a/src/lib/builders/branch-builder.ts +++ b/src/lib/builders/branch-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function branchValidator(data: Specification.Branch): (() => Specification.Branch) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Branch} data The underlying object + * @returns {Specification.Branch} The validated underlying object + */ +function branchBuildingFn(data: Specification.Branch): () => Specification.Branch { return () => { const validate = validators.get('Branch'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function branchValidator(data: Specification.Branch): (() => Specificatio }; } +/** + * A factory to create a builder proxy for the type `Specification.Branch` + * @returns {Specification.Branch} A builder for `Specification.Branch` + */ export function branchBuilder(): Builder { - return builder(branchValidator); -} \ No newline at end of file + return builder(branchBuildingFn); +} diff --git a/src/lib/builders/callbackstate-builder.ts b/src/lib/builders/callbackstate-builder.ts index 34b784ad..464072b3 100644 --- a/src/lib/builders/callbackstate-builder.ts +++ b/src/lib/builders/callbackstate-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function callbackstateValidator(data: Specification.Callbackstate): (() => Specification.Callbackstate) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Callbackstate} data The underlying object + * @returns {Specification.Callbackstate} The validated underlying object + */ +function callbackstateBuildingFn(data: Specification.Callbackstate): () => Specification.Callbackstate { return () => { data.type = 'callback'; const validate = validators.get('Callbackstate'); @@ -18,6 +40,10 @@ export function callbackstateValidator(data: Specification.Callbackstate): (() = }; } +/** + * A factory to create a builder proxy for the type `Specification.Callbackstate` + * @returns {Specification.Callbackstate} A builder for `Specification.Callbackstate` + */ export function callbackstateBuilder(): Builder { - return builder(callbackstateValidator); -} \ No newline at end of file + return builder(callbackstateBuildingFn); +} diff --git a/src/lib/builders/correlation-def-builder.ts b/src/lib/builders/correlation-def-builder.ts index cac44593..d901173d 100644 --- a/src/lib/builders/correlation-def-builder.ts +++ b/src/lib/builders/correlation-def-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function correlationDefValidator(data: Specification.CorrelationDef): (() => Specification.CorrelationDef) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.CorrelationDef} data The underlying object + * @returns {Specification.CorrelationDef} The validated underlying object + */ +function correlationDefBuildingFn(data: Specification.CorrelationDef): () => Specification.CorrelationDef { return () => { const validate = validators.get('CorrelationDef'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function correlationDefValidator(data: Specification.CorrelationDef): (() }; } +/** + * A factory to create a builder proxy for the type `Specification.CorrelationDef` + * @returns {Specification.CorrelationDef} A builder for `Specification.CorrelationDef` + */ export function correlationDefBuilder(): Builder { - return builder(correlationDefValidator); -} \ No newline at end of file + return builder(correlationDefBuildingFn); +} diff --git a/src/lib/builders/crondef-builder.ts b/src/lib/builders/crondef-builder.ts index a3becb97..52fafde6 100644 --- a/src/lib/builders/crondef-builder.ts +++ b/src/lib/builders/crondef-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function crondefValidator(data: Specification.Crondef): (() => Specification.Crondef) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Crondef} data The underlying object + * @returns {Specification.Crondef} The validated underlying object + */ +function crondefBuildingFn(data: Specification.Crondef): () => Specification.Crondef { return () => { const validate = validators.get('Crondef'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function crondefValidator(data: Specification.Crondef): (() => Specificat }; } +/** + * A factory to create a builder proxy for the type `Specification.Crondef` + * @returns {Specification.Crondef} A builder for `Specification.Crondef` + */ export function crondefBuilder(): Builder { - return builder(crondefValidator); -} \ No newline at end of file + return builder(crondefBuildingFn); +} diff --git a/src/lib/builders/databasedswitch-builder.ts b/src/lib/builders/databasedswitch-builder.ts index 43dae36c..4750832e 100644 --- a/src/lib/builders/databasedswitch-builder.ts +++ b/src/lib/builders/databasedswitch-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function databasedswitchValidator(data: Specification.Databasedswitch): (() => Specification.Databasedswitch) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Databasedswitch} data The underlying object + * @returns {Specification.Databasedswitch} The validated underlying object + */ +function databasedswitchBuildingFn(data: Specification.Databasedswitch): () => Specification.Databasedswitch { return () => { data.type = 'switch'; const validate = validators.get('Databasedswitch'); @@ -18,6 +40,10 @@ export function databasedswitchValidator(data: Specification.Databasedswitch): ( }; } +/** + * A factory to create a builder proxy for the type `Specification.Databasedswitch` + * @returns {Specification.Databasedswitch} A builder for `Specification.Databasedswitch` + */ export function databasedswitchBuilder(): Builder { - return builder(databasedswitchValidator); -} \ No newline at end of file + return builder(databasedswitchBuildingFn); +} diff --git a/src/lib/builders/datacondition-builder.ts b/src/lib/builders/datacondition-builder.ts index 01d08f40..f65aa0ca 100644 --- a/src/lib/builders/datacondition-builder.ts +++ b/src/lib/builders/datacondition-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function dataconditionValidator(data: Specification.Datacondition): (() => Specification.Datacondition) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Datacondition} data The underlying object + * @returns {Specification.Datacondition} The validated underlying object + */ +function dataconditionBuildingFn(data: Specification.Datacondition): () => Specification.Datacondition { return () => { const validate = validators.get('Datacondition'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function dataconditionValidator(data: Specification.Datacondition): (() = }; } +/** + * A factory to create a builder proxy for the type `Specification.Datacondition` + * @returns {Specification.Datacondition} A builder for `Specification.Datacondition` + */ export function dataconditionBuilder(): Builder { - return builder(dataconditionValidator); -} \ No newline at end of file + return builder(dataconditionBuildingFn); +} diff --git a/src/lib/builders/defaultdef-builder.ts b/src/lib/builders/defaultdef-builder.ts index 72861d1d..f64c6af4 100644 --- a/src/lib/builders/defaultdef-builder.ts +++ b/src/lib/builders/defaultdef-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function defaultdefValidator(data: Specification.Defaultdef): (() => Specification.Defaultdef) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Defaultdef} data The underlying object + * @returns {Specification.Defaultdef} The validated underlying object + */ +function defaultdefBuildingFn(data: Specification.Defaultdef): () => Specification.Defaultdef { return () => { const validate = validators.get('Defaultdef'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function defaultdefValidator(data: Specification.Defaultdef): (() => Spec }; } +/** + * A factory to create a builder proxy for the type `Specification.Defaultdef` + * @returns {Specification.Defaultdef} A builder for `Specification.Defaultdef` + */ export function defaultdefBuilder(): Builder { - return builder(defaultdefValidator); -} \ No newline at end of file + return builder(defaultdefBuildingFn); +} diff --git a/src/lib/builders/delaystate-builder.ts b/src/lib/builders/delaystate-builder.ts index 5f6b2ff8..10514881 100644 --- a/src/lib/builders/delaystate-builder.ts +++ b/src/lib/builders/delaystate-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function delaystateValidator(data: Specification.Delaystate): (() => Specification.Delaystate) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Delaystate} data The underlying object + * @returns {Specification.Delaystate} The validated underlying object + */ +function delaystateBuildingFn(data: Specification.Delaystate): () => Specification.Delaystate { return () => { data.type = 'delay'; const validate = validators.get('Delaystate'); @@ -18,6 +40,10 @@ export function delaystateValidator(data: Specification.Delaystate): (() => Spec }; } +/** + * A factory to create a builder proxy for the type `Specification.Delaystate` + * @returns {Specification.Delaystate} A builder for `Specification.Delaystate` + */ export function delaystateBuilder(): Builder { - return builder(delaystateValidator); -} \ No newline at end of file + return builder(delaystateBuildingFn); +} diff --git a/src/lib/builders/end-builder.ts b/src/lib/builders/end-builder.ts index 38ac085a..1c34f116 100644 --- a/src/lib/builders/end-builder.ts +++ b/src/lib/builders/end-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function endValidator(data: Specification.End): (() => Specification.End) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.End} data The underlying object + * @returns {Specification.End} The validated underlying object + */ +function endBuildingFn(data: Specification.End): () => Specification.End { return () => { const validate = validators.get('End'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function endValidator(data: Specification.End): (() => Specification.End) }; } +/** + * A factory to create a builder proxy for the type `Specification.End` + * @returns {Specification.End} A builder for `Specification.End` + */ export function endBuilder(): Builder { - return builder(endValidator); -} \ No newline at end of file + return builder(endBuildingFn); +} diff --git a/src/lib/builders/enddatacondition-builder.ts b/src/lib/builders/enddatacondition-builder.ts index c0493de0..759d8d4f 100644 --- a/src/lib/builders/enddatacondition-builder.ts +++ b/src/lib/builders/enddatacondition-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function enddataconditionValidator(data: Specification.Enddatacondition): (() => Specification.Enddatacondition) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Enddatacondition} data The underlying object + * @returns {Specification.Enddatacondition} The validated underlying object + */ +function enddataconditionBuildingFn(data: Specification.Enddatacondition): () => Specification.Enddatacondition { return () => { const validate = validators.get('Enddatacondition'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function enddataconditionValidator(data: Specification.Enddatacondition): }; } +/** + * A factory to create a builder proxy for the type `Specification.Enddatacondition` + * @returns {Specification.Enddatacondition} A builder for `Specification.Enddatacondition` + */ export function enddataconditionBuilder(): Builder { - return builder(enddataconditionValidator); -} \ No newline at end of file + return builder(enddataconditionBuildingFn); +} diff --git a/src/lib/builders/enddeventcondition-builder.ts b/src/lib/builders/enddeventcondition-builder.ts index 332621f7..88ac39f3 100644 --- a/src/lib/builders/enddeventcondition-builder.ts +++ b/src/lib/builders/enddeventcondition-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function enddeventconditionValidator(data: Specification.Enddeventcondition): (() => Specification.Enddeventcondition) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Enddeventcondition} data The underlying object + * @returns {Specification.Enddeventcondition} The validated underlying object + */ +function enddeventconditionBuildingFn(data: Specification.Enddeventcondition): () => Specification.Enddeventcondition { return () => { const validate = validators.get('Enddeventcondition'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function enddeventconditionValidator(data: Specification.Enddeventconditi }; } +/** + * A factory to create a builder proxy for the type `Specification.Enddeventcondition` + * @returns {Specification.Enddeventcondition} A builder for `Specification.Enddeventcondition` + */ export function enddeventconditionBuilder(): Builder { - return builder(enddeventconditionValidator); -} \ No newline at end of file + return builder(enddeventconditionBuildingFn); +} diff --git a/src/lib/builders/error-builder.ts b/src/lib/builders/error-builder.ts index 830990b7..8e7b501b 100644 --- a/src/lib/builders/error-builder.ts +++ b/src/lib/builders/error-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function errorValidator(data: Specification.Error): (() => Specification.Error) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Error} data The underlying object + * @returns {Specification.Error} The validated underlying object + */ +function errorBuildingFn(data: Specification.Error): () => Specification.Error { return () => { const validate = validators.get('Error'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function errorValidator(data: Specification.Error): (() => Specification. }; } +/** + * A factory to create a builder proxy for the type `Specification.Error` + * @returns {Specification.Error} A builder for `Specification.Error` + */ export function errorBuilder(): Builder { - return builder(errorValidator); -} \ No newline at end of file + return builder(errorBuildingFn); +} diff --git a/src/lib/builders/eventbasedswitch-builder.ts b/src/lib/builders/eventbasedswitch-builder.ts index af57e701..96850518 100644 --- a/src/lib/builders/eventbasedswitch-builder.ts +++ b/src/lib/builders/eventbasedswitch-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function eventbasedswitchValidator(data: Specification.Eventbasedswitch): (() => Specification.Eventbasedswitch) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Eventbasedswitch} data The underlying object + * @returns {Specification.Eventbasedswitch} The validated underlying object + */ +function eventbasedswitchBuildingFn(data: Specification.Eventbasedswitch): () => Specification.Eventbasedswitch { return () => { data.type = 'switch'; const validate = validators.get('Eventbasedswitch'); @@ -18,6 +40,10 @@ export function eventbasedswitchValidator(data: Specification.Eventbasedswitch): }; } +/** + * A factory to create a builder proxy for the type `Specification.Eventbasedswitch` + * @returns {Specification.Eventbasedswitch} A builder for `Specification.Eventbasedswitch` + */ export function eventbasedswitchBuilder(): Builder { - return builder(eventbasedswitchValidator); -} \ No newline at end of file + return builder(eventbasedswitchBuildingFn); +} diff --git a/src/lib/builders/eventcondition-builder.ts b/src/lib/builders/eventcondition-builder.ts index 2f816cbc..9993ee00 100644 --- a/src/lib/builders/eventcondition-builder.ts +++ b/src/lib/builders/eventcondition-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function eventconditionValidator(data: Specification.Eventcondition): (() => Specification.Eventcondition) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Eventcondition} data The underlying object + * @returns {Specification.Eventcondition} The validated underlying object + */ +function eventconditionBuildingFn(data: Specification.Eventcondition): () => Specification.Eventcondition { return () => { const validate = validators.get('Eventcondition'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function eventconditionValidator(data: Specification.Eventcondition): (() }; } +/** + * A factory to create a builder proxy for the type `Specification.Eventcondition` + * @returns {Specification.Eventcondition} A builder for `Specification.Eventcondition` + */ export function eventconditionBuilder(): Builder { - return builder(eventconditionValidator); -} \ No newline at end of file + return builder(eventconditionBuildingFn); +} diff --git a/src/lib/builders/eventdatafilter-builder.ts b/src/lib/builders/eventdatafilter-builder.ts index d670f817..0bdf19d7 100644 --- a/src/lib/builders/eventdatafilter-builder.ts +++ b/src/lib/builders/eventdatafilter-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function eventdatafilterValidator(data: Specification.Eventdatafilter): (() => Specification.Eventdatafilter) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Eventdatafilter} data The underlying object + * @returns {Specification.Eventdatafilter} The validated underlying object + */ +function eventdatafilterBuildingFn(data: Specification.Eventdatafilter): () => Specification.Eventdatafilter { return () => { const validate = validators.get('Eventdatafilter'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function eventdatafilterValidator(data: Specification.Eventdatafilter): ( }; } +/** + * A factory to create a builder proxy for the type `Specification.Eventdatafilter` + * @returns {Specification.Eventdatafilter} A builder for `Specification.Eventdatafilter` + */ export function eventdatafilterBuilder(): Builder { - return builder(eventdatafilterValidator); -} \ No newline at end of file + return builder(eventdatafilterBuildingFn); +} diff --git a/src/lib/builders/eventdef-builder.ts b/src/lib/builders/eventdef-builder.ts index cce49d3a..632f5570 100644 --- a/src/lib/builders/eventdef-builder.ts +++ b/src/lib/builders/eventdef-builder.ts @@ -1,10 +1,33 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function eventdefValidator(data: Specification.Eventdef): (() => Specification.Eventdef) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Eventdef} data The underlying object + * @returns {Specification.Eventdef} The validated underlying object + */ +function eventdefBuildingFn(data: Specification.Eventdef): () => Specification.Eventdef { return () => { + data.kind = data.kind || 'consumed'; const validate = validators.get('Eventdef'); // TODO: ignore validation if no validator or throw ? if (!validate) return data; @@ -17,6 +40,10 @@ export function eventdefValidator(data: Specification.Eventdef): (() => Specific }; } +/** + * A factory to create a builder proxy for the type `Specification.Eventdef` + * @returns {Specification.Eventdef} A builder for `Specification.Eventdef` + */ export function eventdefBuilder(): Builder { - return builder(eventdefValidator); -} \ No newline at end of file + return builder(eventdefBuildingFn); +} diff --git a/src/lib/builders/eventref-builder.ts b/src/lib/builders/eventref-builder.ts index 59345ba1..42741a38 100644 --- a/src/lib/builders/eventref-builder.ts +++ b/src/lib/builders/eventref-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function eventrefValidator(data: Specification.Eventref): (() => Specification.Eventref) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Eventref} data The underlying object + * @returns {Specification.Eventref} The validated underlying object + */ +function eventrefBuildingFn(data: Specification.Eventref): () => Specification.Eventref { return () => { const validate = validators.get('Eventref'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function eventrefValidator(data: Specification.Eventref): (() => Specific }; } +/** + * A factory to create a builder proxy for the type `Specification.Eventref` + * @returns {Specification.Eventref} A builder for `Specification.Eventref` + */ export function eventrefBuilder(): Builder { - return builder(eventrefValidator); -} \ No newline at end of file + return builder(eventrefBuildingFn); +} diff --git a/src/lib/builders/events-builder.ts b/src/lib/builders/events-builder.ts index f4c0c32f..d7e60c96 100644 --- a/src/lib/builders/events-builder.ts +++ b/src/lib/builders/events-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function eventsValidator(data: Specification.Events): (() => Specification.Events) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Events} data The underlying object + * @returns {Specification.Events} The validated underlying object + */ +function eventsBuildingFn(data: Specification.Events): () => Specification.Events { return () => { const validate = validators.get('Events'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function eventsValidator(data: Specification.Events): (() => Specificatio }; } +/** + * A factory to create a builder proxy for the type `Specification.Events` + * @returns {Specification.Events} A builder for `Specification.Events` + */ export function eventsBuilder(): Builder { - return builder(eventsValidator); -} \ No newline at end of file + return builder(eventsBuildingFn); +} diff --git a/src/lib/builders/eventstate-builder.ts b/src/lib/builders/eventstate-builder.ts index eeee4c90..64913e10 100644 --- a/src/lib/builders/eventstate-builder.ts +++ b/src/lib/builders/eventstate-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function eventstateValidator(data: Specification.Eventstate): (() => Specification.Eventstate) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Eventstate} data The underlying object + * @returns {Specification.Eventstate} The validated underlying object + */ +function eventstateBuildingFn(data: Specification.Eventstate): () => Specification.Eventstate { return () => { data.type = 'event'; const validate = validators.get('Eventstate'); @@ -18,6 +40,10 @@ export function eventstateValidator(data: Specification.Eventstate): (() => Spec }; } +/** + * A factory to create a builder proxy for the type `Specification.Eventstate` + * @returns {Specification.Eventstate} A builder for `Specification.Eventstate` + */ export function eventstateBuilder(): Builder { - return builder(eventstateValidator); -} \ No newline at end of file + return builder(eventstateBuildingFn); +} diff --git a/src/lib/builders/exectimeout-builder.ts b/src/lib/builders/exectimeout-builder.ts index b3902eb9..d45684ec 100644 --- a/src/lib/builders/exectimeout-builder.ts +++ b/src/lib/builders/exectimeout-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function exectimeoutValidator(data: Specification.Exectimeout): (() => Specification.Exectimeout) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Exectimeout} data The underlying object + * @returns {Specification.Exectimeout} The validated underlying object + */ +function exectimeoutBuildingFn(data: Specification.Exectimeout): () => Specification.Exectimeout { return () => { const validate = validators.get('Exectimeout'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function exectimeoutValidator(data: Specification.Exectimeout): (() => Sp }; } +/** + * A factory to create a builder proxy for the type `Specification.Exectimeout` + * @returns {Specification.Exectimeout} A builder for `Specification.Exectimeout` + */ export function exectimeoutBuilder(): Builder { - return builder(exectimeoutValidator); -} \ No newline at end of file + return builder(exectimeoutBuildingFn); +} diff --git a/src/lib/builders/foreachstate-builder.ts b/src/lib/builders/foreachstate-builder.ts index 62abf121..ea7b3545 100644 --- a/src/lib/builders/foreachstate-builder.ts +++ b/src/lib/builders/foreachstate-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function foreachstateValidator(data: Specification.Foreachstate): (() => Specification.Foreachstate) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Foreachstate} data The underlying object + * @returns {Specification.Foreachstate} The validated underlying object + */ +function foreachstateBuildingFn(data: Specification.Foreachstate): () => Specification.Foreachstate { return () => { data.type = 'foreach'; const validate = validators.get('Foreachstate'); @@ -18,6 +40,10 @@ export function foreachstateValidator(data: Specification.Foreachstate): (() => }; } +/** + * A factory to create a builder proxy for the type `Specification.Foreachstate` + * @returns {Specification.Foreachstate} A builder for `Specification.Foreachstate` + */ export function foreachstateBuilder(): Builder { - return builder(foreachstateValidator); -} \ No newline at end of file + return builder(foreachstateBuildingFn); +} diff --git a/src/lib/builders/function-builder.ts b/src/lib/builders/function-builder.ts index b31a5626..2bf868da 100644 --- a/src/lib/builders/function-builder.ts +++ b/src/lib/builders/function-builder.ts @@ -1,10 +1,33 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function functionValidator(data: Specification.Function): (() => Specification.Function) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Function} data The underlying object + * @returns {Specification.Function} The validated underlying object + */ +function functionBuildingFn(data: Specification.Function): () => Specification.Function { return () => { + data.type = data.type || 'rest'; const validate = validators.get('Function'); // TODO: ignore validation if no validator or throw ? if (!validate) return data; @@ -17,6 +40,10 @@ export function functionValidator(data: Specification.Function): (() => Specific }; } +/** + * A factory to create a builder proxy for the type `Specification.Function` + * @returns {Specification.Function} A builder for `Specification.Function` + */ export function functionBuilder(): Builder { - return builder(functionValidator); -} \ No newline at end of file + return builder(functionBuildingFn); +} diff --git a/src/lib/builders/functions-builder.ts b/src/lib/builders/functions-builder.ts index 210ac5bb..056e5126 100644 --- a/src/lib/builders/functions-builder.ts +++ b/src/lib/builders/functions-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function functionsValidator(data: Specification.Functions): (() => Specification.Functions) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Functions} data The underlying object + * @returns {Specification.Functions} The validated underlying object + */ +function functionsBuildingFn(data: Specification.Functions): () => Specification.Functions { return () => { const validate = validators.get('Functions'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function functionsValidator(data: Specification.Functions): (() => Specif }; } +/** + * A factory to create a builder proxy for the type `Specification.Functions` + * @returns {Specification.Functions} A builder for `Specification.Functions` + */ export function functionsBuilder(): Builder { - return builder(functionsValidator); -} \ No newline at end of file + return builder(functionsBuildingFn); +} diff --git a/src/lib/builders/index.ts b/src/lib/builders/index.ts index cff38a98..c3ac43f9 100644 --- a/src/lib/builders/index.ts +++ b/src/lib/builders/index.ts @@ -1,3 +1,20 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + export * from './workflow-builder'; export * from './action-builder'; export * from './actiondatafilter-builder'; diff --git a/src/lib/builders/injectstate-builder.ts b/src/lib/builders/injectstate-builder.ts index 015573b4..367230b7 100644 --- a/src/lib/builders/injectstate-builder.ts +++ b/src/lib/builders/injectstate-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function injectstateValidator(data: Specification.Injectstate): (() => Specification.Injectstate) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Injectstate} data The underlying object + * @returns {Specification.Injectstate} The validated underlying object + */ +function injectstateBuildingFn(data: Specification.Injectstate): () => Specification.Injectstate { return () => { data.type = 'inject'; const validate = validators.get('Injectstate'); @@ -18,6 +40,10 @@ export function injectstateValidator(data: Specification.Injectstate): (() => Sp }; } +/** + * A factory to create a builder proxy for the type `Specification.Injectstate` + * @returns {Specification.Injectstate} A builder for `Specification.Injectstate` + */ export function injectstateBuilder(): Builder { - return builder(injectstateValidator); -} \ No newline at end of file + return builder(injectstateBuildingFn); +} diff --git a/src/lib/builders/metadata-builder.ts b/src/lib/builders/metadata-builder.ts index fc10e4c9..9b534838 100644 --- a/src/lib/builders/metadata-builder.ts +++ b/src/lib/builders/metadata-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function metadataValidator(data: Specification.Metadata): (() => Specification.Metadata) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Metadata} data The underlying object + * @returns {Specification.Metadata} The validated underlying object + */ +function metadataBuildingFn(data: Specification.Metadata): () => Specification.Metadata { return () => { const validate = validators.get('Metadata'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function metadataValidator(data: Specification.Metadata): (() => Specific }; } +/** + * A factory to create a builder proxy for the type `Specification.Metadata` + * @returns {Specification.Metadata} A builder for `Specification.Metadata` + */ export function metadataBuilder(): Builder { - return builder(metadataValidator); -} \ No newline at end of file + return builder(metadataBuildingFn); +} diff --git a/src/lib/builders/onevents-builder.ts b/src/lib/builders/onevents-builder.ts index 683c9b26..6f2cf554 100644 --- a/src/lib/builders/onevents-builder.ts +++ b/src/lib/builders/onevents-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function oneventsValidator(data: Specification.Onevents): (() => Specification.Onevents) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Onevents} data The underlying object + * @returns {Specification.Onevents} The validated underlying object + */ +function oneventsBuildingFn(data: Specification.Onevents): () => Specification.Onevents { return () => { const validate = validators.get('Onevents'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function oneventsValidator(data: Specification.Onevents): (() => Specific }; } +/** + * A factory to create a builder proxy for the type `Specification.Onevents` + * @returns {Specification.Onevents} A builder for `Specification.Onevents` + */ export function oneventsBuilder(): Builder { - return builder(oneventsValidator); -} \ No newline at end of file + return builder(oneventsBuildingFn); +} diff --git a/src/lib/builders/operationstate-builder.ts b/src/lib/builders/operationstate-builder.ts index 169867fc..c2550691 100644 --- a/src/lib/builders/operationstate-builder.ts +++ b/src/lib/builders/operationstate-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function operationstateValidator(data: Specification.Operationstate): (() => Specification.Operationstate) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Operationstate} data The underlying object + * @returns {Specification.Operationstate} The validated underlying object + */ +function operationstateBuildingFn(data: Specification.Operationstate): () => Specification.Operationstate { return () => { data.type = 'operation'; const validate = validators.get('Operationstate'); @@ -18,6 +40,10 @@ export function operationstateValidator(data: Specification.Operationstate): (() }; } +/** + * A factory to create a builder proxy for the type `Specification.Operationstate` + * @returns {Specification.Operationstate} A builder for `Specification.Operationstate` + */ export function operationstateBuilder(): Builder { - return builder(operationstateValidator); -} \ No newline at end of file + return builder(operationstateBuildingFn); +} diff --git a/src/lib/builders/parallelstate-builder.ts b/src/lib/builders/parallelstate-builder.ts index 9810fc93..d912b3dc 100644 --- a/src/lib/builders/parallelstate-builder.ts +++ b/src/lib/builders/parallelstate-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function parallelstateValidator(data: Specification.Parallelstate): (() => Specification.Parallelstate) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Parallelstate} data The underlying object + * @returns {Specification.Parallelstate} The validated underlying object + */ +function parallelstateBuildingFn(data: Specification.Parallelstate): () => Specification.Parallelstate { return () => { data.type = 'parallel'; const validate = validators.get('Parallelstate'); @@ -18,6 +40,10 @@ export function parallelstateValidator(data: Specification.Parallelstate): (() = }; } +/** + * A factory to create a builder proxy for the type `Specification.Parallelstate` + * @returns {Specification.Parallelstate} A builder for `Specification.Parallelstate` + */ export function parallelstateBuilder(): Builder { - return builder(parallelstateValidator); -} \ No newline at end of file + return builder(parallelstateBuildingFn); +} diff --git a/src/lib/builders/produceeventdef-builder.ts b/src/lib/builders/produceeventdef-builder.ts index 7be8de63..afb8f591 100644 --- a/src/lib/builders/produceeventdef-builder.ts +++ b/src/lib/builders/produceeventdef-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function produceeventdefValidator(data: Specification.Produceeventdef): (() => Specification.Produceeventdef) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Produceeventdef} data The underlying object + * @returns {Specification.Produceeventdef} The validated underlying object + */ +function produceeventdefBuildingFn(data: Specification.Produceeventdef): () => Specification.Produceeventdef { return () => { const validate = validators.get('Produceeventdef'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function produceeventdefValidator(data: Specification.Produceeventdef): ( }; } +/** + * A factory to create a builder proxy for the type `Specification.Produceeventdef` + * @returns {Specification.Produceeventdef} A builder for `Specification.Produceeventdef` + */ export function produceeventdefBuilder(): Builder { - return builder(produceeventdefValidator); -} \ No newline at end of file + return builder(produceeventdefBuildingFn); +} diff --git a/src/lib/builders/repeat-builder.ts b/src/lib/builders/repeat-builder.ts index 8f81fd01..2fc59b09 100644 --- a/src/lib/builders/repeat-builder.ts +++ b/src/lib/builders/repeat-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function repeatValidator(data: Specification.Repeat): (() => Specification.Repeat) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Repeat} data The underlying object + * @returns {Specification.Repeat} The validated underlying object + */ +function repeatBuildingFn(data: Specification.Repeat): () => Specification.Repeat { return () => { const validate = validators.get('Repeat'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function repeatValidator(data: Specification.Repeat): (() => Specificatio }; } +/** + * A factory to create a builder proxy for the type `Specification.Repeat` + * @returns {Specification.Repeat} A builder for `Specification.Repeat` + */ export function repeatBuilder(): Builder { - return builder(repeatValidator); -} \ No newline at end of file + return builder(repeatBuildingFn); +} diff --git a/src/lib/builders/retries-builder.ts b/src/lib/builders/retries-builder.ts index db9c1bbf..21edccf0 100644 --- a/src/lib/builders/retries-builder.ts +++ b/src/lib/builders/retries-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function retriesValidator(data: Specification.Retries): (() => Specification.Retries) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Retries} data The underlying object + * @returns {Specification.Retries} The validated underlying object + */ +function retriesBuildingFn(data: Specification.Retries): () => Specification.Retries { return () => { const validate = validators.get('Retries'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function retriesValidator(data: Specification.Retries): (() => Specificat }; } +/** + * A factory to create a builder proxy for the type `Specification.Retries` + * @returns {Specification.Retries} A builder for `Specification.Retries` + */ export function retriesBuilder(): Builder { - return builder(retriesValidator); -} \ No newline at end of file + return builder(retriesBuildingFn); +} diff --git a/src/lib/builders/retrydef-builder.ts b/src/lib/builders/retrydef-builder.ts index 73f46478..4547fca7 100644 --- a/src/lib/builders/retrydef-builder.ts +++ b/src/lib/builders/retrydef-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function retrydefValidator(data: Specification.Retrydef): (() => Specification.Retrydef) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Retrydef} data The underlying object + * @returns {Specification.Retrydef} The validated underlying object + */ +function retrydefBuildingFn(data: Specification.Retrydef): () => Specification.Retrydef { return () => { const validate = validators.get('Retrydef'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function retrydefValidator(data: Specification.Retrydef): (() => Specific }; } +/** + * A factory to create a builder proxy for the type `Specification.Retrydef` + * @returns {Specification.Retrydef} A builder for `Specification.Retrydef` + */ export function retrydefBuilder(): Builder { - return builder(retrydefValidator); -} \ No newline at end of file + return builder(retrydefBuildingFn); +} diff --git a/src/lib/builders/schedule-builder.ts b/src/lib/builders/schedule-builder.ts index 0cd2b7c3..4a26b969 100644 --- a/src/lib/builders/schedule-builder.ts +++ b/src/lib/builders/schedule-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function scheduleValidator(data: Specification.Schedule): (() => Specification.Schedule) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Schedule} data The underlying object + * @returns {Specification.Schedule} The validated underlying object + */ +function scheduleBuildingFn(data: Specification.Schedule): () => Specification.Schedule { return () => { const validate = validators.get('Schedule'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function scheduleValidator(data: Specification.Schedule): (() => Specific }; } +/** + * A factory to create a builder proxy for the type `Specification.Schedule` + * @returns {Specification.Schedule} A builder for `Specification.Schedule` + */ export function scheduleBuilder(): Builder { - return builder(scheduleValidator); -} \ No newline at end of file + return builder(scheduleBuildingFn); +} diff --git a/src/lib/builders/startdef-builder.ts b/src/lib/builders/startdef-builder.ts index 45f75133..a5523891 100644 --- a/src/lib/builders/startdef-builder.ts +++ b/src/lib/builders/startdef-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function startdefValidator(data: Specification.Startdef): (() => Specification.Startdef) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Startdef} data The underlying object + * @returns {Specification.Startdef} The validated underlying object + */ +function startdefBuildingFn(data: Specification.Startdef): () => Specification.Startdef { return () => { const validate = validators.get('Startdef'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function startdefValidator(data: Specification.Startdef): (() => Specific }; } +/** + * A factory to create a builder proxy for the type `Specification.Startdef` + * @returns {Specification.Startdef} A builder for `Specification.Startdef` + */ export function startdefBuilder(): Builder { - return builder(startdefValidator); -} \ No newline at end of file + return builder(startdefBuildingFn); +} diff --git a/src/lib/builders/statedatafilter-builder.ts b/src/lib/builders/statedatafilter-builder.ts index 090244b0..ee787e8a 100644 --- a/src/lib/builders/statedatafilter-builder.ts +++ b/src/lib/builders/statedatafilter-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function statedatafilterValidator(data: Specification.Statedatafilter): (() => Specification.Statedatafilter) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Statedatafilter} data The underlying object + * @returns {Specification.Statedatafilter} The validated underlying object + */ +function statedatafilterBuildingFn(data: Specification.Statedatafilter): () => Specification.Statedatafilter { return () => { const validate = validators.get('Statedatafilter'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function statedatafilterValidator(data: Specification.Statedatafilter): ( }; } +/** + * A factory to create a builder proxy for the type `Specification.Statedatafilter` + * @returns {Specification.Statedatafilter} A builder for `Specification.Statedatafilter` + */ export function statedatafilterBuilder(): Builder { - return builder(statedatafilterValidator); -} \ No newline at end of file + return builder(statedatafilterBuildingFn); +} diff --git a/src/lib/builders/subflowstate-builder.ts b/src/lib/builders/subflowstate-builder.ts index c6d035ae..15f954e3 100644 --- a/src/lib/builders/subflowstate-builder.ts +++ b/src/lib/builders/subflowstate-builder.ts @@ -1,10 +1,33 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function subflowstateValidator(data: Specification.Subflowstate): (() => Specification.Subflowstate) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Subflowstate} data The underlying object + * @returns {Specification.Subflowstate} The validated underlying object + */ +function subflowstateBuildingFn(data: Specification.Subflowstate): () => Specification.Subflowstate { return () => { + data.type = 'subflow'; const validate = validators.get('Subflowstate'); // TODO: ignore validation if no validator or throw ? if (!validate) return data; @@ -17,6 +40,10 @@ export function subflowstateValidator(data: Specification.Subflowstate): (() => }; } +/** + * A factory to create a builder proxy for the type `Specification.Subflowstate` + * @returns {Specification.Subflowstate} A builder for `Specification.Subflowstate` + */ export function subflowstateBuilder(): Builder { - return builder(subflowstateValidator); -} \ No newline at end of file + return builder(subflowstateBuildingFn); +} diff --git a/src/lib/builders/switchstate-builder.ts b/src/lib/builders/switchstate-builder.ts index 2cdce1f7..910485aa 100644 --- a/src/lib/builders/switchstate-builder.ts +++ b/src/lib/builders/switchstate-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function switchstateValidator(data: Specification.Switchstate): (() => Specification.Switchstate) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Switchstate} data The underlying object + * @returns {Specification.Switchstate} The validated underlying object + */ +function switchstateBuildingFn(data: Specification.Switchstate): () => Specification.Switchstate { return () => { const validate = validators.get('Switchstate'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function switchstateValidator(data: Specification.Switchstate): (() => Sp }; } +/** + * A factory to create a builder proxy for the type `Specification.Switchstate` + * @returns {Specification.Switchstate} A builder for `Specification.Switchstate` + */ export function switchstateBuilder(): Builder { - return builder(switchstateValidator); -} \ No newline at end of file + return builder(switchstateBuildingFn); +} diff --git a/src/lib/builders/transition-builder.ts b/src/lib/builders/transition-builder.ts index 5b377520..5a2c1b07 100644 --- a/src/lib/builders/transition-builder.ts +++ b/src/lib/builders/transition-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function transitionValidator(data: Specification.Transition): (() => Specification.Transition) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Transition} data The underlying object + * @returns {Specification.Transition} The validated underlying object + */ +function transitionBuildingFn(data: Specification.Transition): () => Specification.Transition { return () => { const validate = validators.get('Transition'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function transitionValidator(data: Specification.Transition): (() => Spec }; } +/** + * A factory to create a builder proxy for the type `Specification.Transition` + * @returns {Specification.Transition} A builder for `Specification.Transition` + */ export function transitionBuilder(): Builder { - return builder(transitionValidator); -} \ No newline at end of file + return builder(transitionBuildingFn); +} diff --git a/src/lib/builders/transitiondatacondition-builder.ts b/src/lib/builders/transitiondatacondition-builder.ts index d5b3ed61..d83e93dc 100644 --- a/src/lib/builders/transitiondatacondition-builder.ts +++ b/src/lib/builders/transitiondatacondition-builder.ts @@ -1,9 +1,33 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function transitiondataconditionValidator(data: Specification.Transitiondatacondition): (() => Specification.Transitiondatacondition) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Transitiondatacondition} data The underlying object + * @returns {Specification.Transitiondatacondition} The validated underlying object + */ +function transitiondataconditionBuildingFn( + data: Specification.Transitiondatacondition +): () => Specification.Transitiondatacondition { return () => { const validate = validators.get('Transitiondatacondition'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +41,10 @@ export function transitiondataconditionValidator(data: Specification.Transitiond }; } +/** + * A factory to create a builder proxy for the type `Specification.Transitiondatacondition` + * @returns {Specification.Transitiondatacondition} A builder for `Specification.Transitiondatacondition` + */ export function transitiondataconditionBuilder(): Builder { - return builder(transitiondataconditionValidator); -} \ No newline at end of file + return builder(transitiondataconditionBuildingFn); +} diff --git a/src/lib/builders/transitioneventcondition-builder.ts b/src/lib/builders/transitioneventcondition-builder.ts index edd08f77..30ef17d8 100644 --- a/src/lib/builders/transitioneventcondition-builder.ts +++ b/src/lib/builders/transitioneventcondition-builder.ts @@ -1,9 +1,33 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function transitioneventconditionValidator(data: Specification.Transitioneventcondition): (() => Specification.Transitioneventcondition) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Transitioneventcondition} data The underlying object + * @returns {Specification.Transitioneventcondition} The validated underlying object + */ +function transitioneventconditionBuildingFn( + data: Specification.Transitioneventcondition +): () => Specification.Transitioneventcondition { return () => { const validate = validators.get('Transitioneventcondition'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +41,10 @@ export function transitioneventconditionValidator(data: Specification.Transition }; } +/** + * A factory to create a builder proxy for the type `Specification.Transitioneventcondition` + * @returns {Specification.Transitioneventcondition} A builder for `Specification.Transitioneventcondition` + */ export function transitioneventconditionBuilder(): Builder { - return builder(transitioneventconditionValidator); -} \ No newline at end of file + return builder(transitioneventconditionBuildingFn); +} diff --git a/src/lib/builders/workflow-builder.ts b/src/lib/builders/workflow-builder.ts index b6c8c0a7..0e4ecab9 100644 --- a/src/lib/builders/workflow-builder.ts +++ b/src/lib/builders/workflow-builder.ts @@ -1,9 +1,31 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function workflowValidator(data: Specification.Workflow): (() => Specification.Workflow) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.Workflow} data The underlying object + * @returns {Specification.Workflow} The validated underlying object + */ +function workflowBuildingFn(data: Specification.Workflow): () => Specification.Workflow { return () => { const validate = validators.get('Workflow'); // TODO: ignore validation if no validator or throw ? @@ -17,6 +39,10 @@ export function workflowValidator(data: Specification.Workflow): (() => Specific }; } +/** + * A factory to create a builder proxy for the type `Specification.Workflow` + * @returns {Specification.Workflow} A builder for `Specification.Workflow` + */ export function workflowBuilder(): Builder { - return builder(workflowValidator); -} \ No newline at end of file + return builder(workflowBuildingFn); +} diff --git a/src/lib/definitions/index.ts b/src/lib/definitions/index.ts index 5e76224c..ca5ad173 100644 --- a/src/lib/definitions/index.ts +++ b/src/lib/definitions/index.ts @@ -1 +1,18 @@ -export * as Specification from './workflow'; \ No newline at end of file +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +export * as Specification from './workflow'; diff --git a/src/lib/definitions/workflow.ts b/src/lib/definitions/workflow.ts index a3f76068..fecf3e08 100644 --- a/src/lib/definitions/workflow.ts +++ b/src/lib/definitions/workflow.ts @@ -1,55 +1,95 @@ - /** - * Serverless Workflow specification - workflow schema - */ - export interface Workflow { - /** - * Workflow unique identifier - */ - id: string; - /** - * Workflow name - */ - name: string; - /** - * Workflow description - */ - description?: string; - /** - * Workflow version - */ - version: string; - start: Startdef; - /** - * Serverless Workflow schema version - */ - schemaVersion?: string; - /** - * Identifies the expression language used for workflow expressions. Default is 'jq' - */ - expressionLang?: string; - execTimeout?: Exectimeout; - /** - * If 'true', workflow instances is not terminated when there are no active execution paths. Instance can be terminated via 'terminate end definition' or reaching defined 'execTimeout' - */ - keepActive?: boolean; - metadata?: /* Metadata information */ Metadata; - events?: Events; - functions?: Functions; - retries?: Retries; - /** - * State definitions - */ - states: [ - (/* Causes the workflow execution to delay for a specified duration */ Delaystate | /* This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel */ Eventstate | /* Defines actions be performed. Does not wait for incoming events */ Operationstate | /* Consists of a number of states that are executed in parallel */ Parallelstate | Switchstate | /* Defines a sub-workflow to be executed */ Subflowstate | /* Inject static data into state data. Does not perform any actions */ Injectstate | /* Execute a set of defined actions or workflows for each element of a data array */ Foreachstate | /* This state performs an action, then waits for the callback event that denotes completion of the action */ Callbackstate), - ...(/* Causes the workflow execution to delay for a specified duration */ Delaystate | /* This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel */ Eventstate | /* Defines actions be performed. Does not wait for incoming events */ Operationstate | /* Consists of a number of states that are executed in parallel */ Parallelstate | Switchstate | /* Defines a sub-workflow to be executed */ Subflowstate | /* Inject static data into state data. Does not perform any actions */ Injectstate | /* Execute a set of defined actions or workflows for each element of a data array */ Foreachstate | /* This state performs an action, then waits for the callback event that denotes completion of the action */ Callbackstate)[] - ]; - } - export type Action = { - /** - * Unique action definition name - */ - name?: string; - functionRef: string | { +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +/** + * Serverless Workflow specification - workflow schema + */ +export interface Workflow { + /** + * Workflow unique identifier + */ + id: string; + /** + * Workflow name + */ + name: string; + /** + * Workflow description + */ + description?: string; + /** + * Workflow version + */ + version: string; + start: Startdef; + /** + * Serverless Workflow schema version + */ + schemaVersion?: string; + /** + * Identifies the expression language used for workflow expressions. Default is 'jq' + */ + expressionLang?: string; + execTimeout?: Exectimeout; + /** + * If 'true', workflow instances is not terminated when there are no active execution paths. Instance can be terminated via 'terminate end definition' or reaching defined 'execTimeout' + */ + keepActive?: boolean; + metadata?: /* Metadata information */ Metadata; + events?: Events; + functions?: Functions; + retries?: Retries; + /** + * State definitions + */ + states: [ + ( + | /* Causes the workflow execution to delay for a specified duration */ Delaystate + | /* This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel */ Eventstate + | /* Defines actions be performed. Does not wait for incoming events */ Operationstate + | /* Consists of a number of states that are executed in parallel */ Parallelstate + | Switchstate + | /* Defines a sub-workflow to be executed */ Subflowstate + | /* Inject static data into state data. Does not perform any actions */ Injectstate + | /* Execute a set of defined actions or workflows for each element of a data array */ Foreachstate + | /* This state performs an action, then waits for the callback event that denotes completion of the action */ Callbackstate + ), + ...( + | /* Causes the workflow execution to delay for a specified duration */ Delaystate + | /* This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel */ Eventstate + | /* Defines actions be performed. Does not wait for incoming events */ Operationstate + | /* Consists of a number of states that are executed in parallel */ Parallelstate + | Switchstate + | /* Defines a sub-workflow to be executed */ Subflowstate + | /* Inject static data into state data. Does not perform any actions */ Injectstate + | /* Execute a set of defined actions or workflows for each element of a data array */ Foreachstate + | /* This state performs an action, then waits for the callback event that denotes completion of the action */ Callbackstate + )[] + ]; +} +export type Action = + | { + /** + * Unique action definition name + */ + name?: string; + functionRef: + | string + | { /** * Name of the referenced function */ @@ -58,21 +98,24 @@ * Function arguments */ arguments?: { - [key: string]: any; + [key: string]: any; }; - }; - eventRef?: /* Event References */ Eventref; - /** - * Time period to wait for function execution to complete - */ - timeout?: string; - actionDataFilter?: Actiondatafilter; - } | { - /** - * Unique action definition name - */ - name?: string; - functionRef?: string | { + }; + eventRef?: /* Event References */ Eventref; + /** + * Time period to wait for function execution to complete + */ + timeout?: string; + actionDataFilter?: Actiondatafilter; + } + | { + /** + * Unique action definition name + */ + name?: string; + functionRef?: + | string + | { /** * Name of the referenced function */ @@ -81,145 +124,459 @@ * Function arguments */ arguments?: { - [key: string]: any; + [key: string]: any; }; - }; - eventRef: /* Event References */ Eventref; - /** - * Time period to wait for function execution to complete - */ - timeout?: string; - actionDataFilter?: Actiondatafilter; + }; + eventRef: /* Event References */ Eventref; + /** + * Time period to wait for function execution to complete + */ + timeout?: string; + actionDataFilter?: Actiondatafilter; }; - export interface Actiondatafilter { - /** - * Workflow expression that selects state data that the state action can use - */ - fromStateData?: string; - /** - * Workflow expression that filters the actions data results - */ - results?: string; - /** - * Workflow expression that selects a state data element to which the action results should be added/merged into. If not specified, denote, the top-level state data element - */ - toStateData?: string; +export interface Actiondatafilter { + /** + * Workflow expression that selects state data that the state action can use + */ + fromStateData?: string; + /** + * Workflow expression that filters the actions data results + */ + results?: string; + /** + * Workflow expression that selects a state data element to which the action results should be added/merged into. If not specified, denote, the top-level state data element + */ + toStateData?: string; +} +/** + * Branch Definition + */ +export type Branch = /* Branch Definition */ + | { + /** + * Branch name + */ + name: string; + /** + * Actions to be executed in this branch + */ + actions?: Action[]; + /** + * Unique Id of a workflow to be executed in this branch + */ + workflowId: string; } - /** - * Branch Definition - */ - export type Branch = /* Branch Definition */ { - /** - * Branch name - */ - name: string; - /** - * Actions to be executed in this branch - */ - actions?: Action[]; - /** - * Unique Id of a workflow to be executed in this branch - */ - workflowId: string; - } | { - /** - * Branch name - */ - name: string; - /** - * Actions to be executed in this branch - */ - actions: Action[]; - /** - * Unique Id of a workflow to be executed in this branch - */ - workflowId?: string; + | { + /** + * Branch name + */ + name: string; + /** + * Actions to be executed in this branch + */ + actions: Action[]; + /** + * Unique Id of a workflow to be executed in this branch + */ + workflowId?: string; }; - /** - * This state performs an action, then waits for the callback event that denotes completion of the action - */ - export interface Callbackstate { - /** - * Unique state id - */ - id?: string; - /** - * State name - */ - name?: string; - /** - * State type - */ - type?: "callback"; - /** - * Defines the action to be executed - */ - action?: Action; - /** - * References an unique callback event name in the defined workflow events - */ - eventRef?: string; - /** - * Time period to wait for incoming events (ISO 8601 format) - */ - timeout?: string; - /** - * Event data filter - */ - eventDataFilter?: Eventdatafilter; - /** - * State data filter - */ - stateDataFilter?: Statedatafilter; - /** - * States error handling and retries definitions - */ - onErrors?: Error[]; - /** - * Next transition of the workflow after all the actions have been performed - */ - transition?: Transition; - /** - * State end definition - */ - end?: End; - /** - * Unique Name of a workflow state which is responsible for compensation of this state - */ - compensatedBy?: string; - /** - * If true, this state is used to compensate another state. Default is false - */ - usedForCompensation?: boolean; - metadata?: /* Metadata information */ Metadata; +/** + * This state performs an action, then waits for the callback event that denotes completion of the action + */ +export interface Callbackstate { + /** + * Unique state id + */ + id?: string; + /** + * State name + */ + name?: string; + /** + * State type + */ + type?: 'callback'; + /** + * Defines the action to be executed + */ + action?: Action; + /** + * References an unique callback event name in the defined workflow events + */ + eventRef?: string; + /** + * Time period to wait for incoming events (ISO 8601 format) + */ + timeout?: string; + /** + * Event data filter + */ + eventDataFilter?: Eventdatafilter; + /** + * State data filter + */ + stateDataFilter?: Statedatafilter; + /** + * States error handling and retries definitions + */ + onErrors?: Error[]; + /** + * Next transition of the workflow after all the actions have been performed + */ + transition?: Transition; + /** + * State end definition + */ + end?: End; + /** + * Unique Name of a workflow state which is responsible for compensation of this state + */ + compensatedBy?: string; + /** + * If true, this state is used to compensate another state. Default is false + */ + usedForCompensation?: boolean; + metadata?: /* Metadata information */ Metadata; +} +/** + * CloudEvent correlation definition + */ +export interface CorrelationDef { + /** + * CloudEvent Extension Context Attribute name + */ + contextAttributeName: string; + /** + * CloudEvent Extension Context Attribute value + */ + contextAttributeValue?: string; +} +export type Crondef = + | string + | { + /** + * Repeating interval (cron expression) describing when the workflow instance should be created + */ + expression: string; + /** + * Specific date and time (ISO 8601 format) when the cron expression invocation is no longer valid + */ + validUntil?: string; + }; +/** + * Permits transitions to other states based on data conditions + */ +export interface Databasedswitch { + /** + * Unique State id + */ + id?: string; + /** + * State name + */ + name: string; + /** + * State type + */ + type: 'switch'; + /** + * State data filter + */ + stateDataFilter?: Statedatafilter; + /** + * Defines conditions evaluated against state data + */ + dataConditions: Datacondition[]; + /** + * States error handling and retries definitions + */ + onErrors?: Error[]; + /** + * Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition + */ + default?: /* Default definition. Can be either a transition or end definition */ Defaultdef; + /** + * Unique Name of a workflow state which is responsible for compensation of this state + */ + compensatedBy?: string; + /** + * If true, this state is used to compensate another state. Default is false + */ + usedForCompensation?: boolean; + metadata?: /* Metadata information */ Metadata; +} +export type Datacondition = /* Switch state data based condition */ + | Transitiondatacondition + | /* Switch state data based condition */ Enddatacondition; +/** + * Default definition. Can be either a transition or end definition + */ +export type Defaultdef = /* Default definition. Can be either a transition or end definition */ + | { + transition: Transition; + end?: End; } - /** - * CloudEvent correlation definition - */ - export interface CorrelationDef { - /** - * CloudEvent Extension Context Attribute name - */ - contextAttributeName: string; - /** - * CloudEvent Extension Context Attribute value - */ - contextAttributeValue?: string; + | { + transition?: Transition; + end: End; + }; +/** + * Causes the workflow execution to delay for a specified duration + */ +export interface Delaystate { + /** + * Unique State id + */ + id?: string; + /** + * State name + */ + name?: string; + /** + * State type + */ + type?: 'delay'; + /** + * State end definition + */ + end?: End; + /** + * State data filter + */ + stateDataFilter?: Statedatafilter; + /** + * Amount of time (ISO 8601 format) to delay + */ + timeDelay?: string; + /** + * States error handling and retries definitions + */ + onErrors?: Error[]; + /** + * Next transition of the workflow after the time delay + */ + transition?: Transition; + /** + * Unique Name of a workflow state which is responsible for compensation of this state + */ + compensatedBy?: string; + /** + * If true, this state is used to compensate another state. Default is false + */ + usedForCompensation?: boolean; + metadata?: /* Metadata information */ Metadata; +} +export type End = + | boolean + | { + /** + * If true, completes all execution flows in the given workflow instance + */ + terminate?: boolean; + /** + * Defines events that should be produced + */ + produceEvents?: /* Produce an event and set its data */ Produceeventdef[]; + /** + * If set to true, triggers workflow compensation. Default is false + */ + compensate?: boolean; + }; +/** + * Switch state data based condition + */ +export interface Enddatacondition { + /** + * Data condition name + */ + name?: string; + /** + * Workflow expression evaluated against state data. Must evaluate to true or false + */ + condition: string; + /** + * Workflow end definition + */ + end: End; + metadata?: /* Metadata information */ Metadata; +} +/** + * Switch state data event condition + */ +export interface Enddeventcondition { + /** + * Event condition name + */ + name?: string; + /** + * References an unique event name in the defined workflow events + */ + eventRef: string; + /** + * Explicit transition to end + */ + end: End; + /** + * Event data filter definition + */ + eventDataFilter?: Eventdatafilter; + metadata?: /* Metadata information */ Metadata; +} +export type Error = + | { + /** + * Domain-specific error name, or '*' to indicate all possible errors + */ + error: string; + /** + * Error code. Can be used in addition to the name to help runtimes resolve to technical errors/exceptions. Should not be defined if error is set to '*' + */ + code?: string; + /** + * References a unique name of a retry definition. + */ + retryRef?: string; + transition: Transition; + end?: End; } - export type Crondef = string | { - /** - * Repeating interval (cron expression) describing when the workflow instance should be created - */ - expression: string; - /** - * Specific date and time (ISO 8601 format) when the cron expression invocation is no longer valid - */ - validUntil?: string; + | { + /** + * Domain-specific error name, or '*' to indicate all possible errors + */ + error: string; + /** + * Error code. Can be used in addition to the name to help runtimes resolve to technical errors/exceptions. Should not be defined if error is set to '*' + */ + code?: string; + /** + * References a unique name of a retry definition. + */ + retryRef?: string; + transition?: Transition; + end: End; }; - /** - * Permits transitions to other states based on data conditions - */ - export interface Databasedswitch { +/** + * Permits transitions to other states based on events + */ +export interface Eventbasedswitch { + /** + * Unique State id + */ + id?: string; + /** + * State name + */ + name: string; + /** + * State type + */ + type: 'switch'; + /** + * State data filter + */ + stateDataFilter?: Statedatafilter; + /** + * Defines conditions evaluated against events + */ + eventConditions: Eventcondition[]; + /** + * States error handling and retries definitions + */ + onErrors?: Error[]; + /** + * If eventConditions is used, defines the time period to wait for events (ISO 8601 format) + */ + eventTimeout?: string; + /** + * Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition + */ + default?: /* Default definition. Can be either a transition or end definition */ Defaultdef; + /** + * Unique Name of a workflow state which is responsible for compensation of this state + */ + compensatedBy?: string; + /** + * If true, this state is used to compensate another state. Default is false + */ + usedForCompensation?: boolean; + metadata?: /* Metadata information */ Metadata; +} +export type Eventcondition = /* Switch state data event condition */ + | Transitioneventcondition + | /* Switch state data event condition */ Enddeventcondition; +export interface Eventdatafilter { + /** + * Workflow expression that filters of the event data (payload) + */ + data?: string; + /** + * Workflow expression that selects a state data element to which the event payload should be added/merged into. If not specified, denotes, the top-level state data element. + */ + toStateData?: string; +} +export interface Eventdef { + /** + * Unique event name + */ + name?: string; + /** + * CloudEvent source + */ + source?: string; + /** + * CloudEvent type + */ + type?: string; + /** + * Defines the CloudEvent as either 'consumed' or 'produced' by the workflow. Default is 'consumed' + */ + kind?: 'consumed' | 'produced'; + /** + * CloudEvent correlation definitions + */ + correlation?: [ + /* CloudEvent correlation definition */ CorrelationDef, + .../* CloudEvent correlation definition */ CorrelationDef[] + ]; + /** + * Metadata information + */ + metadata?: /* Metadata information */ Metadata; +} +/** + * Event References + */ +export interface Eventref { + /** + * Reference to the unique name of a 'produced' event definition + */ + triggerEventRef: string; + /** + * Reference to the unique name of a 'consumed' event definition + */ + resultEventRef: string; + /** + * If string type, an expression which selects parts of the states data output to become the data (payload) of the event referenced by 'triggerEventRef'. If object type, a custom object to become the data (payload) of the event referenced by 'triggerEventRef'. + */ + data?: + | string + | { + [key: string]: any; + }; + /** + * Add additional extension context attributes to the produced event + */ + contextAttributes?: { + [name: string]: string; + }; +} +export type Events = string /* uri */ | [Eventdef, ...Eventdef[]]; +/** + * This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel + */ +export type Eventstate = + /* This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel */ + | { /** * Unique State id */ @@ -231,294 +588,33 @@ /** * State type */ - type: "switch"; - /** - * State data filter - */ - stateDataFilter?: Statedatafilter; - /** - * Defines conditions evaluated against state data - */ - dataConditions: Datacondition[]; - /** - * States error handling and retries definitions - */ - onErrors?: Error[]; - /** - * Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition - */ - default?: /* Default definition. Can be either a transition or end definition */ Defaultdef; - /** - * Unique Name of a workflow state which is responsible for compensation of this state - */ - compensatedBy?: string; - /** - * If true, this state is used to compensate another state. Default is false - */ - usedForCompensation?: boolean; - metadata?: /* Metadata information */ Metadata; - } - export type Datacondition = /* Switch state data based condition */ Transitiondatacondition | /* Switch state data based condition */ Enddatacondition; - /** - * Default definition. Can be either a transition or end definition - */ - export type Defaultdef = /* Default definition. Can be either a transition or end definition */ { - transition: Transition; - end?: End; - } | { - transition?: Transition; - end: End; - }; - /** - * Causes the workflow execution to delay for a specified duration - */ - export interface Delaystate { - /** - * Unique State id - */ - id?: string; - /** - * State name - */ - name?: string; + type: 'event'; /** - * State type + * If true consuming one of the defined events causes its associated actions to be performed. If false all of the defined events must be consumed in order for actions to be performed */ - type?: "delay"; + exclusive?: boolean; /** - * State end definition + * Define the events to be consumed and optional actions to be performed */ - end?: End; + onEvents: Onevents[]; /** - * State data filter + * Time period to wait for incoming events (ISO 8601 format) */ + timeout?: string; stateDataFilter?: Statedatafilter; - /** - * Amount of time (ISO 8601 format) to delay - */ - timeDelay?: string; /** * States error handling and retries definitions */ onErrors?: Error[]; - /** - * Next transition of the workflow after the time delay - */ - transition?: Transition; - /** - * Unique Name of a workflow state which is responsible for compensation of this state - */ - compensatedBy?: string; - /** - * If true, this state is used to compensate another state. Default is false - */ - usedForCompensation?: boolean; - metadata?: /* Metadata information */ Metadata; - } - export type End = boolean | { - /** - * If true, completes all execution flows in the given workflow instance - */ - terminate?: boolean; - /** - * Defines events that should be produced - */ - produceEvents?: /* Produce an event and set its data */ Produceeventdef[]; - /** - * If set to true, triggers workflow compensation. Default is false - */ - compensate?: boolean; - }; - /** - * Switch state data based condition - */ - export interface Enddatacondition { - /** - * Data condition name - */ - name?: string; - /** - * Workflow expression evaluated against state data. Must evaluate to true or false - */ - condition: string; - /** - * Workflow end definition - */ - end: End; - metadata?: /* Metadata information */ Metadata; - } - /** - * Switch state data event condition - */ - export interface Enddeventcondition { - /** - * Event condition name - */ - name?: string; - /** - * References an unique event name in the defined workflow events - */ - eventRef: string; - /** - * Explicit transition to end - */ - end: End; - /** - * Event data filter definition - */ - eventDataFilter?: Eventdatafilter; - metadata?: /* Metadata information */ Metadata; - } - export type Error = { - /** - * Domain-specific error name, or '*' to indicate all possible errors - */ - error: string; - /** - * Error code. Can be used in addition to the name to help runtimes resolve to technical errors/exceptions. Should not be defined if error is set to '*' - */ - code?: string; - /** - * References a unique name of a retry definition. - */ - retryRef?: string; - transition: Transition; - end?: End; - } | { - /** - * Domain-specific error name, or '*' to indicate all possible errors - */ - error: string; - /** - * Error code. Can be used in addition to the name to help runtimes resolve to technical errors/exceptions. Should not be defined if error is set to '*' - */ - code?: string; - /** - * References a unique name of a retry definition. - */ - retryRef?: string; transition?: Transition; end: End; - }; - /** - * Permits transitions to other states based on events - */ - export interface Eventbasedswitch { - /** - * Unique State id - */ - id?: string; - /** - * State name - */ - name: string; - /** - * State type - */ - type: "switch"; - /** - * State data filter - */ - stateDataFilter?: Statedatafilter; - /** - * Defines conditions evaluated against events - */ - eventConditions: Eventcondition[]; - /** - * States error handling and retries definitions - */ - onErrors?: Error[]; - /** - * If eventConditions is used, defines the time period to wait for events (ISO 8601 format) - */ - eventTimeout?: string; - /** - * Default transition of the workflow if there is no matching data conditions. Can include a transition or end definition - */ - default?: /* Default definition. Can be either a transition or end definition */ Defaultdef; /** * Unique Name of a workflow state which is responsible for compensation of this state */ compensatedBy?: string; - /** - * If true, this state is used to compensate another state. Default is false - */ - usedForCompensation?: boolean; - metadata?: /* Metadata information */ Metadata; - } - export type Eventcondition = /* Switch state data event condition */ Transitioneventcondition | /* Switch state data event condition */ Enddeventcondition; - export interface Eventdatafilter { - /** - * Workflow expression that filters of the event data (payload) - */ - data?: string; - /** - * Workflow expression that selects a state data element to which the event payload should be added/merged into. If not specified, denotes, the top-level state data element. - */ - toStateData?: string; - } - export interface Eventdef { - /** - * Unique event name - */ - name?: string; - /** - * CloudEvent source - */ - source?: string; - /** - * CloudEvent type - */ - type?: string; - /** - * Defines the CloudEvent as either 'consumed' or 'produced' by the workflow. Default is 'consumed' - */ - kind?: "consumed" | "produced"; - /** - * CloudEvent correlation definitions - */ - correlation?: [ - /* CloudEvent correlation definition */ CorrelationDef, - .../* CloudEvent correlation definition */ CorrelationDef[] - ]; - /** - * Metadata information - */ metadata?: /* Metadata information */ Metadata; - } - /** - * Event References - */ - export interface Eventref { - /** - * Reference to the unique name of a 'produced' event definition - */ - triggerEventRef: string; - /** - * Reference to the unique name of a 'consumed' event definition - */ - resultEventRef: string; - /** - * If string type, an expression which selects parts of the states data output to become the data (payload) of the event referenced by 'triggerEventRef'. If object type, a custom object to become the data (payload) of the event referenced by 'triggerEventRef'. - */ - data?: string | { - [key: string]: any; - }; - /** - * Add additional extension context attributes to the produced event - */ - contextAttributes?: { - [name: string]: string; - }; - } - export type Events = string /* uri */ | [ - Eventdef, - ...Eventdef[] - ]; - /** - * This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel - */ - export type Eventstate = /* This state is used to wait for events from event sources, then consumes them and invoke one or more actions to run in sequence or parallel */ { + } + | { /** * Unique State id */ @@ -530,7 +626,7 @@ /** * State type */ - type: "event"; + type: 'event'; /** * If true consuming one of the defined events causes its associated actions to be performed. If false all of the defined events must be consumed in order for actions to be performed */ @@ -548,14 +644,15 @@ * States error handling and retries definitions */ onErrors?: Error[]; - transition?: Transition; - end: End; + transition: Transition; + end?: End; /** * Unique Name of a workflow state which is responsible for compensation of this state */ compensatedBy?: string; metadata?: /* Metadata information */ Metadata; - } | { + } + | { /** * Unique State id */ @@ -567,44 +664,7 @@ /** * State type */ - type: "event"; - /** - * If true consuming one of the defined events causes its associated actions to be performed. If false all of the defined events must be consumed in order for actions to be performed - */ - exclusive?: boolean; - /** - * Define the events to be consumed and optional actions to be performed - */ - onEvents: Onevents[]; - /** - * Time period to wait for incoming events (ISO 8601 format) - */ - timeout?: string; - stateDataFilter?: Statedatafilter; - /** - * States error handling and retries definitions - */ - onErrors?: Error[]; - transition: Transition; - end?: End; - /** - * Unique Name of a workflow state which is responsible for compensation of this state - */ - compensatedBy?: string; - metadata?: /* Metadata information */ Metadata; - } | { - /** - * Unique State id - */ - id?: string; - /** - * State name - */ - name: string; - /** - * State type - */ - type: "event"; + type: 'event'; /** * If true consuming one of the defined events causes its associated actions to be performed. If false all of the defined events must be consumed in order for actions to be performed */ @@ -629,507 +689,508 @@ */ compensatedBy?: string; metadata?: /* Metadata information */ Metadata; + }; +export interface Exectimeout { + /** + * Timeout duration (ISO 8601 duration format) + */ + duration: string; + /** + * If `false`, workflow instance is allowed to finish current execution. If `true`, current workflow execution is abrupted. + */ + interrupt?: boolean; + /** + * Name of a workflow state to be executed before workflow instance is terminated + */ + runBefore?: string; +} +/** + * Execute a set of defined actions or workflows for each element of a data array + */ +export interface Foreachstate { + /** + * Unique State id + */ + id?: string; + /** + * State name + */ + name?: string; + /** + * State type + */ + type?: 'foreach'; + /** + * State end definition + */ + end?: End; + /** + * Workflow expression selecting an array element of the states data + */ + inputCollection?: string; + /** + * Workflow expression specifying an array element of the states data to add the results of each iteration + */ + outputCollection?: string; + /** + * Name of the iteration parameter that can be referenced in actions/workflow. For each parallel iteration, this param should contain an unique element of the inputCollection array + */ + iterationParam?: string; + /** + * Specifies how upper bound on how many iterations may run in parallel + */ + max?: number | string; + /** + * Actions to be executed for each of the elements of inputCollection + */ + actions?: Action[]; + /** + * Unique Id of a workflow to be executed for each of the elements of inputCollection + */ + workflowId?: string; + /** + * State data filter + */ + stateDataFilter?: Statedatafilter; + /** + * States error handling and retries definitions + */ + onErrors?: Error[]; + /** + * Next transition of the workflow after state has completed + */ + transition?: Transition; + /** + * Unique Name of a workflow state which is responsible for compensation of this state + */ + compensatedBy?: string; + /** + * If true, this state is used to compensate another state. Default is false + */ + usedForCompensation?: boolean; + metadata?: /* Metadata information */ Metadata; +} +export interface Function { + /** + * Unique function name + */ + name: string; + /** + * If type is `rest`, #. If type is `rpc`, ##. If type is `expression`, defines the workflow expression. + */ + operation: string; + /** + * Defines the function type. Is either `rest`, `rpc` or `expression`. Default is `rest` + */ + type?: 'rest' | 'rpc' | 'expression'; +} +export type Functions = string /* uri */ | [Function, ...Function[]]; +/** + * Inject static data into state data. Does not perform any actions + */ +export interface Injectstate { + /** + * Unique state id + */ + id?: string; + /** + * State name + */ + name?: string; + /** + * State type + */ + type?: 'inject'; + /** + * State end definition + */ + end?: End; + /** + * JSON object which can be set as states data input and can be manipulated via filters + */ + data?: { + [key: string]: any; + }; + /** + * State data filter + */ + stateDataFilter?: Statedatafilter; + /** + * Next transition of the workflow after subflow has completed + */ + transition?: Transition; + /** + * Unique Name of a workflow state which is responsible for compensation of this state + */ + compensatedBy?: string; + /** + * If true, this state is used to compensate another state. Default is false + */ + usedForCompensation?: boolean; + metadata?: /* Metadata information */ Metadata; +} +/** + * Metadata information + */ +export interface Metadata { + [name: string]: string; +} +export interface Onevents { + /** + * References one or more unique event names in the defined workflow events + */ + eventRefs: [string, ...string[]]; + /** + * Specifies how actions are to be performed (in sequence of parallel) + */ + actionMode?: 'sequential' | 'parallel'; + /** + * Actions to be performed if expression matches + */ + actions?: Action[]; + /** + * Event data filter + */ + eventDataFilter?: Eventdatafilter; +} +/** + * Defines actions be performed. Does not wait for incoming events + */ +export interface Operationstate { + /** + * Unique State id + */ + id?: string; + /** + * State name + */ + name?: string; + /** + * State type + */ + type?: 'operation'; + /** + * State end definition + */ + end?: End; + /** + * State data filter + */ + stateDataFilter?: Statedatafilter; + /** + * Specifies whether actions are performed in sequence or in parallel + */ + actionMode?: 'sequential' | 'parallel'; + /** + * Actions to be performed + */ + actions?: Action[]; + /** + * States error handling and retries definitions + */ + onErrors?: Error[]; + /** + * Next transition of the workflow after all the actions have been performed + */ + transition?: Transition; + /** + * Unique Name of a workflow state which is responsible for compensation of this state + */ + compensatedBy?: string; + /** + * If true, this state is used to compensate another state. Default is false + */ + usedForCompensation?: boolean; + metadata?: /* Metadata information */ Metadata; +} +/** + * Consists of a number of states that are executed in parallel + */ +export interface Parallelstate { + /** + * Unique State id + */ + id?: string; + /** + * State name + */ + name?: string; + /** + * State type + */ + type?: 'parallel'; + /** + * State end definition + */ + end?: End; + /** + * State data filter + */ + stateDataFilter?: Statedatafilter; + /** + * Branch Definitions + */ + branches?: /* Branch Definition */ Branch[]; + /** + * Option types on how to complete branch execution. + */ + completionType?: 'and' | 'xor' | 'n_of_m'; + /** + * Used when completionType is set to 'n_of_m' to specify the 'N' value + */ + n?: number | string; + /** + * States error handling and retries definitions + */ + onErrors?: Error[]; + /** + * Next transition of the workflow after all branches have completed execution + */ + transition?: Transition; + /** + * Unique Name of a workflow state which is responsible for compensation of this state + */ + compensatedBy?: string; + /** + * If true, this state is used to compensate another state. Default is false + */ + usedForCompensation?: boolean; + metadata?: /* Metadata information */ Metadata; +} +/** + * Produce an event and set its data + */ +export interface Produceeventdef { + /** + * References a name of a defined event + */ + eventRef: string; + /** + * If String, expression which selects parts of the states data output to become the data of the produced event. If object a custom object to become the data of produced event. + */ + data?: + | string + | { + [key: string]: any; + }; + /** + * Add additional event extension context attributes + */ + contextAttributes?: { + [name: string]: string; + }; +} +export interface Repeat { + /** + * Expression evaluated against SubFlow state data. SubFlow will repeat execution as long as this expression is true or until the max property count is reached + */ + expression?: string; + /** + * If true, the expression is evaluated before each repeat execution, if false the expression is evaluated after each repeat execution + */ + checkBefore?: boolean; + /** + * Sets the maximum amount of repeat executions + */ + max?: number; + /** + * If true, repeats executions in a case unhandled errors propagate from the sub-workflow to this state + */ + continueOnError?: boolean; + /** + * List referencing defined consumed workflow events. SubFlow will repeat execution until one of the defined events is consumed, or until the max property count is reached + */ + stopOnEvents?: [string, ...string[]]; +} +export type Retries = string /* uri */ | [Retrydef, ...Retrydef[]]; +export interface Retrydef { + /** + * Unique retry strategy name + */ + name: string; + /** + * Time delay between retry attempts (ISO 8601 duration format) + */ + delay?: string; + /** + * Maximum time delay between retry attempts (ISO 8601 duration format) + */ + maxDelay?: string; + /** + * Static value by which the delay increases during each attempt (ISO 8601 time format) + */ + increment?: string; + /** + * Numeric value, if specified the delay between retries is multiplied by this value. + */ + multiplier?: number | string; + /** + * Maximum number of retry attempts. + */ + maxAttempts: number | string; + /** + * If float type, maximum amount of random time added or subtracted from the delay between each retry relative to total delay (between 0 and 1). If string type, absolute maximum amount of random time added or subtracted from the delay between each retry (ISO 8601 duration format) + */ + jitter?: number | string; +} +export type Schedule = + | string + | /* Start state schedule definition */ ( + | { + /** + * Time interval (must be repeating interval) described with ISO 8601 format. Declares when workflow instances will be automatically created. + */ + interval: string; + cron?: Crondef; + /** + * Timezone name used to evaluate the interval & cron-expression. (default: UTC) + */ + timezone?: string; + } + | { + /** + * Time interval (must be repeating interval) described with ISO 8601 format. Declares when workflow instances will be automatically created. + */ + interval?: string; + cron: Crondef; + /** + * Timezone name used to evaluate the interval & cron-expression. (default: UTC) + */ + timezone?: string; + } + ); +export type Startdef = + | string + | { + /** + * Name of the starting workflow state + */ + stateName: string; + /** + * Define the time/repeating intervals or cron at which workflow instances should be automatically started. + */ + schedule: Schedule; }; - export interface Exectimeout { - /** - * Timeout duration (ISO 8601 duration format) - */ - duration: string; - /** - * If `false`, workflow instance is allowed to finish current execution. If `true`, current workflow execution is abrupted. - */ - interrupt?: boolean; - /** - * Name of a workflow state to be executed before workflow instance is terminated - */ - runBefore?: string; - } - /** - * Execute a set of defined actions or workflows for each element of a data array - */ - export interface Foreachstate { - /** - * Unique State id - */ - id?: string; - /** - * State name - */ - name?: string; - /** - * State type - */ - type?: "foreach"; - /** - * State end definition - */ - end?: End; - /** - * Workflow expression selecting an array element of the states data - */ - inputCollection?: string; - /** - * Workflow expression specifying an array element of the states data to add the results of each iteration - */ - outputCollection?: string; - /** - * Name of the iteration parameter that can be referenced in actions/workflow. For each parallel iteration, this param should contain an unique element of the inputCollection array - */ - iterationParam?: string; - /** - * Specifies how upper bound on how many iterations may run in parallel - */ - max?: number | string; - /** - * Actions to be executed for each of the elements of inputCollection - */ - actions?: Action[]; - /** - * Unique Id of a workflow to be executed for each of the elements of inputCollection - */ - workflowId?: string; - /** - * State data filter - */ - stateDataFilter?: Statedatafilter; - /** - * States error handling and retries definitions - */ - onErrors?: Error[]; - /** - * Next transition of the workflow after state has completed - */ - transition?: Transition; - /** - * Unique Name of a workflow state which is responsible for compensation of this state - */ - compensatedBy?: string; - /** - * If true, this state is used to compensate another state. Default is false - */ - usedForCompensation?: boolean; - metadata?: /* Metadata information */ Metadata; - } - export interface Function { - /** - * Unique function name - */ - name: string; - /** - * If type is `rest`, #. If type is `rpc`, ##. If type is `expression`, defines the workflow expression. - */ - operation: string; - /** - * Defines the function type. Is either `rest`, `rpc` or `expression`. Default is `rest` - */ - type?: "rest" | "rpc" | "expression"; - } - export type Functions = string /* uri */ | [ - Function, - ...Function[] - ]; - /** - * Inject static data into state data. Does not perform any actions - */ - export interface Injectstate { - /** - * Unique state id - */ - id?: string; - /** - * State name - */ - name?: string; - /** - * State type - */ - type?: "inject"; - /** - * State end definition - */ - end?: End; - /** - * JSON object which can be set as states data input and can be manipulated via filters - */ - data?: { - [key: string]: any; - }; - /** - * State data filter - */ - stateDataFilter?: Statedatafilter; - /** - * Next transition of the workflow after subflow has completed - */ - transition?: Transition; - /** - * Unique Name of a workflow state which is responsible for compensation of this state - */ - compensatedBy?: string; - /** - * If true, this state is used to compensate another state. Default is false - */ - usedForCompensation?: boolean; - metadata?: /* Metadata information */ Metadata; - } - /** - * Metadata information - */ - export interface Metadata { - [name: string]: string; - } - export interface Onevents { - /** - * References one or more unique event names in the defined workflow events - */ - eventRefs: [ - string, - ...string[] - ]; - /** - * Specifies how actions are to be performed (in sequence of parallel) - */ - actionMode?: "sequential" | "parallel"; - /** - * Actions to be performed if expression matches - */ - actions?: Action[]; - /** - * Event data filter - */ - eventDataFilter?: Eventdatafilter; - } - /** - * Defines actions be performed. Does not wait for incoming events - */ - export interface Operationstate { - /** - * Unique State id - */ - id?: string; - /** - * State name - */ - name?: string; - /** - * State type - */ - type?: "operation"; - /** - * State end definition - */ - end?: End; - /** - * State data filter - */ - stateDataFilter?: Statedatafilter; - /** - * Specifies whether actions are performed in sequence or in parallel - */ - actionMode?: "sequential" | "parallel"; - /** - * Actions to be performed - */ - actions?: Action[]; - /** - * States error handling and retries definitions - */ - onErrors?: Error[]; - /** - * Next transition of the workflow after all the actions have been performed - */ - transition?: Transition; - /** - * Unique Name of a workflow state which is responsible for compensation of this state - */ - compensatedBy?: string; - /** - * If true, this state is used to compensate another state. Default is false - */ - usedForCompensation?: boolean; - metadata?: /* Metadata information */ Metadata; - } - /** - * Consists of a number of states that are executed in parallel - */ - export interface Parallelstate { - /** - * Unique State id - */ - id?: string; - /** - * State name - */ - name?: string; - /** - * State type - */ - type?: "parallel"; - /** - * State end definition - */ - end?: End; - /** - * State data filter - */ - stateDataFilter?: Statedatafilter; - /** - * Branch Definitions - */ - branches?: /* Branch Definition */ Branch[]; - /** - * Option types on how to complete branch execution. - */ - completionType?: "and" | "xor" | "n_of_m"; - /** - * Used when completionType is set to 'n_of_m' to specify the 'N' value - */ - n?: number | string; - /** - * States error handling and retries definitions - */ - onErrors?: Error[]; - /** - * Next transition of the workflow after all branches have completed execution - */ - transition?: Transition; - /** - * Unique Name of a workflow state which is responsible for compensation of this state - */ - compensatedBy?: string; - /** - * If true, this state is used to compensate another state. Default is false - */ - usedForCompensation?: boolean; - metadata?: /* Metadata information */ Metadata; - } - /** - * Produce an event and set its data - */ - export interface Produceeventdef { - /** - * References a name of a defined event - */ - eventRef: string; - /** - * If String, expression which selects parts of the states data output to become the data of the produced event. If object a custom object to become the data of produced event. - */ - data?: string | { - [key: string]: any; - }; - /** - * Add additional event extension context attributes - */ - contextAttributes?: { - [name: string]: string; - }; - } - export interface Repeat { - /** - * Expression evaluated against SubFlow state data. SubFlow will repeat execution as long as this expression is true or until the max property count is reached - */ - expression?: string; - /** - * If true, the expression is evaluated before each repeat execution, if false the expression is evaluated after each repeat execution - */ - checkBefore?: boolean; - /** - * Sets the maximum amount of repeat executions - */ - max?: number; - /** - * If true, repeats executions in a case unhandled errors propagate from the sub-workflow to this state - */ - continueOnError?: boolean; - /** - * List referencing defined consumed workflow events. SubFlow will repeat execution until one of the defined events is consumed, or until the max property count is reached - */ - stopOnEvents?: [ - string, - ...string[] - ]; - } - export type Retries = string /* uri */ | [ - Retrydef, - ...Retrydef[] - ]; - export interface Retrydef { - /** - * Unique retry strategy name - */ - name: string; - /** - * Time delay between retry attempts (ISO 8601 duration format) - */ - delay?: string; - /** - * Maximum time delay between retry attempts (ISO 8601 duration format) - */ - maxDelay?: string; - /** - * Static value by which the delay increases during each attempt (ISO 8601 time format) - */ - increment?: string; - /** - * Numeric value, if specified the delay between retries is multiplied by this value. - */ - multiplier?: number | string; - /** - * Maximum number of retry attempts. - */ - maxAttempts: number | string; - /** - * If float type, maximum amount of random time added or subtracted from the delay between each retry relative to total delay (between 0 and 1). If string type, absolute maximum amount of random time added or subtracted from the delay between each retry (ISO 8601 duration format) - */ - jitter?: number | string; - } - export type Schedule = string | /* Start state schedule definition */ ({ - /** - * Time interval (must be repeating interval) described with ISO 8601 format. Declares when workflow instances will be automatically created. - */ - interval: string; - cron?: Crondef; - /** - * Timezone name used to evaluate the interval & cron-expression. (default: UTC) - */ - timezone?: string; - } | { - /** - * Time interval (must be repeating interval) described with ISO 8601 format. Declares when workflow instances will be automatically created. - */ - interval?: string; - cron: Crondef; - /** - * Timezone name used to evaluate the interval & cron-expression. (default: UTC) - */ - timezone?: string; - }); - export type Startdef = string | { - /** - * Name of the starting workflow state - */ - stateName: string; - /** - * Define the time/repeating intervals or cron at which workflow instances should be automatically started. - */ - schedule: Schedule; - }; - export interface Statedatafilter { - /** - * Workflow expression to filter the state data input - */ - input?: string; - /** - * Workflow expression that filters the state data output - */ - output?: string; - } - /** - * Defines a sub-workflow to be executed - */ - export interface Subflowstate { - /** - * Unique state id - */ - id?: string; - /** - * State name - */ - name?: string; - /** - * State type - */ - type?: "subflow"; - /** - * State end definition - */ - end?: End; - /** - * Workflow execution must wait for sub-workflow to finish before continuing - */ - waitForCompletion?: boolean; - /** - * Sub-workflow unique id - */ - workflowId?: string; - /** - * SubFlow state repeat exec definition - */ - repeat?: Repeat; - /** - * State data filter - */ - stateDataFilter?: Statedatafilter; - /** - * States error handling and retries definitions - */ - onErrors?: Error[]; - /** - * Next transition of the workflow after SubFlow has completed execution - */ - transition?: Transition; - /** - * Unique Name of a workflow state which is responsible for compensation of this state - */ - compensatedBy?: string; - /** - * If true, this state is used to compensate another state. Default is false - */ - usedForCompensation?: boolean; - metadata?: /* Metadata information */ Metadata; - } - export type Switchstate = /* Permits transitions to other states based on data conditions */ Databasedswitch | /* Permits transitions to other states based on events */ Eventbasedswitch; - export type Transition = string | { - /** - * Name of state to transition to - */ - nextState: string; - /** - * Array of events to be produced before the transition happens - */ - produceEvents?: /* Produce an event and set its data */ Produceeventdef[]; - /** - * If set to true, triggers workflow compensation when before this transition is taken. Default is false - */ - compensate?: boolean; +export interface Statedatafilter { + /** + * Workflow expression to filter the state data input + */ + input?: string; + /** + * Workflow expression that filters the state data output + */ + output?: string; +} +/** + * Defines a sub-workflow to be executed + */ +export interface Subflowstate { + /** + * Unique state id + */ + id?: string; + /** + * State name + */ + name?: string; + /** + * State type + */ + type?: 'subflow'; + /** + * State end definition + */ + end?: End; + /** + * Workflow execution must wait for sub-workflow to finish before continuing + */ + waitForCompletion?: boolean; + /** + * Sub-workflow unique id + */ + workflowId?: string; + /** + * SubFlow state repeat exec definition + */ + repeat?: Repeat; + /** + * State data filter + */ + stateDataFilter?: Statedatafilter; + /** + * States error handling and retries definitions + */ + onErrors?: Error[]; + /** + * Next transition of the workflow after SubFlow has completed execution + */ + transition?: Transition; + /** + * Unique Name of a workflow state which is responsible for compensation of this state + */ + compensatedBy?: string; + /** + * If true, this state is used to compensate another state. Default is false + */ + usedForCompensation?: boolean; + metadata?: /* Metadata information */ Metadata; +} +export type Switchstate = /* Permits transitions to other states based on data conditions */ + | Databasedswitch + | /* Permits transitions to other states based on events */ Eventbasedswitch; +export type Transition = + | string + | { + /** + * Name of state to transition to + */ + nextState: string; + /** + * Array of events to be produced before the transition happens + */ + produceEvents?: /* Produce an event and set its data */ Produceeventdef[]; + /** + * If set to true, triggers workflow compensation when before this transition is taken. Default is false + */ + compensate?: boolean; }; - /** - * Switch state data based condition - */ - export interface Transitiondatacondition { - /** - * Data condition name - */ - name?: string; - /** - * Workflow expression evaluated against state data. Must evaluate to true or false - */ - condition: string; - /** - * Workflow transition if condition is evaluated to true - */ - transition: Transition; - metadata?: /* Metadata information */ Metadata; - } - /** - * Switch state data event condition - */ - export interface Transitioneventcondition { - /** - * Event condition name - */ - name?: string; - /** - * References an unique event name in the defined workflow events - */ - eventRef: string; - /** - * Next transition of the workflow if there is valid matches - */ - transition: Transition; - /** - * Event data filter definition - */ - eventDataFilter?: Eventdatafilter; - metadata?: /* Metadata information */ Metadata; - } \ No newline at end of file +/** + * Switch state data based condition + */ +export interface Transitiondatacondition { + /** + * Data condition name + */ + name?: string; + /** + * Workflow expression evaluated against state data. Must evaluate to true or false + */ + condition: string; + /** + * Workflow transition if condition is evaluated to true + */ + transition: Transition; + metadata?: /* Metadata information */ Metadata; +} +/** + * Switch state data event condition + */ +export interface Transitioneventcondition { + /** + * Event condition name + */ + name?: string; + /** + * References an unique event name in the defined workflow events + */ + eventRef: string; + /** + * Next transition of the workflow if there is valid matches + */ + transition: Transition; + /** + * Event data filter definition + */ + eventDataFilter?: Eventdatafilter; + metadata?: /* Metadata information */ Metadata; +} diff --git a/src/lib/validation/validators-paths.ts b/src/lib/validation/validators-paths.ts index ce6abb9a..f6ca2f12 100644 --- a/src/lib/validation/validators-paths.ts +++ b/src/lib/validation/validators-paths.ts @@ -1,45 +1,65 @@ +/* +* Copyright 2021-Present The Serverless Workflow Specification Authors +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +/** +* A map of type names and their corresponding schema +*/ export const validatorsPaths: [string, string][] = [ ['Workflow', 'https://serverlessworkflow.org/core/0.6/workflow.json'], - ['Crondef', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/crondef'], - ['Exectimeout', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/exectimeout'], - ['Transition', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/transition'], - ['Error', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/error'], - ['Onevents', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/onevents'], - ['Action', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/action'], - ['Eventref', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/eventref'], - ['Branch', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/branch'], - ['Delaystate', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/delaystate'], - ['Eventstate', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/eventstate'], - ['Operationstate', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/operationstate'], - ['Parallelstate', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/parallelstate'], - ['Switchstate', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/switchstate'], - ['Eventbasedswitch', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/eventbasedswitch'], - ['Databasedswitch', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/databasedswitch'], - ['Defaultdef', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/defaultdef'], - ['Eventcondition', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/eventcondition'], - ['Transitioneventcondition', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/transitioneventcondition'], - ['Enddeventcondition', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/enddeventcondition'], - ['Datacondition', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/datacondition'], - ['Transitiondatacondition', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/transitiondatacondition'], - ['Enddatacondition', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/enddatacondition'], - ['Subflowstate', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/subflowstate'], - ['Injectstate', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/injectstate'], - ['Foreachstate', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/foreachstate'], - ['Callbackstate', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/callbackstate'], - ['Startdef', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/startdef'], - ['Schedule', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/schedule'], - ['End', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/end'], - ['Produceeventdef', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/produceeventdef'], - ['Statedatafilter', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/statedatafilter'], - ['Eventdatafilter', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/eventdatafilter'], - ['Actiondatafilter', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/actiondatafilter'], - ['Repeat', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/repeat'], - ['Retrydef', 'https://serverlessworkflow.org/core/0.6/retries.json#/definitions/retrydef'], - ['Function', 'https://serverlessworkflow.org/core/0.6/functions.json#/definitions/function'], - ['Eventdef', 'https://serverlessworkflow.org/core/0.6/events.json#/definitions/eventdef'], - ['CorrelationDef', 'https://serverlessworkflow.org/core/0.6/events.json#/definitions/correlationDef'], - ['Metadata', 'https://serverlessworkflow.org/core/0.6/common.json#/definitions/metadata'], - ['Events', 'https://serverlessworkflow.org/core/0.6/events.json#/events'], - ['Functions', 'https://serverlessworkflow.org/core/0.6/functions.json#/functions'], + ['Crondef', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/crondef'], + ['Exectimeout', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/exectimeout'], + ['Transition', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/transition'], + ['Error', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/error'], + ['Onevents', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/onevents'], + ['Action', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/action'], + ['Eventref', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/eventref'], + ['Branch', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/branch'], + ['Delaystate', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/delaystate'], + ['Eventstate', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/eventstate'], + ['Operationstate', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/operationstate'], + ['Parallelstate', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/parallelstate'], + ['Switchstate', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/switchstate'], + ['Eventbasedswitch', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/eventbasedswitch'], + ['Databasedswitch', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/databasedswitch'], + ['Defaultdef', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/defaultdef'], + ['Eventcondition', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/eventcondition'], + ['Transitioneventcondition', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/transitioneventcondition'], + ['Enddeventcondition', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/enddeventcondition'], + ['Datacondition', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/datacondition'], + ['Transitiondatacondition', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/transitiondatacondition'], + ['Enddatacondition', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/enddatacondition'], + ['Subflowstate', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/subflowstate'], + ['Injectstate', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/injectstate'], + ['Foreachstate', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/foreachstate'], + ['Callbackstate', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/callbackstate'], + ['Startdef', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/startdef'], + ['Schedule', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/schedule'], + ['End', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/end'], + ['Produceeventdef', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/produceeventdef'], + ['Statedatafilter', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/statedatafilter'], + ['Eventdatafilter', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/eventdatafilter'], + ['Actiondatafilter', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/actiondatafilter'], + ['Repeat', 'https://serverlessworkflow.org/core/0.6/workflow.json#/definitions/repeat'], + ['Metadata', 'https://serverlessworkflow.org/core/0.6/common.json#/definitions/metadata'], + ['Eventdef', 'https://serverlessworkflow.org/core/0.6/events.json#/definitions/eventdef'], + ['CorrelationDef', 'https://serverlessworkflow.org/core/0.6/events.json#/definitions/correlationDef'], + ['Function', 'https://serverlessworkflow.org/core/0.6/functions.json#/definitions/function'], + ['Retrydef', 'https://serverlessworkflow.org/core/0.6/retries.json#/definitions/retrydef'], + ['Events', 'https://serverlessworkflow.org/core/0.6/events.json#/events'], + ['Functions', 'https://serverlessworkflow.org/core/0.6/functions.json#/functions'], ['Retries', 'https://serverlessworkflow.org/core/0.6/retries.json#/retries'], ] \ No newline at end of file diff --git a/src/lib/validators.ts b/src/lib/validators.ts index a0e3cf55..9777c137 100644 --- a/src/lib/validators.ts +++ b/src/lib/validators.ts @@ -1,3 +1,20 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import Ajv, { ValidateFunction } from 'ajv'; import commonSchema from './schema/common.json'; import eventsChema from './schema/events.json'; @@ -6,19 +23,16 @@ import retriesSchema from './schema/retries.json'; import workflowSchema from './schema/workflow.json'; import { validatorsPaths } from './validation/validators-paths'; -const schemas: any[] = [ - commonSchema, - eventsChema, - functionsSchema, - retriesSchema, - workflowSchema -]; +const schemas: any[] = [commonSchema, eventsChema, functionsSchema, retriesSchema, workflowSchema]; const strict: boolean = false; const ajv = new Ajv({ schemas, strict }); +/** + * A Map of validation functions, where the key is the name of the schema to validate with + */ export const validators: Map = new Map( validatorsPaths.map(([dataType, schemaPath]) => { const validate = ajv.getSchema(schemaPath); if (!validate) throw `Unable to find schema '${schemaPath}' for type '${dataType}'`; - return [ dataType, validate as ValidateFunction ]; + return [dataType, validate as ValidateFunction]; }) -); \ No newline at end of file +); diff --git a/src/lib/workflow-converter.ts b/src/lib/workflow-converter.ts index e83c1e51..af7d0efd 100644 --- a/src/lib/workflow-converter.ts +++ b/src/lib/workflow-converter.ts @@ -1,4 +1,21 @@ -import * as yaml from "js-yaml"; +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import * as yaml from 'js-yaml'; import { Specification } from './definitions'; /** @@ -13,8 +30,7 @@ export const WorkflowConverter = { fromString: (data: string): Specification.Workflow => { try { return yaml.load(data) as Specification.Workflow; - } - catch (ex) { + } catch (ex) { throw new Error('Format not supported'); } }, @@ -30,4 +46,4 @@ export const WorkflowConverter = { * @returns {string} The workflow as YAML */ toYaml: (workflow: Specification.Workflow): string => yaml.dump(workflow), -} \ No newline at end of file +}; diff --git a/src/lib/workflow-validator.ts b/src/lib/workflow-validator.ts index ea607535..6efcc00d 100644 --- a/src/lib/workflow-validator.ts +++ b/src/lib/workflow-validator.ts @@ -1,10 +1,27 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import { DefinedError, ValidateFunction } from 'ajv'; import { Specification } from './definitions'; import { validators } from './validators'; export class WorkflowValidator { /** The validation errors after running validate(), if any */ - validationErrors: DefinedError[] | never[] = []; + errors: DefinedError[] | never[] = []; /** The validate function */ private validateFn: ValidateFunction; /** @@ -15,12 +32,12 @@ export class WorkflowValidator { this.validateFn = validators.get('Workflow') as ValidateFunction; } /** - * Validates the workflow, populates the validationErrors if any + * Validates the workflow, populates the errors if any * @returns {boolean} If the workflow is valid or not */ - validate() { + validate(): boolean { const isValid = this.validateFn(this.workflow); - this.validationErrors = this.validateFn.errors as DefinedError[]; + this.errors = this.validateFn.errors as DefinedError[]; return isValid; } -} \ No newline at end of file +} diff --git a/src/serverless-workflow-sdk.ts b/src/serverless-workflow-sdk.ts index 1f32c353..2fecd9da 100644 --- a/src/serverless-workflow-sdk.ts +++ b/src/serverless-workflow-sdk.ts @@ -1,5 +1,22 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + export * from './lib/workflow-converter'; export * from './lib/workflow-validator'; export * from './lib/validators'; export * from './lib/builders'; -export * from './lib/definitions'; \ No newline at end of file +export * from './lib/definitions'; diff --git a/tests/examples/applicantrequest.json b/tests/examples/applicantrequest.json index 7bf32cd8..4b9a43b0 100644 --- a/tests/examples/applicantrequest.json +++ b/tests/examples/applicantrequest.json @@ -1,55 +1,55 @@ -{ - "id": "applicantrequest", - "version": "1.0", - "name": "Applicant Request Decision Workflow", - "description": "Determine if applicant request is valid", - "start": "CheckApplication", - "functions": [ - { - "name": "sendRejectionEmailFunction", - "operation": "http://myapis.org/applicationapi.json#emailRejection", - "type": "rest" - } - ], - "states":[ - { - "name":"CheckApplication", - "type":"switch", - "dataConditions": [ - { - "condition": "${ .applicants | .age >= 18 }", - "transition": "StartApplication" - }, - { - "condition": "${ .applicants | .age < 18 }", - "transition": "RejectApplication" - } - ], - "default": { - "transition": "RejectApplication" - } - }, - { - "name": "StartApplication", - "type": "subflow", - "workflowId": "startApplicationWorkflowId", - "end": true - }, - { - "name":"RejectApplication", - "type":"operation", - "actionMode":"sequential", - "actions":[ - { - "functionRef": { - "refName": "sendRejectionEmailFunction", - "arguments": { - "applicant": "${ .applicant }" - } - } - } - ], - "end": true - } - ] -} +{ + "id": "applicantrequest", + "version": "1.0", + "name": "Applicant Request Decision Workflow", + "description": "Determine if applicant request is valid", + "start": "CheckApplication", + "functions": [ + { + "name": "sendRejectionEmailFunction", + "operation": "http://myapis.org/applicationapi.json#emailRejection", + "type": "rest" + } + ], + "states":[ + { + "name":"CheckApplication", + "type":"switch", + "dataConditions": [ + { + "condition": "${ .applicants | .age >= 18 }", + "transition": "StartApplication" + }, + { + "condition": "${ .applicants | .age < 18 }", + "transition": "RejectApplication" + } + ], + "default": { + "transition": "RejectApplication" + } + }, + { + "name": "StartApplication", + "type": "subflow", + "workflowId": "startApplicationWorkflowId", + "end": true + }, + { + "name":"RejectApplication", + "type":"operation", + "actionMode":"sequential", + "actions":[ + { + "functionRef": { + "refName": "sendRejectionEmailFunction", + "arguments": { + "applicant": "${ .applicant }" + } + } + } + ], + "end": true + } + ] +} diff --git a/tests/examples/applicantrequest.spec.old.ts b/tests/examples/applicantrequest.spec.old.ts index 2e71757e..373e9c0a 100644 --- a/tests/examples/applicantrequest.spec.old.ts +++ b/tests/examples/applicantrequest.spec.old.ts @@ -1,12 +1,12 @@ /* * Copyright 2021-Present The Serverless Workflow Specification Authors - *

+ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *

+ * * http://www.apache.org/licenses/LICENSE-2.0 - *

+ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -14,77 +14,70 @@ * limitations under the License. * */ -import * as fs from "fs"; -import {WorkflowBuilder} from "../../src"; -import {FunctionDefBuilder} from "../../src"; -import {DatabasedSwitchBuilder} from "../../src"; -import {TransitionDataConditionBuilder} from "../../src"; -import {OperationStateBuilder} from "../../src"; -import {SubFlowStateBuilder} from "../../src"; -import {ActionBuilder} from "../../src"; -import {DefaultTransitionBuilder} from "../../src"; -import {FunctionRefBuilder} from "../../src"; +import * as fs from 'fs'; +import { WorkflowBuilder } from '../../src'; +import { FunctionDefBuilder } from '../../src'; +import { DatabasedSwitchBuilder } from '../../src'; +import { TransitionDataConditionBuilder } from '../../src'; +import { OperationStateBuilder } from '../../src'; +import { SubFlowStateBuilder } from '../../src'; +import { ActionBuilder } from '../../src'; +import { DefaultTransitionBuilder } from '../../src'; +import { FunctionRefBuilder } from '../../src'; +describe('applicationrequest workflow example', () => { + it('should generate Workflow object', function () { + const workflow = new WorkflowBuilder() + .withId('applicantrequest') + .withVersion('1.0') + .withName('Applicant Request Decision Workflow') + .withDescription('Determine if applicant request is valid') + .withStart('CheckApplication') + .withFunctions([ + new FunctionDefBuilder() + .withName('sendRejectionEmailFunction') + .withOperation('http://myapis.org/applicationapi.json#emailRejection') + .build(), + ]) + .withStates([ + new DatabasedSwitchBuilder() + .withName('CheckApplication') + .withDataConditions([ + new TransitionDataConditionBuilder() + .withCondition('${ .applicants | .age >= 18 }') + .withTransition('StartApplication') + .build(), + new TransitionDataConditionBuilder() + .withCondition('${ .applicants | .age < 18 }') + .withTransition('RejectApplication') + .build(), + ]) + .withDefault(new DefaultTransitionBuilder().withTransition('RejectApplication').build()) + .build(), + new SubFlowStateBuilder() + .withName('StartApplication') + .withWorkflowId('startApplicationWorkflowId') + .withEnd(true) + .build(), + new OperationStateBuilder() + .withName('RejectApplication') + .withActionMode('sequential') + .withEnd(true) + .withActions([ + new ActionBuilder() + .withFunctionRef( + new FunctionRefBuilder() + .withRefName('sendRejectionEmailFunction') + .withArguments({ applicant: '${ .applicant }' }) + .build() + ) + .build(), + ]) + .build(), + ]) + .build(); -describe("applicationrequest workflow example", () => { - - - it('should generate Workflow object', function () { - - const workflow = new WorkflowBuilder() - .withId("applicantrequest") - .withVersion("1.0") - .withName("Applicant Request Decision Workflow") - .withDescription("Determine if applicant request is valid") - .withStart("CheckApplication") - .withFunctions([new FunctionDefBuilder() - .withName("sendRejectionEmailFunction") - .withOperation("http://myapis.org/applicationapi.json#emailRejection") - .build()]) - .withStates([ - new DatabasedSwitchBuilder() - .withName("CheckApplication") - .withDataConditions( - [new TransitionDataConditionBuilder() - .withCondition("${ .applicants | .age >= 18 }") - .withTransition("StartApplication") - .build(), - new TransitionDataConditionBuilder() - .withCondition("${ .applicants | .age < 18 }") - .withTransition("RejectApplication") - .build()]) - .withDefault(new DefaultTransitionBuilder() - .withTransition( - "RejectApplication", - ).build()) - .build(), - new SubFlowStateBuilder().withName("StartApplication") - .withWorkflowId("startApplicationWorkflowId") - .withEnd(true) - .build(), - new OperationStateBuilder() - .withName("RejectApplication") - .withActionMode("sequential") - .withEnd(true) - .withActions([ - new ActionBuilder().withFunctionRef( - new FunctionRefBuilder() - .withRefName("sendRejectionEmailFunction") - .withArguments({applicant: '${ .applicant }'}) - .build(), - ) - .build(), - ]) - .build(), - ]) - .build(); - - - const expected = JSON.parse(fs.readFileSync("./spec/examples/applicantrequest.json") - .toLocaleString()) as any; - expect(workflow).toEqual(expected); - - }); - - + const expected = JSON.parse(fs.readFileSync('./spec/examples/applicantrequest.json').toLocaleString()) as any; + expect(workflow).toEqual(expected); + }); }); diff --git a/tests/examples/booklending.json b/tests/examples/booklending.json index 32e7a475..7315de00 100644 --- a/tests/examples/booklending.json +++ b/tests/examples/booklending.json @@ -1,131 +1,131 @@ -{ - "id": "booklending", - "name": "Book Lending Workflow", - "version": "1.0", - "start": "Book Lending Request", - "states": [ - { - "name": "Book Lending Request", - "type": "event", - "onEvents": [ - { - "eventRefs": [ - "Book Lending Request Event" - ] - } - ], - "transition": "Get Book Status" - }, - { - "name": "Get Book Status", - "type": "operation", - "actions": [ - { - "functionRef": { - "refName": "Get status for book", - "arguments": { - "bookid": "${ .book.id }" - } - } - } - ], - "transition": "Book Status Decision" - }, - { - "name": "Book Status Decision", - "type": "switch", - "dataConditions": [ - { - "name": "Book is on loan", - "condition": "${ .book.status == \"onloan\" }", - "transition": "Report Status To Lender" - }, - { - "name": "Check is available", - "condition": "${ .book.status == \"available\" }", - "transition": "Check Out Book" - } - ] - }, - { - "name": "Report Status To Lender", - "type": "operation", - "actions": [ - { - "functionRef": { - "refName": "Send status to lender", - "arguments": { - "bookid": "${ .book.id }", - "message": "Book ${ .book.title } is already on loan" - } - } - } - ], - "transition": "Wait for Lender response" - }, - { - "name": "Wait for Lender response", - "type": "switch", - "eventConditions": [ - { - "name": "Hold Book", - "eventRef": "Hold Book Event", - "transition": "Request Hold" - }, - { - "name": "Decline Book Hold", - "eventRef": "Decline Hold Event", - "transition": "Cancel Request" - } - ] - }, - { - "name": "Request Hold", - "type": "operation", - "actions": [ - { - "functionRef": { - "refName": "Request hold for lender", - "arguments": { - "bookid": "${ .book.id }", - "lender": "${ .lender }" - } - } - } - ], - "transition": "Wait two weeks" - }, - { - "name": "Wait two weeks", - "type": "delay", - "timeDelay": "PT2W", - "transition": "Get Book Status" - }, - { - "name": "Check Out Book", - "type": "operation", - "actions": [ - { - "functionRef": { - "refName": "Check out book with id", - "arguments": { - "bookid": "${ .book.id }" - } - } - }, - { - "functionRef": { - "refName": "Notify Lender for checkout", - "arguments": { - "bookid": "${ .book.id }", - "lender": "${ .lender }" - } - } - } - ], - "end": true - } - ], - "functions": "file://books/lending/functions.json", - "events": "file://books/lending/events.json" -} +{ + "id": "booklending", + "name": "Book Lending Workflow", + "version": "1.0", + "start": "Book Lending Request", + "states": [ + { + "name": "Book Lending Request", + "type": "event", + "onEvents": [ + { + "eventRefs": [ + "Book Lending Request Event" + ] + } + ], + "transition": "Get Book Status" + }, + { + "name": "Get Book Status", + "type": "operation", + "actions": [ + { + "functionRef": { + "refName": "Get status for book", + "arguments": { + "bookid": "${ .book.id }" + } + } + } + ], + "transition": "Book Status Decision" + }, + { + "name": "Book Status Decision", + "type": "switch", + "dataConditions": [ + { + "name": "Book is on loan", + "condition": "${ .book.status == \"onloan\" }", + "transition": "Report Status To Lender" + }, + { + "name": "Check is available", + "condition": "${ .book.status == \"available\" }", + "transition": "Check Out Book" + } + ] + }, + { + "name": "Report Status To Lender", + "type": "operation", + "actions": [ + { + "functionRef": { + "refName": "Send status to lender", + "arguments": { + "bookid": "${ .book.id }", + "message": "Book ${ .book.title } is already on loan" + } + } + } + ], + "transition": "Wait for Lender response" + }, + { + "name": "Wait for Lender response", + "type": "switch", + "eventConditions": [ + { + "name": "Hold Book", + "eventRef": "Hold Book Event", + "transition": "Request Hold" + }, + { + "name": "Decline Book Hold", + "eventRef": "Decline Hold Event", + "transition": "Cancel Request" + } + ] + }, + { + "name": "Request Hold", + "type": "operation", + "actions": [ + { + "functionRef": { + "refName": "Request hold for lender", + "arguments": { + "bookid": "${ .book.id }", + "lender": "${ .lender }" + } + } + } + ], + "transition": "Wait two weeks" + }, + { + "name": "Wait two weeks", + "type": "delay", + "timeDelay": "PT2W", + "transition": "Get Book Status" + }, + { + "name": "Check Out Book", + "type": "operation", + "actions": [ + { + "functionRef": { + "refName": "Check out book with id", + "arguments": { + "bookid": "${ .book.id }" + } + } + }, + { + "functionRef": { + "refName": "Notify Lender for checkout", + "arguments": { + "bookid": "${ .book.id }", + "lender": "${ .lender }" + } + } + } + ], + "end": true + } + ], + "functions": "file://books/lending/functions.json", + "events": "file://books/lending/events.json" +} diff --git a/tests/examples/booklending.spec.old.ts b/tests/examples/booklending.spec.old.ts index 5cf1f53b..ee2f5f2b 100644 --- a/tests/examples/booklending.spec.old.ts +++ b/tests/examples/booklending.spec.old.ts @@ -1,12 +1,12 @@ /* * Copyright 2021-Present The Serverless Workflow Specification Authors - *

+ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *

+ * * http://www.apache.org/licenses/LICENSE-2.0 - *

+ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -16,164 +16,153 @@ */ import * as fs from 'fs'; import { - ActionBuilder, - DatabasedSwitchBuilder, - EventsBuilder, - OperationStateBuilder, - TransitionDataConditionBuilder, - WorkflowBuilder, + ActionBuilder, + DatabasedSwitchBuilder, + EventsBuilder, + OperationStateBuilder, + TransitionDataConditionBuilder, + WorkflowBuilder, } from '../../src'; -import {StartBuilder} from "../../src"; -import {EventStateBuilder} from "../../src"; -import {OnEventBuilder} from "../../src"; -import {FunctionRefBuilder} from "../../src"; -import {FunctionsBuilder} from "../../src"; -import {EventBasedSwitchBuilder} from "../../src"; -import {TransitionEventConditionBuilder} from "../../src"; -import {DelayStateBuilder} from "../../src"; +import { StartBuilder } from '../../src'; +import { EventStateBuilder } from '../../src'; +import { OnEventBuilder } from '../../src'; +import { FunctionRefBuilder } from '../../src'; +import { FunctionsBuilder } from '../../src'; +import { EventBasedSwitchBuilder } from '../../src'; +import { TransitionEventConditionBuilder } from '../../src'; +import { DelayStateBuilder } from '../../src'; +describe('booklending workflow example', () => { + it('should generate Workflow object', function () { + const workflow = new WorkflowBuilder() + .withId('booklending') + .withName('Book Lending Workflow') + .withVersion('1.0') + .withStart(new StartBuilder().withName('Book Lending Request').build()) + .withStates([ + new EventStateBuilder() + .withName('Book Lending Request') + .withOnEvents([new OnEventBuilder().withEventsRef(['Book Lending Request Event']).build()]) + .withTransition('Get Book Status') + .build(), + new OperationStateBuilder() + .withName('Get Book Status') + .withActions([ + new ActionBuilder() + .withFunctionRef( + new FunctionRefBuilder() + .withRefName('Get status for book') + .withArguments({ + bookid: '${ .book.id }', + }) + .build() + ) + .build(), + ]) + .withTransition('Book Status Decision') + .build(), + new DatabasedSwitchBuilder() + .withName('Book Status Decision') + .withDataConditions([ + new TransitionDataConditionBuilder() + .withName('Book is on loan') + .withCondition('${ .book.status == "onloan" }') + .withTransition('Report Status To Lender') + .build(), + new TransitionDataConditionBuilder() + .withName('Check is available') + .withCondition('${ .book.status == "available" }') + .withTransition('Check Out Book') + .build(), + ]) + .build(), + new OperationStateBuilder() + .withName('Report Status To Lender') + .withActions([ + new ActionBuilder() + .withFunctionRef( + new FunctionRefBuilder() + .withRefName('Send status to lender') + .withArguments({ + bookid: '${ .book.id }', + message: 'Book ${ .book.title } is already on loan', + }) + .build() + ) + .build(), + ]) + .withTransition('Wait for Lender response') + .build(), + new EventBasedSwitchBuilder() + .withName('Wait for Lender response') + .withEventConditions([ + new TransitionEventConditionBuilder() + .withName('Hold Book') + .withEventRef('Hold Book Event') + .withTransition('Request Hold') + .build(), + new TransitionEventConditionBuilder() + .withName('Decline Book Hold') + .withEventRef('Decline Hold Event') + .withTransition('Cancel Request') + .build(), + ]) + .build(), + new OperationStateBuilder() + .withName('Request Hold') + .withActions([ + new ActionBuilder() + .withFunctionRef( + new FunctionRefBuilder() + .withRefName('Request hold for lender') + .withArguments({ + bookid: '${ .book.id }', + lender: '${ .lender }', + }) + .build() + ) + .build(), + ]) + .withTransition('Wait two weeks') + .build(), + new DelayStateBuilder() + .withName('Wait two weeks') + .withTimeDelay('PT2W') + .withTransition('Get Book Status') + .build(), + new OperationStateBuilder() + .withName('Check Out Book') + .withActions([ + new ActionBuilder() + .withFunctionRef( + new FunctionRefBuilder() + .withRefName('Check out book with id') + .withArguments({ + bookid: '${ .book.id }', + }) + .build() + ) + .build(), + new ActionBuilder() + .withFunctionRef( + new FunctionRefBuilder() + .withRefName('Notify Lender for checkout') + .withArguments({ + bookid: '${ .book.id }', + lender: '${ .lender }', + }) + .build() + ) + .build(), + ]) + .withEnd(true) + .build(), + ]) + .withFunctions(new FunctionsBuilder().withURIDefinition('file://books/lending/functions.json').build()) + .withEvents(new EventsBuilder().withURIDefinition('file://books/lending/events.json').build()) + .build(); -describe("booklending workflow example", () => { - - - it('should generate Workflow object', function () { - - const workflow = new WorkflowBuilder() - .withId("booklending") - .withName("Book Lending Workflow") - .withVersion("1.0") - .withStart(new StartBuilder() - .withName("Book Lending Request") - .build()) - .withStates([ - new EventStateBuilder() - .withName("Book Lending Request") - .withOnEvents([ - new OnEventBuilder() - .withEventsRef(["Book Lending Request Event"]) - .build(), - ]) - .withTransition("Get Book Status") - .build(), - new OperationStateBuilder() - .withName("Get Book Status") - .withActions([ - new ActionBuilder().withFunctionRef( - new FunctionRefBuilder() - .withRefName("Get status for book") - .withArguments({ - "bookid": "${ .book.id }", - }) - .build(), - ).build(), - ]) - .withTransition("Book Status Decision") - .build(), - new DatabasedSwitchBuilder() - .withName("Book Status Decision") - .withDataConditions([ - new TransitionDataConditionBuilder() - .withName("Book is on loan") - .withCondition("${ .book.status == \"onloan\" }") - .withTransition("Report Status To Lender") - .build(), - new TransitionDataConditionBuilder() - .withName("Check is available") - .withCondition("${ .book.status == \"available\" }") - .withTransition("Check Out Book") - .build(), - ]) - .build(), - new OperationStateBuilder() - .withName("Report Status To Lender") - .withActions([ - new ActionBuilder() - .withFunctionRef(new FunctionRefBuilder() - .withRefName("Send status to lender") - .withArguments({ - "bookid": "${ .book.id }", - "message": "Book ${ .book.title } is already on loan", - }) - .build()) - .build(), - ]) - .withTransition("Wait for Lender response") - .build(), - new EventBasedSwitchBuilder() - .withName("Wait for Lender response") - .withEventConditions([ - new TransitionEventConditionBuilder() - .withName("Hold Book") - .withEventRef("Hold Book Event") - .withTransition("Request Hold") - .build(), - new TransitionEventConditionBuilder() - .withName("Decline Book Hold") - .withEventRef("Decline Hold Event") - .withTransition("Cancel Request") - .build(), - ]) - .build(), - new OperationStateBuilder() - .withName("Request Hold") - .withActions([ - new ActionBuilder().withFunctionRef( - new FunctionRefBuilder() - .withRefName("Request hold for lender") - .withArguments({ - "bookid": "${ .book.id }", - "lender": "${ .lender }", - }).build()).build(), - ]) - .withTransition("Wait two weeks") - .build(), - new DelayStateBuilder() - .withName("Wait two weeks") - .withTimeDelay("PT2W") - .withTransition("Get Book Status") - .build(), - new OperationStateBuilder() - .withName("Check Out Book") - .withActions([ - new ActionBuilder() - .withFunctionRef( - new FunctionRefBuilder() - .withRefName("Check out book with id") - .withArguments({ - "bookid": "${ .book.id }", - }) - .build()) - .build(), - new ActionBuilder() - .withFunctionRef( - new FunctionRefBuilder() - .withRefName("Notify Lender for checkout") - .withArguments({ - "bookid": "${ .book.id }", - "lender": "${ .lender }", - }) - .build()) - .build(), - - ]) - .withEnd(true) - .build(), - - ]) - .withFunctions(new FunctionsBuilder() - .withURIDefinition("file://books/lending/functions.json") - .build()) - .withEvents(new EventsBuilder() - .withURIDefinition("file://books/lending/events.json") - .build()) - .build(); - - - const expected = JSON.parse(fs.readFileSync("./spec/examples/booklending.json") - .toLocaleString()) as any; - expect(workflow).toEqual(expected); - - }); - - + const expected = JSON.parse(fs.readFileSync('./spec/examples/booklending.json').toLocaleString()) as any; + expect(workflow).toEqual(expected); + }); }); diff --git a/tests/examples/carauctionbids.json b/tests/examples/carauctionbids.json index e0814d45..fe4baa75 100644 --- a/tests/examples/carauctionbids.json +++ b/tests/examples/carauctionbids.json @@ -1,50 +1,50 @@ -{ - "id": "handleCarAuctionBid", - "version": "1.0", - "name": "Car Auction Bidding Workflow", - "description": "Store a single bid whole the car auction is active", - "start": { - "stateName": "StoreCarAuctionBid", - "schedule": "2020-03-20T09:00:00Z/2020-03-20T15:00:00Z" - }, - "functions": [ - { - "name": "StoreBidFunction", - "operation": "http://myapis.org/carauctionapi.json#storeBid", - "type": "rest" - } - ], - "events": [ - { - "name": "CarBidEvent", - "type": "carBidMadeType", - "source": "carBidEventSource", - "kind": "consumed" - } - ], - "states": [ - { - "name": "StoreCarAuctionBid", - "type": "event", - "exclusive": true, - "onEvents": [ - { - "eventRefs": [ - "CarBidEvent" - ], - "actions": [ - { - "functionRef": { - "refName": "StoreBidFunction", - "arguments": { - "bid": "${ .bid }" - } - } - } - ] - } - ], - "end": true - } - ] -} +{ + "id": "handleCarAuctionBid", + "version": "1.0", + "name": "Car Auction Bidding Workflow", + "description": "Store a single bid whole the car auction is active", + "start": { + "stateName": "StoreCarAuctionBid", + "schedule": "2020-03-20T09:00:00Z/2020-03-20T15:00:00Z" + }, + "functions": [ + { + "name": "StoreBidFunction", + "operation": "http://myapis.org/carauctionapi.json#storeBid", + "type": "rest" + } + ], + "events": [ + { + "name": "CarBidEvent", + "type": "carBidMadeType", + "source": "carBidEventSource", + "kind": "consumed" + } + ], + "states": [ + { + "name": "StoreCarAuctionBid", + "type": "event", + "exclusive": true, + "onEvents": [ + { + "eventRefs": [ + "CarBidEvent" + ], + "actions": [ + { + "functionRef": { + "refName": "StoreBidFunction", + "arguments": { + "bid": "${ .bid }" + } + } + } + ] + } + ], + "end": true + } + ] +} diff --git a/tests/examples/carauctionbids.spec.old.ts b/tests/examples/carauctionbids.spec.old.ts index e0d82730..97dccc5d 100644 --- a/tests/examples/carauctionbids.spec.old.ts +++ b/tests/examples/carauctionbids.spec.old.ts @@ -1,12 +1,12 @@ /* * Copyright 2021-Present The Serverless Workflow Specification Authors - *

+ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *

+ * * http://www.apache.org/licenses/LICENSE-2.0 - *

+ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -14,67 +14,72 @@ * limitations under the License. * */ -import {ActionBuilder, FunctionDefBuilder, WorkflowBuilder} from '../../src'; +import { ActionBuilder, FunctionDefBuilder, WorkflowBuilder } from '../../src'; import * as fs from 'fs'; -import {StartBuilder} from "../../src"; -import {EventsBuilder} from "../../src"; -import {EventBuilder} from "../../src"; -import {EventStateBuilder} from "../../src"; -import {OnEventBuilder} from "../../src"; -import {FunctionRefBuilder} from "../../src"; +import { StartBuilder } from '../../src'; +import { EventsBuilder } from '../../src'; +import { EventBuilder } from '../../src'; +import { EventStateBuilder } from '../../src'; +import { OnEventBuilder } from '../../src'; +import { FunctionRefBuilder } from '../../src'; + +describe('carauctionbids workflow example', () => { + it('should generate Workflow object', function () { + const workflow = new WorkflowBuilder() + .withId('handleCarAuctionBid') + .withVersion('1.0') + .withName('Car Auction Bidding Workflow') + .withDescription('Store a single bid whole the car auction is active') + .withStart( + new StartBuilder() + .withName('StoreCarAuctionBid') + .withSchedule('2020-03-20T09:00:00Z/2020-03-20T15:00:00Z') + .build() + ) + .withFunctions([ + new FunctionDefBuilder() + .withName('StoreBidFunction') + .withOperation('http://myapis.org/carauctionapi.json#storeBid') + .build(), + ]) + .withEvents( + new EventsBuilder() + .withEvents([ + new EventBuilder() + .withName('CarBidEvent') + .withType('carBidMadeType') + .withSource('carBidEventSource') + .build(), + ]) + .build() + ) + .withStates([ + new EventStateBuilder() + .withName('StoreCarAuctionBid') + .withExclusive(true) + .withOnEvents([ + new OnEventBuilder() + .withEventsRef(['CarBidEvent']) + .withActions([ + new ActionBuilder() + .withFunctionRef( + new FunctionRefBuilder() + .withRefName('StoreBidFunction') + .withArguments({ + bid: '${ .bid }', + }) + .build() + ) + .build(), + ]) + .build(), + ]) + .withEnd(true) + .build(), + ]) + .build(); -describe("carauctionbids workflow example", () => { - - - it('should generate Workflow object', function () { - - const workflow = new WorkflowBuilder() - .withId("handleCarAuctionBid") - .withVersion("1.0") - .withName("Car Auction Bidding Workflow") - .withDescription("Store a single bid whole the car auction is active") - .withStart(new StartBuilder() - .withName("StoreCarAuctionBid") - .withSchedule("2020-03-20T09:00:00Z/2020-03-20T15:00:00Z").build()) - .withFunctions([new FunctionDefBuilder() - .withName("StoreBidFunction") - .withOperation("http://myapis.org/carauctionapi.json#storeBid") - .build()]) - .withEvents(new EventsBuilder().withEvents( - [new EventBuilder() - .withName("CarBidEvent") - .withType("carBidMadeType") - .withSource("carBidEventSource") - .build()], - ).build()) - .withStates([ - new EventStateBuilder() - .withName("StoreCarAuctionBid") - .withExclusive(true) - .withOnEvents([ - new OnEventBuilder() - .withEventsRef(["CarBidEvent"]) - .withActions([ - new ActionBuilder().withFunctionRef( - new FunctionRefBuilder() - .withRefName("StoreBidFunction") - .withArguments({ - "bid": "${ .bid }", - }) - .build()).build(), - ]).build(), - ]) - .withEnd(true) - .build(), - ]) - .build(); - - - const expected = JSON.parse(fs.readFileSync("./spec/examples/carauctionbids.json") - .toLocaleString()) as any; - expect(workflow).toEqual(expected); - - }); - - + const expected = JSON.parse(fs.readFileSync('./spec/examples/carauctionbids.json').toLocaleString()) as any; + expect(workflow).toEqual(expected); + }); }); diff --git a/tests/examples/checkcarvitals.json b/tests/examples/checkcarvitals.json index 96ab4078..68aec8f3 100644 --- a/tests/examples/checkcarvitals.json +++ b/tests/examples/checkcarvitals.json @@ -1,45 +1,45 @@ -{ - "id": "checkcarvitals", - "name": "Check Car Vitals Workflow", - "version": "1.0", - "start": "WhenCarIsOn", - "states": [ - { - "name": "WhenCarIsOn", - "type": "event", - "onEvents": [ - { - "eventRefs": [ - "CarTurnedOnEvent" - ] - } - ], - "transition": "DoCarVitalsChecks" - }, - { - "name": "DoCarVitalsChecks", - "type": "subflow", - "workflowId": "vitalscheck", - "repeat": { - "stopOnEvents": [ - "CarTurnedOffEvent" - ] - }, - "end": true - } - ], - "events": [ - { - "name": "CarTurnedOnEvent", - "type": "car.events", - "source": "my/car/start", - "kind": "consumed" - }, - { - "name": "CarTurnedOffEvent", - "type": "car.events", - "source": "my/car/start", - "kind": "consumed" - } - ] -} +{ + "id": "checkcarvitals", + "name": "Check Car Vitals Workflow", + "version": "1.0", + "start": "WhenCarIsOn", + "states": [ + { + "name": "WhenCarIsOn", + "type": "event", + "onEvents": [ + { + "eventRefs": [ + "CarTurnedOnEvent" + ] + } + ], + "transition": "DoCarVitalsChecks" + }, + { + "name": "DoCarVitalsChecks", + "type": "subflow", + "workflowId": "vitalscheck", + "repeat": { + "stopOnEvents": [ + "CarTurnedOffEvent" + ] + }, + "end": true + } + ], + "events": [ + { + "name": "CarTurnedOnEvent", + "type": "car.events", + "source": "my/car/start", + "kind": "consumed" + }, + { + "name": "CarTurnedOffEvent", + "type": "car.events", + "source": "my/car/start", + "kind": "consumed" + } + ] +} diff --git a/tests/examples/checkcarvitals.spec.old.ts b/tests/examples/checkcarvitals.spec.old.ts index da71d2c0..53425b94 100644 --- a/tests/examples/checkcarvitals.spec.old.ts +++ b/tests/examples/checkcarvitals.spec.old.ts @@ -1,12 +1,12 @@ /* * Copyright 2021-Present The Serverless Workflow Specification Authors - *

+ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *

+ * * http://www.apache.org/licenses/LICENSE-2.0 - *

+ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -15,70 +15,47 @@ * */ import { - EventBuilder, - EventsBuilder, - EventStateBuilder, - OnEventBuilder, - RepeatBuilder, - SubFlowStateBuilder, - WorkflowBuilder, -} from "../../src"; -import * as fs from "fs"; + EventBuilder, + EventsBuilder, + EventStateBuilder, + OnEventBuilder, + RepeatBuilder, + SubFlowStateBuilder, + WorkflowBuilder, +} from '../../src'; +import * as fs from 'fs'; +describe('checkcarvitals workflow example', () => { + it('should generate Workflow object', function () { + const workflow = new WorkflowBuilder() + .withId('checkcarvitals') + .withVersion('1.0') + .withName('Check Car Vitals Workflow') + .withStart('WhenCarIsOn') + .withStates([ + new EventStateBuilder() + .withName('WhenCarIsOn') + .withOnEvents([new OnEventBuilder().withEventsRef(['CarTurnedOnEvent']).build()]) + .withTransition('DoCarVitalsChecks') + .build(), + new SubFlowStateBuilder() + .withName('DoCarVitalsChecks') + .withWorkflowId('vitalscheck') + .withRepeat(new RepeatBuilder().withStopOnEvents(['CarTurnedOffEvent']).build()) + .withEnd(true) + .build(), + ]) + .withEvents( + new EventsBuilder() + .withEvents([ + new EventBuilder().withName('CarTurnedOnEvent').withType('car.events').withSource('my/car/start').build(), + new EventBuilder().withName('CarTurnedOffEvent').withType('car.events').withSource('my/car/start').build(), + ]) + .build() + ) + .build(); -describe("checkcarvitals workflow example", () => { - - - it('should generate Workflow object', function () { - - const workflow = new WorkflowBuilder() - .withId("checkcarvitals") - .withVersion("1.0") - .withName("Check Car Vitals Workflow") - .withStart("WhenCarIsOn") - .withStates([ - new EventStateBuilder() - .withName("WhenCarIsOn") - .withOnEvents([ - new OnEventBuilder() - .withEventsRef(["CarTurnedOnEvent"]) - .build(), - ]) - .withTransition("DoCarVitalsChecks") - .build(), - new SubFlowStateBuilder() - .withName("DoCarVitalsChecks") - .withWorkflowId("vitalscheck") - .withRepeat(new RepeatBuilder() - .withStopOnEvents(["CarTurnedOffEvent"]) - .build()) - .withEnd(true) - .build(), - ]) - .withEvents( - new EventsBuilder() - .withEvents([ - new EventBuilder() - .withName("CarTurnedOnEvent") - .withType("car.events") - .withSource("my/car/start") - .build(), - new EventBuilder() - .withName("CarTurnedOffEvent") - .withType("car.events") - .withSource("my/car/start") - .build(), - - ]).build(), - ) - .build(); - - - const expected = JSON.parse(fs.readFileSync("./spec/examples/checkcarvitals.json") - .toLocaleString()) as any; - expect(workflow).toEqual(expected); - - }); - - + const expected = JSON.parse(fs.readFileSync('./spec/examples/checkcarvitals.json').toLocaleString()) as any; + expect(workflow).toEqual(expected); + }); }); diff --git a/tests/examples/jobmonitoring.json b/tests/examples/jobmonitoring.json index a313280e..cf88a3c2 100644 --- a/tests/examples/jobmonitoring.json +++ b/tests/examples/jobmonitoring.json @@ -1,142 +1,142 @@ -{ - "id": "jobmonitoring", - "version": "1.0", - "name": "Job Monitoring", - "description": "Monitor finished execution of a submitted job", - "start": "SubmitJob", - "functions": [ - { - "name": "submitJob", - "operation": "http://myapis.org/monitorapi.json#doSubmit", - "type": "rest" - }, - { - "name": "checkJobStatus", - "operation": "http://myapis.org/monitorapi.json#checkStatus", - "type": "rest" - }, - { - "name": "reportJobSuceeded", - "operation": "http://myapis.org/monitorapi.json#reportSucceeded", - "type": "rest" - }, - { - "name": "reportJobFailed", - "operation": "http://myapis.org/monitorapi.json#reportFailure", - "type": "rest" - } - ], - "states": [ - { - "name": "SubmitJob", - "type": "operation", - "actionMode": "sequential", - "actions": [ - { - "functionRef": { - "refName": "submitJob", - "arguments": { - "name": "${ .job.name }" - } - }, - "actionDataFilter": { - "results": "${ .jobuid }" - } - } - ], - "onErrors": [ - { - "error": "*", - "transition": "SubmitError" - } - ], - "stateDataFilter": { - "output": "${ .jobuid }" - }, - "transition": "WaitForCompletion" - }, - { - "name": "SubmitError", - "type": "subflow", - "workflowId": "handleJobSubmissionErrorWorkflow", - "end": true - }, - { - "name": "WaitForCompletion", - "type": "delay", - "timeDelay": "PT5S", - "transition": "GetJobStatus" - }, - { - "name": "GetJobStatus", - "type": "operation", - "actionMode": "sequential", - "actions": [ - { - "functionRef": { - "refName": "checkJobStatus", - "arguments": { - "name": "${ .jobuid }" - } - }, - "actionDataFilter": { - "results": "${ .jobstatus }" - } - } - ], - "stateDataFilter": { - "output": "${ .jobstatus }" - }, - "transition": "DetermineCompletion" - }, - { - "name": "DetermineCompletion", - "type": "switch", - "dataConditions": [ - { - "condition": "${ .jobStatus == \"SUCCEEDED\" }", - "transition": "JobSucceeded" - }, - { - "condition": "${ .jobStatus == \"FAILED\" }", - "transition": "JobFailed" - } - ], - "default": { - "transition": "WaitForCompletion" - } - }, - { - "name": "JobSucceeded", - "type": "operation", - "actionMode": "sequential", - "actions": [ - { - "functionRef": { - "refName": "reportJobSuceeded", - "arguments": { - "name": "${ .jobuid }" - } - } - } - ], - "end": true - }, - { - "name": "JobFailed", - "type": "operation", - "actionMode": "sequential", - "actions": [ - { - "functionRef": { - "refName": "reportJobFailed", - "arguments": { - "name": "${ .jobuid }" - } - } - } - ], - "end": true - } - ] -} +{ + "id": "jobmonitoring", + "version": "1.0", + "name": "Job Monitoring", + "description": "Monitor finished execution of a submitted job", + "start": "SubmitJob", + "functions": [ + { + "name": "submitJob", + "operation": "http://myapis.org/monitorapi.json#doSubmit", + "type": "rest" + }, + { + "name": "checkJobStatus", + "operation": "http://myapis.org/monitorapi.json#checkStatus", + "type": "rest" + }, + { + "name": "reportJobSuceeded", + "operation": "http://myapis.org/monitorapi.json#reportSucceeded", + "type": "rest" + }, + { + "name": "reportJobFailed", + "operation": "http://myapis.org/monitorapi.json#reportFailure", + "type": "rest" + } + ], + "states": [ + { + "name": "SubmitJob", + "type": "operation", + "actionMode": "sequential", + "actions": [ + { + "functionRef": { + "refName": "submitJob", + "arguments": { + "name": "${ .job.name }" + } + }, + "actionDataFilter": { + "results": "${ .jobuid }" + } + } + ], + "onErrors": [ + { + "error": "*", + "transition": "SubmitError" + } + ], + "stateDataFilter": { + "output": "${ .jobuid }" + }, + "transition": "WaitForCompletion" + }, + { + "name": "SubmitError", + "type": "subflow", + "workflowId": "handleJobSubmissionErrorWorkflow", + "end": true + }, + { + "name": "WaitForCompletion", + "type": "delay", + "timeDelay": "PT5S", + "transition": "GetJobStatus" + }, + { + "name": "GetJobStatus", + "type": "operation", + "actionMode": "sequential", + "actions": [ + { + "functionRef": { + "refName": "checkJobStatus", + "arguments": { + "name": "${ .jobuid }" + } + }, + "actionDataFilter": { + "results": "${ .jobstatus }" + } + } + ], + "stateDataFilter": { + "output": "${ .jobstatus }" + }, + "transition": "DetermineCompletion" + }, + { + "name": "DetermineCompletion", + "type": "switch", + "dataConditions": [ + { + "condition": "${ .jobStatus == \"SUCCEEDED\" }", + "transition": "JobSucceeded" + }, + { + "condition": "${ .jobStatus == \"FAILED\" }", + "transition": "JobFailed" + } + ], + "default": { + "transition": "WaitForCompletion" + } + }, + { + "name": "JobSucceeded", + "type": "operation", + "actionMode": "sequential", + "actions": [ + { + "functionRef": { + "refName": "reportJobSuceeded", + "arguments": { + "name": "${ .jobuid }" + } + } + } + ], + "end": true + }, + { + "name": "JobFailed", + "type": "operation", + "actionMode": "sequential", + "actions": [ + { + "functionRef": { + "refName": "reportJobFailed", + "arguments": { + "name": "${ .jobuid }" + } + } + } + ], + "end": true + } + ] +} diff --git a/tests/examples/jobmonitoring.spec.old.ts b/tests/examples/jobmonitoring.spec.old.ts index b1cf3569..2e326495 100644 --- a/tests/examples/jobmonitoring.spec.old.ts +++ b/tests/examples/jobmonitoring.spec.old.ts @@ -1,12 +1,12 @@ /* * Copyright 2021-Present The Serverless Workflow Specification Authors - *

+ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *

+ * * http://www.apache.org/licenses/LICENSE-2.0 - *

+ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -15,183 +15,150 @@ * */ import { - ActionBuilder, - ActionDataFilterBuilder, - DatabasedSwitchBuilder, - DefaultTransitionBuilder, - DelayStateBuilder, - FunctionDefBuilder, - FunctionRefBuilder, - OnErrorBuilder, - OperationStateBuilder, - StateDataFilterBuilder, - SubFlowStateBuilder, - TransitionDataConditionBuilder, - WorkflowBuilder, -} from "../../src"; -import * as fs from "fs"; + ActionBuilder, + ActionDataFilterBuilder, + DatabasedSwitchBuilder, + DefaultTransitionBuilder, + DelayStateBuilder, + FunctionDefBuilder, + FunctionRefBuilder, + OnErrorBuilder, + OperationStateBuilder, + StateDataFilterBuilder, + SubFlowStateBuilder, + TransitionDataConditionBuilder, + WorkflowBuilder, +} from '../../src'; +import * as fs from 'fs'; +describe('jobmonitoring workflow example', () => { + it('should generate Workflow object', function () { + const workflow = new WorkflowBuilder() + .withId('jobmonitoring') + .withVersion('1.0') + .withName('Job Monitoring') + .withDescription('Monitor finished execution of a submitted job') + .withStart('SubmitJob') + .withFunctions([ + new FunctionDefBuilder() + .withName('submitJob') + .withOperation('http://myapis.org/monitorapi.json#doSubmit') + .build(), + new FunctionDefBuilder() + .withName('checkJobStatus') + .withOperation('http://myapis.org/monitorapi.json#checkStatus') + .build(), + new FunctionDefBuilder() + .withName('reportJobSuceeded') + .withOperation('http://myapis.org/monitorapi.json#reportSucceeded') + .build(), + new FunctionDefBuilder() + .withName('reportJobFailed') + .withOperation('http://myapis.org/monitorapi.json#reportFailure') + .build(), + ]) + .withStates([ + new OperationStateBuilder() + .withName('SubmitJob') + .withActionMode('sequential') + .withActions([ + new ActionBuilder() + .withFunctionRef( + new FunctionRefBuilder() + .withRefName('submitJob') + .withArguments({ + name: '${ .job.name }', + }) + .build() + ) + .withActionDataFilter(new ActionDataFilterBuilder().withResults('${ .jobuid }').build()) + .build(), + ]) + .withOnErrors([new OnErrorBuilder().withError('*').withTransition('SubmitError').build()]) + .withStateDataFilter(new StateDataFilterBuilder().withOutput('${ .jobuid }').build()) + .withTransition('WaitForCompletion') + .build(), + new SubFlowStateBuilder() + .withName('SubmitError') + .withWorkflowId('handleJobSubmissionErrorWorkflow') + .withEnd(true) + .build(), + new DelayStateBuilder() + .withName('WaitForCompletion') + .withTimeDelay('PT5S') + .withTransition('GetJobStatus') + .build(), + new OperationStateBuilder() + .withName('GetJobStatus') + .withActionMode('sequential') + .withActions([ + new ActionBuilder() + .withFunctionRef( + new FunctionRefBuilder() + .withRefName('checkJobStatus') + .withArguments({ + name: '${ .jobuid }', + }) + .build() + ) + .withActionDataFilter(new ActionDataFilterBuilder().withResults('${ .jobstatus }').build()) + .build(), + ]) + .withStateDataFilter(new StateDataFilterBuilder().withOutput('${ .jobstatus }').build()) + .withTransition('DetermineCompletion') + .build(), + new DatabasedSwitchBuilder() + .withName('DetermineCompletion') + .withDataConditions([ + new TransitionDataConditionBuilder() + .withCondition('${ .jobStatus == "SUCCEEDED" }') + .withTransition('JobSucceeded') + .build(), + new TransitionDataConditionBuilder() + .withCondition('${ .jobStatus == "FAILED" }') + .withTransition('JobFailed') + .build(), + ]) + .withDefault(new DefaultTransitionBuilder().withTransition('WaitForCompletion').build()) + .build(), + new OperationStateBuilder() + .withName('JobSucceeded') + .withActionMode('sequential') + .withActions([ + new ActionBuilder() + .withFunctionRef( + new FunctionRefBuilder() + .withRefName('reportJobSuceeded') + .withArguments({ + name: '${ .jobuid }', + }) + .build() + ) + .build(), + ]) + .withEnd(true) + .build(), + new OperationStateBuilder() + .withName('JobFailed') + .withActionMode('sequential') + .withActions([ + new ActionBuilder() + .withFunctionRef( + new FunctionRefBuilder() + .withRefName('reportJobFailed') + .withArguments({ + name: '${ .jobuid }', + }) + .build() + ) + .build(), + ]) + .withEnd(true) + .build(), + ]) + .build(); -describe("jobmonitoring workflow example", () => { - - - it('should generate Workflow object', function () { - - const workflow = new WorkflowBuilder() - .withId("jobmonitoring") - .withVersion("1.0") - .withName("Job Monitoring") - .withDescription("Monitor finished execution of a submitted job") - .withStart("SubmitJob") - .withFunctions([ - new FunctionDefBuilder() - .withName("submitJob") - .withOperation("http://myapis.org/monitorapi.json#doSubmit") - .build(), - new FunctionDefBuilder() - .withName("checkJobStatus") - .withOperation("http://myapis.org/monitorapi.json#checkStatus") - .build(), - new FunctionDefBuilder() - .withName("reportJobSuceeded") - .withOperation("http://myapis.org/monitorapi.json#reportSucceeded") - .build(), - new FunctionDefBuilder() - .withName("reportJobFailed") - .withOperation("http://myapis.org/monitorapi.json#reportFailure") - .build(), - ]) - .withStates([ - new OperationStateBuilder() - .withName("SubmitJob") - .withActionMode('sequential') - .withActions([ - new ActionBuilder() - .withFunctionRef( - new FunctionRefBuilder() - .withRefName("submitJob") - .withArguments({ - "name": "${ .job.name }", - }) - .build(), - ) - .withActionDataFilter( - new ActionDataFilterBuilder() - .withResults("${ .jobuid }") - .build(), - ) - .build(), - ]) - .withOnErrors([ - new OnErrorBuilder() - .withError("*") - .withTransition("SubmitError") - .build(), - ]) - .withStateDataFilter( - new StateDataFilterBuilder() - .withOutput("${ .jobuid }") - .build(), - ) - .withTransition("WaitForCompletion") - .build(), - new SubFlowStateBuilder() - .withName("SubmitError") - .withWorkflowId("handleJobSubmissionErrorWorkflow") - .withEnd(true) - .build(), - new DelayStateBuilder() - .withName("WaitForCompletion") - .withTimeDelay("PT5S") - .withTransition("GetJobStatus") - .build(), - new OperationStateBuilder() - .withName("GetJobStatus") - .withActionMode('sequential') - .withActions([ - new ActionBuilder() - .withFunctionRef( - new FunctionRefBuilder() - .withRefName("checkJobStatus") - .withArguments({ - "name": "${ .jobuid }", - }) - .build(), - ) - .withActionDataFilter( - new ActionDataFilterBuilder() - .withResults("${ .jobstatus }") - .build(), - ) - .build(), - ]) - .withStateDataFilter( - new StateDataFilterBuilder() - .withOutput("${ .jobstatus }") - .build(), - ) - .withTransition("DetermineCompletion") - .build(), - new DatabasedSwitchBuilder() - .withName("DetermineCompletion") - .withDataConditions([ - new TransitionDataConditionBuilder() - .withCondition("${ .jobStatus == \"SUCCEEDED\" }") - .withTransition("JobSucceeded") - .build(), - new TransitionDataConditionBuilder() - .withCondition("${ .jobStatus == \"FAILED\" }") - .withTransition("JobFailed") - .build(), - ]) - .withDefault( - new DefaultTransitionBuilder() - .withTransition("WaitForCompletion") - .build()) - .build(), - new OperationStateBuilder() - .withName("JobSucceeded") - .withActionMode('sequential') - .withActions([ - new ActionBuilder() - .withFunctionRef( - new FunctionRefBuilder() - .withRefName("reportJobSuceeded") - .withArguments({ - "name": "${ .jobuid }", - }) - .build(), - ) - .build(), - ]) - .withEnd(true) - .build(), - new OperationStateBuilder() - .withName("JobFailed") - .withActionMode('sequential') - .withActions([ - new ActionBuilder() - .withFunctionRef( - new FunctionRefBuilder() - .withRefName("reportJobFailed") - .withArguments({ - "name": "${ .jobuid }", - }) - .build(), - ) - .build(), - ]) - .withEnd(true) - .build(), - ]) - .build(); - - - const expected = JSON.parse(fs.readFileSync("./spec/examples/jobmonitoring.json") - .toLocaleString()) as any; - expect(workflow).toEqual(expected); - - }); - - + const expected = JSON.parse(fs.readFileSync('./spec/examples/jobmonitoring.json').toLocaleString()) as any; + expect(workflow).toEqual(expected); + }); }); diff --git a/tests/examples/parallel.json b/tests/examples/parallel.json index a9ffa007..0cc279b6 100644 --- a/tests/examples/parallel.json +++ b/tests/examples/parallel.json @@ -1,25 +1,25 @@ -{ - "id": "parallelexec", - "version": "1.0", - "name": "Parallel Execution Workflow", - "description": "Executes two branches in parallel", - "start": "ParallelExec", - "states":[ - { - "name": "ParallelExec", - "type": "parallel", - "completionType": "and", - "branches": [ - { - "name": "ShortDelayBranch", - "workflowId": "shortdelayworkflowid" - }, - { - "name": "LongDelayBranch", - "workflowId": "longdelayworkflowid" - } - ], - "end": true - } - ] -} +{ + "id": "parallelexec", + "version": "1.0", + "name": "Parallel Execution Workflow", + "description": "Executes two branches in parallel", + "start": "ParallelExec", + "states":[ + { + "name": "ParallelExec", + "type": "parallel", + "completionType": "and", + "branches": [ + { + "name": "ShortDelayBranch", + "workflowId": "shortdelayworkflowid" + }, + { + "name": "LongDelayBranch", + "workflowId": "longdelayworkflowid" + } + ], + "end": true + } + ] +} diff --git a/tests/examples/parallel.spec.old.ts b/tests/examples/parallel.spec.old.ts index 8e68c762..f27fae66 100644 --- a/tests/examples/parallel.spec.old.ts +++ b/tests/examples/parallel.spec.old.ts @@ -1,12 +1,12 @@ /* * Copyright 2021-Present The Serverless Workflow Specification Authors - *

+ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *

+ * * http://www.apache.org/licenses/LICENSE-2.0 - *

+ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -14,46 +14,31 @@ * limitations under the License. * */ -import * as fs from "fs"; -import {BranchBuilder, ParallelStateBuilder, WorkflowBuilder} from '../../src'; +import * as fs from 'fs'; +import { BranchBuilder, ParallelStateBuilder, WorkflowBuilder } from '../../src'; +describe('parallel workflow example', () => { + it('should generate Workflow object', function () { + const workflow = new WorkflowBuilder() + .withId('parallelexec') + .withVersion('1.0') + .withName('Parallel Execution Workflow') + .withDescription('Executes two branches in parallel') + .withStart('ParallelExec') + .withStates([ + new ParallelStateBuilder() + .withName('ParallelExec') + .withCompletionType('and') + .withBranches([ + new BranchBuilder().withName('ShortDelayBranch').withWorkflowId('shortdelayworkflowid').build(), + new BranchBuilder().withName('LongDelayBranch').withWorkflowId('longdelayworkflowid').build(), + ]) + .withEnd(true) + .build(), + ]) + .build(); -describe("parallel workflow example", () => { - - - it('should generate Workflow object', function () { - - const workflow = new WorkflowBuilder() - .withId("parallelexec") - .withVersion("1.0") - .withName("Parallel Execution Workflow") - .withDescription("Executes two branches in parallel") - .withStart("ParallelExec") - .withStates([ - new ParallelStateBuilder() - .withName("ParallelExec") - .withCompletionType("and") - .withBranches([ - new BranchBuilder() - .withName("ShortDelayBranch") - .withWorkflowId("shortdelayworkflowid") - .build(), - new BranchBuilder() - .withName("LongDelayBranch") - .withWorkflowId("longdelayworkflowid") - .build(), - ]) - .withEnd(true) - .build(), - ]) - .build(); - - - const expected = JSON.parse(fs.readFileSync("./spec/examples/parallel.json") - .toLocaleString()) as any; - expect(workflow).toEqual(expected); - - }); - - + const expected = JSON.parse(fs.readFileSync('./spec/examples/parallel.json').toLocaleString()) as any; + expect(workflow).toEqual(expected); + }); }); diff --git a/tests/examples/provisionorder.json b/tests/examples/provisionorder.json index 8405975c..6ae967e3 100644 --- a/tests/examples/provisionorder.json +++ b/tests/examples/provisionorder.json @@ -1,73 +1,73 @@ -{ - "id": "provisionorders", - "version": "1.0", - "name": "Provision Orders", - "description": "Provision Orders and handle errors thrown", - "start": "ProvisionOrder", - "functions": [ - { - "name": "provisionOrderFunction", - "operation": "http://myapis.org/provisioningapi.json#doProvision", - "type": "rest" - } - ], - "states": [ - { - "name": "ProvisionOrder", - "type": "operation", - "actionMode": "sequential", - "actions": [ - { - "functionRef": { - "refName": "provisionOrderFunction", - "arguments": { - "order": "${ .order }" - } - } - } - ], - "stateDataFilter": { - "output": "${ .exceptions }" - }, - "transition": "ApplyOrder", - "onErrors": [ - { - "error": "Missing order id", - "transition": "MissingId" - }, - { - "error": "Missing order item", - "transition": "MissingItem" - }, - { - "error": "Missing order quantity", - "transition": "MissingQuantity" - } - ] - }, - { - "name": "MissingId", - "type": "subflow", - "workflowId": "handleMissingIdExceptionWorkflow", - "end": true - }, - { - "name": "MissingItem", - "type": "subflow", - "workflowId": "handleMissingItemExceptionWorkflow", - "end": true - }, - { - "name": "MissingQuantity", - "type": "subflow", - "workflowId": "handleMissingQuantityExceptionWorkflow", - "end": true - }, - { - "name": "ApplyOrder", - "type": "subflow", - "workflowId": "applyOrderWorkflowId", - "end": true - } - ] -} +{ + "id": "provisionorders", + "version": "1.0", + "name": "Provision Orders", + "description": "Provision Orders and handle errors thrown", + "start": "ProvisionOrder", + "functions": [ + { + "name": "provisionOrderFunction", + "operation": "http://myapis.org/provisioningapi.json#doProvision", + "type": "rest" + } + ], + "states": [ + { + "name": "ProvisionOrder", + "type": "operation", + "actionMode": "sequential", + "actions": [ + { + "functionRef": { + "refName": "provisionOrderFunction", + "arguments": { + "order": "${ .order }" + } + } + } + ], + "stateDataFilter": { + "output": "${ .exceptions }" + }, + "transition": "ApplyOrder", + "onErrors": [ + { + "error": "Missing order id", + "transition": "MissingId" + }, + { + "error": "Missing order item", + "transition": "MissingItem" + }, + { + "error": "Missing order quantity", + "transition": "MissingQuantity" + } + ] + }, + { + "name": "MissingId", + "type": "subflow", + "workflowId": "handleMissingIdExceptionWorkflow", + "end": true + }, + { + "name": "MissingItem", + "type": "subflow", + "workflowId": "handleMissingItemExceptionWorkflow", + "end": true + }, + { + "name": "MissingQuantity", + "type": "subflow", + "workflowId": "handleMissingQuantityExceptionWorkflow", + "end": true + }, + { + "name": "ApplyOrder", + "type": "subflow", + "workflowId": "applyOrderWorkflowId", + "end": true + } + ] +} diff --git a/tests/examples/provisionorder.spec.old.ts b/tests/examples/provisionorder.spec.old.ts index 3be3c611..8e03f7ee 100644 --- a/tests/examples/provisionorder.spec.old.ts +++ b/tests/examples/provisionorder.spec.old.ts @@ -1,12 +1,12 @@ /* * Copyright 2021-Present The Serverless Workflow Specification Authors - *

+ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *

+ * * http://www.apache.org/licenses/LICENSE-2.0 - *

+ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -15,100 +15,75 @@ * */ import { - ActionBuilder, - FunctionDefBuilder, - FunctionRefBuilder, - OnErrorBuilder, - OperationStateBuilder, - StateDataFilterBuilder, - SubFlowStateBuilder, - WorkflowBuilder, -} from "../../src"; -import * as fs from "fs"; + ActionBuilder, + FunctionDefBuilder, + FunctionRefBuilder, + OnErrorBuilder, + OperationStateBuilder, + StateDataFilterBuilder, + SubFlowStateBuilder, + WorkflowBuilder, +} from '../../src'; +import * as fs from 'fs'; +describe('provisionorder workflow example', () => { + it('should generate Workflow object', function () { + const workflow = new WorkflowBuilder() + .withId('provisionorders') + .withVersion('1.0') + .withName('Provision Orders') + .withDescription('Provision Orders and handle errors thrown') + .withStart('ProvisionOrder') + .withFunctions([ + new FunctionDefBuilder() + .withName('provisionOrderFunction') + .withOperation('http://myapis.org/provisioningapi.json#doProvision') + .build(), + ]) + .withStates([ + new OperationStateBuilder() + .withName('ProvisionOrder') + .withActionMode('sequential') + .withActions([ + new ActionBuilder() + .withFunctionRef( + new FunctionRefBuilder() + .withRefName('provisionOrderFunction') + .withArguments({ + order: '${ .order }', + }) + .build() + ) + .build(), + ]) + .withStateDataFilter(new StateDataFilterBuilder().withOutput('${ .exceptions }').build()) + .withTransition('ApplyOrder') + .withOnErrors([ + new OnErrorBuilder().withError('Missing order id').withTransition('MissingId').build(), + new OnErrorBuilder().withError('Missing order item').withTransition('MissingItem').build(), + new OnErrorBuilder().withError('Missing order quantity').withTransition('MissingQuantity').build(), + ]) + .build(), + new SubFlowStateBuilder() + .withName('MissingId') + .withWorkflowId('handleMissingIdExceptionWorkflow') + .withEnd(true) + .build(), + new SubFlowStateBuilder() + .withName('MissingItem') + .withWorkflowId('handleMissingItemExceptionWorkflow') + .withEnd(true) + .build(), + new SubFlowStateBuilder() + .withName('MissingQuantity') + .withWorkflowId('handleMissingQuantityExceptionWorkflow') + .withEnd(true) + .build(), + new SubFlowStateBuilder().withName('ApplyOrder').withWorkflowId('applyOrderWorkflowId').withEnd(true).build(), + ]) + .build(); -describe("provisionorder workflow example", () => { - - - it('should generate Workflow object', function () { - - const workflow = new WorkflowBuilder() - .withId("provisionorders") - .withVersion("1.0") - .withName("Provision Orders") - .withDescription("Provision Orders and handle errors thrown") - .withStart("ProvisionOrder") - .withFunctions([ - new FunctionDefBuilder() - .withName("provisionOrderFunction") - .withOperation("http://myapis.org/provisioningapi.json#doProvision") - .build(), - ]) - .withStates([ - new OperationStateBuilder() - .withName("ProvisionOrder") - .withActionMode("sequential") - .withActions([ - new ActionBuilder() - .withFunctionRef( - new FunctionRefBuilder() - .withRefName("provisionOrderFunction") - .withArguments({ - "order": "${ .order }", - }) - .build(), - ) - .build(), - ]) - .withStateDataFilter( - new StateDataFilterBuilder() - .withOutput("${ .exceptions }") - .build()) - .withTransition("ApplyOrder") - .withOnErrors([ - new OnErrorBuilder() - .withError("Missing order id") - .withTransition("MissingId") - .build(), - new OnErrorBuilder() - .withError("Missing order item") - .withTransition("MissingItem") - .build(), - new OnErrorBuilder() - .withError("Missing order quantity") - .withTransition("MissingQuantity") - .build(), - ]) - .build(), - new SubFlowStateBuilder() - .withName("MissingId") - .withWorkflowId("handleMissingIdExceptionWorkflow") - .withEnd(true) - .build(), - new SubFlowStateBuilder() - .withName("MissingItem") - .withWorkflowId("handleMissingItemExceptionWorkflow") - .withEnd(true) - .build(), - new SubFlowStateBuilder() - .withName("MissingQuantity") - .withWorkflowId("handleMissingQuantityExceptionWorkflow") - .withEnd(true) - .build(), - new SubFlowStateBuilder() - .withName("ApplyOrder") - .withWorkflowId("applyOrderWorkflowId") - .withEnd(true) - .build(), - ]) - .build(); - - - const expected = JSON.parse(fs.readFileSync("./spec/examples/provisionorder.json") - .toLocaleString()) as any; - expect(workflow).toEqual(expected); - - }); - - + const expected = JSON.parse(fs.readFileSync('./spec/examples/provisionorder.json').toLocaleString()) as any; + expect(workflow).toEqual(expected); + }); }); diff --git a/tests/examples/sendcloudevent.json b/tests/examples/sendcloudevent.json index b629a292..b83a4b77 100644 --- a/tests/examples/sendcloudevent.json +++ b/tests/examples/sendcloudevent.json @@ -1,47 +1,47 @@ -{ - "id": "sendcloudeventonprovision", - "version": "1.0", - "name": "Send CloudEvent on provision completion", - "start": "ProvisionOrdersState", - "events": [ - { - "name": "provisioningCompleteEvent", - "type": "provisionCompleteType", - "kind": "produced" - } - ], - "functions": [ - { - "name": "provisionOrderFunction", - "operation": "http://myapis.org/provisioning.json#doProvision", - "type": "rest" - } - ], - "states": [ - { - "name": "ProvisionOrdersState", - "type": "foreach", - "inputCollection": "${ .orders }", - "iterationParam": "singleorder", - "outputCollection": "${ .provisionedOrders }", - "actions": [ - { - "functionRef": { - "refName": "provisionOrderFunction", - "arguments": { - "order": "${ .singleorder }" - } - } - } - ], - "end": { - "produceEvents": [ - { - "eventRef": "provisioningCompleteEvent", - "data": "${ .provisionedOrders }" - } - ] - } - } - ] -} +{ + "id": "sendcloudeventonprovision", + "version": "1.0", + "name": "Send CloudEvent on provision completion", + "start": "ProvisionOrdersState", + "events": [ + { + "name": "provisioningCompleteEvent", + "type": "provisionCompleteType", + "kind": "produced" + } + ], + "functions": [ + { + "name": "provisionOrderFunction", + "operation": "http://myapis.org/provisioning.json#doProvision", + "type": "rest" + } + ], + "states": [ + { + "name": "ProvisionOrdersState", + "type": "foreach", + "inputCollection": "${ .orders }", + "iterationParam": "singleorder", + "outputCollection": "${ .provisionedOrders }", + "actions": [ + { + "functionRef": { + "refName": "provisionOrderFunction", + "arguments": { + "order": "${ .singleorder }" + } + } + } + ], + "end": { + "produceEvents": [ + { + "eventRef": "provisioningCompleteEvent", + "data": "${ .provisionedOrders }" + } + ] + } + } + ] +} diff --git a/tests/examples/sendcloudevent.spec.old.ts b/tests/examples/sendcloudevent.spec.old.ts index 9b5b14ad..d5a44136 100644 --- a/tests/examples/sendcloudevent.spec.old.ts +++ b/tests/examples/sendcloudevent.spec.old.ts @@ -1,12 +1,12 @@ /* * Copyright 2021-Present The Serverless Workflow Specification Authors - *

+ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *

+ * * http://www.apache.org/licenses/LICENSE-2.0 - *

+ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -14,86 +14,76 @@ * limitations under the License. * */ -import {WorkflowBuilder} from "../../src"; -import * as fs from "fs"; +import { WorkflowBuilder } from '../../src'; +import * as fs from 'fs'; import { - ActionBuilder, EndBuilder, - EventBuilder, - EventsBuilder, - ForEachStateBuilder, - FunctionDefBuilder, - FunctionRefBuilder, - ProduceEventDefBuilder, + ActionBuilder, + EndBuilder, + EventBuilder, + EventsBuilder, + ForEachStateBuilder, + FunctionDefBuilder, + FunctionRefBuilder, + ProduceEventDefBuilder, } from '../../src'; +describe('sendcloudevent workflow example', () => { + it('should generate Workflow object', function () { + const workflow = new WorkflowBuilder() + .withId('sendcloudeventonprovision') + .withVersion('1.0') + .withName('Send CloudEvent on provision completion') + .withStart('ProvisionOrdersState') + .withEvents( + new EventsBuilder() + .withEvents([ + new EventBuilder() + .withName('provisioningCompleteEvent') + .withType('provisionCompleteType') + .withKind('produced') + .build(), + ]) + .build() + ) + .withFunctions([ + new FunctionDefBuilder() + .withName('provisionOrderFunction') + .withOperation('http://myapis.org/provisioning.json#doProvision') + .build(), + ]) + .withStates([ + new ForEachStateBuilder() + .withName('ProvisionOrdersState') + .withInputCollection('${ .orders }') + .withIterationParam('singleorder') + .withOutputCollection('${ .provisionedOrders }') + .withActions([ + new ActionBuilder() + .withFunctionRef( + new FunctionRefBuilder() + .withRefName('provisionOrderFunction') + .withArguments({ + order: '${ .singleorder }', + }) + .build() + ) + .build(), + ]) + .withEnd( + new EndBuilder() + .withProduceEvents([ + new ProduceEventDefBuilder() + .withEventRef('provisioningCompleteEvent') + .withData('${ .provisionedOrders }') + .build(), + ]) + .build() + ) + .build(), + ]) + .build(); -describe("sendcloudevent workflow example", () => { - - - it('should generate Workflow object', function () { - - const workflow = new WorkflowBuilder() - .withId("sendcloudeventonprovision") - .withVersion("1.0") - .withName("Send CloudEvent on provision completion") - .withStart("ProvisionOrdersState") - .withEvents( - new EventsBuilder() - .withEvents([ - new EventBuilder() - .withName("provisioningCompleteEvent") - .withType("provisionCompleteType") - .withKind("produced") - .build(), - - ]).build(), - ) - .withFunctions([ - new FunctionDefBuilder() - .withName("provisionOrderFunction") - .withOperation("http://myapis.org/provisioning.json#doProvision") - .build(), - ]) - .withStates([ - new ForEachStateBuilder() - .withName("ProvisionOrdersState") - .withInputCollection("${ .orders }") - .withIterationParam("singleorder") - .withOutputCollection("${ .provisionedOrders }") - .withActions([ - new ActionBuilder() - .withFunctionRef( - new FunctionRefBuilder() - .withRefName("provisionOrderFunction") - .withArguments({ - "order": "${ .singleorder }", - }) - .build(), - ) - .build(), - ]) - .withEnd( - new EndBuilder() - .withProduceEvents([ - new ProduceEventDefBuilder() - .withEventRef("provisioningCompleteEvent") - .withData("${ .provisionedOrders }") - .build(), - ]) - .build(), - ) - .build(), - ]) - .build(); - - - - - const expected = JSON.parse(fs.readFileSync("./spec/examples/sendcloudevent.json") - .toLocaleString()) as any; - expect(workflow).toEqual(expected); - - }); - - + const expected = JSON.parse(fs.readFileSync('./spec/examples/sendcloudevent.json').toLocaleString()) as any; + expect(workflow).toEqual(expected); + }); }); diff --git a/tests/examples/solvemathproblems.json b/tests/examples/solvemathproblems.json index 7b39d1c8..f5c0e3cf 100644 --- a/tests/examples/solvemathproblems.json +++ b/tests/examples/solvemathproblems.json @@ -1,37 +1,37 @@ -{ - "id": "solvemathproblems", - "version": "1.0", - "name": "Solve Math Problems Workflow", - "description": "Solve math problems", - "start": "Solve", - "functions": [ - { - "name": "solveMathExpressionFunction", - "type": "rest", - "operation": "http://myapis.org/mapthapis.json#solveExpression" - } - ], - "states": [ - { - "name": "Solve", - "type": "foreach", - "inputCollection": "${ .expressions }", - "iterationParam": "singleexpression", - "outputCollection": "${ .results }", - "actions": [ - { - "functionRef": { - "refName": "solveMathExpressionFunction", - "arguments": { - "expression": "${ .singleexpression }" - } - } - } - ], - "stateDataFilter": { - "output": "${ .results }" - }, - "end": true - } - ] -} +{ + "id": "solvemathproblems", + "version": "1.0", + "name": "Solve Math Problems Workflow", + "description": "Solve math problems", + "start": "Solve", + "functions": [ + { + "name": "solveMathExpressionFunction", + "type": "rest", + "operation": "http://myapis.org/mapthapis.json#solveExpression" + } + ], + "states": [ + { + "name": "Solve", + "type": "foreach", + "inputCollection": "${ .expressions }", + "iterationParam": "singleexpression", + "outputCollection": "${ .results }", + "actions": [ + { + "functionRef": { + "refName": "solveMathExpressionFunction", + "arguments": { + "expression": "${ .singleexpression }" + } + } + } + ], + "stateDataFilter": { + "output": "${ .results }" + }, + "end": true + } + ] +} diff --git a/tests/examples/solvemathproblems.spec.old.ts b/tests/examples/solvemathproblems.spec.old.ts index 3bf2c2a5..6e045cab 100644 --- a/tests/examples/solvemathproblems.spec.old.ts +++ b/tests/examples/solvemathproblems.spec.old.ts @@ -1,12 +1,12 @@ /* * Copyright 2021-Present The Serverless Workflow Specification Authors - *

+ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *

+ * * http://www.apache.org/licenses/LICENSE-2.0 - *

+ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -14,63 +14,51 @@ * limitations under the License. * */ -import {WorkflowBuilder} from "../../src/model/workflow.builder"; -import * as fs from "fs"; -import {ActionBuilder, FunctionDefBuilder, FunctionRefBuilder} from '../../src'; -import {ForEachStateBuilder} from '../../src/model/for-each-state.builder'; -import {StateDataFilterBuilder} from '../../src/model/state-data-filter.builder'; +import { WorkflowBuilder } from '../../src/model/workflow.builder'; +import * as fs from 'fs'; +import { ActionBuilder, FunctionDefBuilder, FunctionRefBuilder } from '../../src'; +import { ForEachStateBuilder } from '../../src/model/for-each-state.builder'; +import { StateDataFilterBuilder } from '../../src/model/state-data-filter.builder'; +describe('solvemathproblems workflow example', () => { + it('should generate Workflow object', function () { + const workflow = new WorkflowBuilder() + .withId('solvemathproblems') + .withVersion('1.0') + .withName('Solve Math Problems Workflow') + .withDescription('Solve math problems') + .withStart('Solve') + .withFunctions([ + new FunctionDefBuilder() + .withName('solveMathExpressionFunction') + .withOperation('http://myapis.org/mapthapis.json#solveExpression') + .build(), + ]) + .withStates([ + new ForEachStateBuilder() + .withName('Solve') + .withInputCollection('${ .expressions }') + .withIterationParam('singleexpression') + .withOutputCollection('${ .results }') + .withActions([ + new ActionBuilder() + .withFunctionRef( + new FunctionRefBuilder() + .withRefName('solveMathExpressionFunction') + .withArguments({ + expression: '${ .singleexpression }', + }) + .build() + ) + .build(), + ]) + .withStateDataFilter(new StateDataFilterBuilder().withOutput('${ .results }').build()) + .withEnd(true) + .build(), + ]) + .build(); -describe("solvemathproblems workflow example", () => { - - - it('should generate Workflow object', function () { - - const workflow = new WorkflowBuilder() - .withId("solvemathproblems") - .withVersion("1.0") - .withName("Solve Math Problems Workflow") - .withDescription("Solve math problems") - .withStart("Solve") - .withFunctions([ - new FunctionDefBuilder() - .withName("solveMathExpressionFunction") - .withOperation("http://myapis.org/mapthapis.json#solveExpression") - .build(), - ]) - .withStates([ - new ForEachStateBuilder() - .withName("Solve") - .withInputCollection("${ .expressions }") - .withIterationParam("singleexpression") - .withOutputCollection("${ .results }") - .withActions([ - new ActionBuilder() - .withFunctionRef( - new FunctionRefBuilder() - .withRefName("solveMathExpressionFunction") - .withArguments({ - "expression": "${ .singleexpression }", - }) - .build()) - .build(), - ]) - .withStateDataFilter( - new StateDataFilterBuilder() - .withOutput("${ .results }") - .build(), - ) - .withEnd(true) - .build(), - ]) - .build(); - - - const expected = JSON.parse(fs.readFileSync("./spec/examples/solvemathproblems.json") - .toLocaleString()) as any; - expect(workflow).toEqual(expected); - - }); - - + const expected = JSON.parse(fs.readFileSync('./spec/examples/solvemathproblems.json').toLocaleString()) as any; + expect(workflow).toEqual(expected); + }); }); diff --git a/tests/model/action-builder.spec.old.ts b/tests/model/action-builder.spec.old.ts index a08622d7..873b2b8f 100644 --- a/tests/model/action-builder.spec.old.ts +++ b/tests/model/action-builder.spec.old.ts @@ -1,12 +1,12 @@ /* * Copyright 2021-Present The Serverless Workflow Specification Authors - *

+ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *

+ * * http://www.apache.org/licenses/LICENSE-2.0 - *

+ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -15,58 +15,45 @@ * */ -import {ActionBuilder, ActionDataFilter, EventRef} from '../../src'; -import {ActionDataFilterBuilder} from '../../src/model/action-data-filter.builder'; +import { ActionBuilder, ActionDataFilter, EventRef } from '../../src'; +import { ActionDataFilterBuilder } from '../../src/model/action-data-filter.builder'; +describe('ActionBuilder', () => { + it('should throws an error if mandatory fields are not set ', () => { + expect(() => new ActionBuilder().build()).toThrowError(); -describe("ActionBuilder", () => { - - it("should throws an error if mandatory fields are not set ", () => { - - expect(() => new ActionBuilder().build()).toThrowError(); - - expect(() => new ActionBuilder() - .withFunctionRef("").build()) - .toThrowError(); - }); - - - it("should throws an error if both functionRef and eventRef are set", () => { - - expect(() => new ActionBuilder().build()).toThrowError(); - - expect(() => new ActionBuilder() - .withFunctionRef("functionRef") - .withEventRef(validEventRef()).build()) - .toThrowError(); - }); - - it("should generate a populated object", () => { - expect(new ActionBuilder() - .withName("actionName") - .withEventRef(validEventRef()) - .withTimeOut("PT1H") - .withActionDataFilter(new ActionDataFilterBuilder().build()) - .build()).toEqual( - { - name: "actionName", - eventRef: validEventRef(), - timeout: "PT1H", - actionDataFilter: validActionDataFilter(), - }, - ); - - - }); - - -}); + expect(() => new ActionBuilder().withFunctionRef('').build()).toThrowError(); + }); + it('should throws an error if both functionRef and eventRef are set', () => { + expect(() => new ActionBuilder().build()).toThrowError(); + + expect(() => + new ActionBuilder().withFunctionRef('functionRef').withEventRef(validEventRef()).build() + ).toThrowError(); + }); + + it('should generate a populated object', () => { + expect( + new ActionBuilder() + .withName('actionName') + .withEventRef(validEventRef()) + .withTimeOut('PT1H') + .withActionDataFilter(new ActionDataFilterBuilder().build()) + .build() + ).toEqual({ + name: 'actionName', + eventRef: validEventRef(), + timeout: 'PT1H', + actionDataFilter: validActionDataFilter(), + }); + }); +}); function validActionDataFilter(): ActionDataFilter { - return {}; + return {}; } function validEventRef(): EventRef { - return {resultEventRef: "result"}; + return { resultEventRef: 'result' }; } diff --git a/tests/model/action-data-filter-builder.spec.old.ts b/tests/model/action-data-filter-builder.spec.old.ts index daeef705..74407a2e 100644 --- a/tests/model/action-data-filter-builder.spec.old.ts +++ b/tests/model/action-data-filter-builder.spec.old.ts @@ -1,12 +1,12 @@ /* * Copyright 2021-Present The Serverless Workflow Specification Authors - *

+ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *

+ * * http://www.apache.org/licenses/LICENSE-2.0 - *

+ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -15,30 +15,24 @@ * */ -import {ActionDataFilterBuilder} from '../../src/model/action-data-filter.builder'; +import { ActionDataFilterBuilder } from '../../src/model/action-data-filter.builder'; -describe("ActionDataFilter", () => { - - it("should generate an empty object", () => { - expect(new ActionDataFilterBuilder().build()).toEqual({}); - }); - - it("should generate a populated object", () => { - expect(new ActionDataFilterBuilder() - .withFromStateData("fromState") - .withToStateData("toState") - .withResults("result") - .build()).toEqual( - { - fromStateData: "fromState", - toStateData: "toState", - results: "result", - }, - ); - - - }); - - -}); +describe('ActionDataFilter', () => { + it('should generate an empty object', () => { + expect(new ActionDataFilterBuilder().build()).toEqual({}); + }); + it('should generate a populated object', () => { + expect( + new ActionDataFilterBuilder() + .withFromStateData('fromState') + .withToStateData('toState') + .withResults('result') + .build() + ).toEqual({ + fromStateData: 'fromState', + toStateData: 'toState', + results: 'result', + }); + }); +}); diff --git a/tests/model/cron-def-builder.spec.old.ts b/tests/model/cron-def-builder.spec.old.ts index b7f7f2aa..8e776dc2 100644 --- a/tests/model/cron-def-builder.spec.old.ts +++ b/tests/model/cron-def-builder.spec.old.ts @@ -1,12 +1,12 @@ /* * Copyright 2021-Present The Serverless Workflow Specification Authors - *

+ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *

+ * * http://www.apache.org/licenses/LICENSE-2.0 - *

+ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -14,44 +14,26 @@ * limitations under the License. * */ -import {CronDefBuilder} from '../../src/model/cron-def.builder'; +import { CronDefBuilder } from '../../src/model/cron-def.builder'; -const cronExpression = "0 * * ? * *"; +const cronExpression = '0 * * ? * *'; -describe("CronDefBuilder", () => { - - - it("Should create a valid object containing cron expresion", () => { - - expect(new CronDefBuilder() - .withCronExpresion(cronExpression) - .build(), - ).toEqual(cronExpression); - - }); - - - it("Should create a valid object containing expression and expiration time", () => { - - const dateTimeISO8601Format = "2013-07-16T19:23:51Z"; - expect(new CronDefBuilder() - .withCronExpresion(cronExpression) - .withValidUntil(dateTimeISO8601Format) - .build(), - ).toEqual({ - expression: cronExpression, - validUntil: dateTimeISO8601Format, - }); - - - }); - - - it("should throws an error if cron expression is not set", () => { - - expect(() => new CronDefBuilder().build()).toThrowError(); - - }); - -}); +describe('CronDefBuilder', () => { + it('Should create a valid object containing cron expresion', () => { + expect(new CronDefBuilder().withCronExpresion(cronExpression).build()).toEqual(cronExpression); + }); + + it('Should create a valid object containing expression and expiration time', () => { + const dateTimeISO8601Format = '2013-07-16T19:23:51Z'; + expect( + new CronDefBuilder().withCronExpresion(cronExpression).withValidUntil(dateTimeISO8601Format).build() + ).toEqual({ + expression: cronExpression, + validUntil: dateTimeISO8601Format, + }); + }); + it('should throws an error if cron expression is not set', () => { + expect(() => new CronDefBuilder().build()).toThrowError(); + }); +}); diff --git a/tests/model/event-ref-builder.spec.old.ts b/tests/model/event-ref-builder.spec.old.ts index ee52f7fb..338e52a8 100644 --- a/tests/model/event-ref-builder.spec.old.ts +++ b/tests/model/event-ref-builder.spec.old.ts @@ -1,12 +1,12 @@ /* * Copyright 2021-Present The Serverless Workflow Specification Authors - *

+ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *

+ * * http://www.apache.org/licenses/LICENSE-2.0 - *

+ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -14,54 +14,36 @@ * limitations under the License. * */ -import {EventRefBuilder} from '../../src/model/event-ref.builder'; +import { EventRefBuilder } from '../../src/model/event-ref.builder'; + +describe('event ref builder', () => { + it('should create an object with the required fields ', () => { + expect(new EventRefBuilder().withResultEventRef('resultValue').withTriggerEventRef('triggerValue').build()).toEqual( + { resultEventRef: 'resultValue', triggerEventRef: 'triggerValue' } + ); + }); + + it('should create an object with all possible fields ', () => { + expect( + new EventRefBuilder() + .withResultEventRef('resultValue') + .withTriggerEventRef('triggerValue') + .withContextAttributes({ key: 'valuect' }) + .withData({ key: 'valuedata' }) + .build() + ).toEqual({ + resultEventRef: 'resultValue', + triggerEventRef: 'triggerValue', + contextAttributes: { key: 'valuect' }, + data: { key: 'valuedata' }, + }); + }); + + it('should throws an error if mandatory fields are not set ', () => { + expect(() => new EventRefBuilder().build()).toThrowError(); + expect(() => new EventRefBuilder().withResultEventRef('').build()).toThrowError(); -describe("event ref builder", () => { - - - it("should create an object with the required fields ", () => { - - expect(new EventRefBuilder() - .withResultEventRef("resultValue") - .withTriggerEventRef("triggerValue") - .build()).toEqual( - {resultEventRef: "resultValue", triggerEventRef: 'triggerValue'}, - ); - - }); - - - it("should create an object with all possible fields ", () => { - - expect(new EventRefBuilder() - .withResultEventRef("resultValue") - .withTriggerEventRef("triggerValue") - .withContextAttributes({key: "valuect"}) - .withData({key: "valuedata"}) - .build()).toEqual( - { - resultEventRef: "resultValue", - triggerEventRef: 'triggerValue', - contextAttributes: {key: "valuect"}, - data: {key: "valuedata"}, - }, - ); - }); - - - it("should throws an error if mandatory fields are not set ", () => { - - expect(() => new EventRefBuilder().build()).toThrowError(); - - expect(() => new EventRefBuilder() - .withResultEventRef("").build()) - .toThrowError(); - - expect(() => new EventRefBuilder() - .withTriggerEventRef("") - .build()).toThrowError(); - - }); - + expect(() => new EventRefBuilder().withTriggerEventRef('').build()).toThrowError(); + }); }); diff --git a/tests/model/function-builder.spec.old.ts b/tests/model/function-builder.spec.old.ts index 48113ed3..ba9130c4 100644 --- a/tests/model/function-builder.spec.old.ts +++ b/tests/model/function-builder.spec.old.ts @@ -1,12 +1,12 @@ /* * Copyright 2021-Present The Serverless Workflow Specification Authors - *

+ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *

+ * * http://www.apache.org/licenses/LICENSE-2.0 - *

+ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -15,63 +15,41 @@ * */ -import {FunctionDefBuilder} from '../../src'; +import { FunctionDefBuilder } from '../../src'; +describe('FunctionBuilder', () => { + it('should throws an error if mandatory fields are not set ', () => { + expect(() => new FunctionDefBuilder().build()).toThrowError(); -describe("FunctionBuilder", () => { - - - it("should throws an error if mandatory fields are not set ", () => { - - expect(() => new FunctionDefBuilder().build()).toThrowError(); - - expect(() => new FunctionDefBuilder() - .withName("") - .withOperation("") - .build()) - .toThrowError(); - - expect(() => new FunctionDefBuilder() - .withOperation("http://myapis.org/applicationapi.json#emailRejection") - .build()) - .toThrowError(); - - expect(() => new FunctionDefBuilder() - .withName("functionName") - .build()) - .toThrowError(); - }); - - - it("should generate a populated object with default type value", () => { - expect(new FunctionDefBuilder() - .withName("functionName") - .withOperation("http://myapis.org/applicationapi.json#emailRejection") - .build()).toEqual( - { - name: "functionName", - operation: "http://myapis.org/applicationapi.json#emailRejection", - type: "rest", - }, - ); - - }); - - it("should generate a populated object with default type value", () => { - expect(new FunctionDefBuilder() - .withName("functionName") - .withOperation("file#serviceName#method") - .withType("rpc") - .build()).toEqual( - { - name: "functionName", - operation: "file#serviceName#method", - type: "rpc", - }, - ); - - }); - -}); + expect(() => new FunctionDefBuilder().withName('').withOperation('').build()).toThrowError(); + expect(() => + new FunctionDefBuilder().withOperation('http://myapis.org/applicationapi.json#emailRejection').build() + ).toThrowError(); + expect(() => new FunctionDefBuilder().withName('functionName').build()).toThrowError(); + }); + + it('should generate a populated object with default type value', () => { + expect( + new FunctionDefBuilder() + .withName('functionName') + .withOperation('http://myapis.org/applicationapi.json#emailRejection') + .build() + ).toEqual({ + name: 'functionName', + operation: 'http://myapis.org/applicationapi.json#emailRejection', + type: 'rest', + }); + }); + + it('should generate a populated object with default type value', () => { + expect( + new FunctionDefBuilder().withName('functionName').withOperation('file#serviceName#method').withType('rpc').build() + ).toEqual({ + name: 'functionName', + operation: 'file#serviceName#method', + type: 'rpc', + }); + }); +}); diff --git a/tests/model/metadata-builder.spec.old.ts b/tests/model/metadata-builder.spec.old.ts index a3e6af88..8122b23f 100644 --- a/tests/model/metadata-builder.spec.old.ts +++ b/tests/model/metadata-builder.spec.old.ts @@ -1,12 +1,12 @@ /* * Copyright 2021-Present The Serverless Workflow Specification Authors - *

+ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *

+ * * http://www.apache.org/licenses/LICENSE-2.0 - *

+ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -14,55 +14,27 @@ * limitations under the License. * */ -import {MetadataBuilder} from '../../src/model/metadata.builder'; +import { MetadataBuilder } from '../../src/model/metadata.builder'; +describe('MetadataBuilder', () => { + it('should create an empty object ', () => { + expect(new MetadataBuilder().build()).toEqual({}); + }); -describe("MetadataBuilder", () => { - - it("should create an empty object ", () => { - - expect(new MetadataBuilder().build()).toEqual({}); - - }); - - it("should create an object with key/value strings ", () => { - - expect(new MetadataBuilder() - .withKeyValue("k1", "v1") - .build()).toEqual( - { - "k1": "v1", - }); - - - expect(new MetadataBuilder() - .withKeyValue("k2", "v2") - .withKeyValue("k3", "v3") - .build()).toEqual( - { - "k2": "v2", - "k3": "v3", - }); - - - }); - - - it("should allow to overwrite pairs of key/value ", () => { - - expect(new MetadataBuilder() - .withKeyValue("k1", "v1") - .withKeyValue("k1", "v2") - .build()).toEqual( - { - "k1": "v2", - }); - - - }); - - -}); - + it('should create an object with key/value strings ', () => { + expect(new MetadataBuilder().withKeyValue('k1', 'v1').build()).toEqual({ + k1: 'v1', + }); + expect(new MetadataBuilder().withKeyValue('k2', 'v2').withKeyValue('k3', 'v3').build()).toEqual({ + k2: 'v2', + k3: 'v3', + }); + }); + it('should allow to overwrite pairs of key/value ', () => { + expect(new MetadataBuilder().withKeyValue('k1', 'v1').withKeyValue('k1', 'v2').build()).toEqual({ + k1: 'v2', + }); + }); +}); diff --git a/tests/model/produce-event-def-builder.spec.old.ts b/tests/model/produce-event-def-builder.spec.old.ts index e4e6f0e0..e36c7672 100644 --- a/tests/model/produce-event-def-builder.spec.old.ts +++ b/tests/model/produce-event-def-builder.spec.old.ts @@ -1,12 +1,12 @@ /* * Copyright 2021-Present The Serverless Workflow Specification Authors - *

+ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *

+ * * http://www.apache.org/licenses/LICENSE-2.0 - *

+ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -14,39 +14,30 @@ * limitations under the License. * */ -import {ProduceEventDefBuilder} from '../../src/model/produce-event-def.builder'; +import { ProduceEventDefBuilder } from '../../src/model/produce-event-def.builder'; +describe('ProduceEventDefBuilder', () => { + it('should throws an error if mandatory fields are not set ', () => { + expect(() => new ProduceEventDefBuilder().build()).toThrowError(); -describe("ProduceEventDefBuilder", () => { - - it("should throws an error if mandatory fields are not set ", () => { - - expect(() => new ProduceEventDefBuilder() - .build()).toThrowError(); - - expect(() => new ProduceEventDefBuilder() - .withEventRef("").build()) - .toThrowError(); - }); - - it("should build a valid ProduceEventDef object ", () => { - - expect(new ProduceEventDefBuilder() - .withEventRef("ConfirmationCompletedEvent") - .withData("${ .payment }") - .withContextAttributes({ - kContext: "kcValue", - }) - .build()) - .toEqual({ - eventRef: "ConfirmationCompletedEvent", - data: "${ .payment }", - contextAttributes: { - kContext: "kcValue", - }, - }); - }); - - -}); + expect(() => new ProduceEventDefBuilder().withEventRef('').build()).toThrowError(); + }); + it('should build a valid ProduceEventDef object ', () => { + expect( + new ProduceEventDefBuilder() + .withEventRef('ConfirmationCompletedEvent') + .withData('${ .payment }') + .withContextAttributes({ + kContext: 'kcValue', + }) + .build() + ).toEqual({ + eventRef: 'ConfirmationCompletedEvent', + data: '${ .payment }', + contextAttributes: { + kContext: 'kcValue', + }, + }); + }); +}); diff --git a/tests/model/repeat-builder.spec.old.ts b/tests/model/repeat-builder.spec.old.ts index 4b5dd394..30f9106b 100644 --- a/tests/model/repeat-builder.spec.old.ts +++ b/tests/model/repeat-builder.spec.old.ts @@ -1,12 +1,12 @@ /* * Copyright 2021-Present The Serverless Workflow Specification Authors - *

+ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *

+ * * http://www.apache.org/licenses/LICENSE-2.0 - *

+ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -14,33 +14,28 @@ * limitations under the License. * */ -import {RepeatBuilder} from '../../src/model/repeat.builder'; +import { RepeatBuilder } from '../../src/model/repeat.builder'; describe('repeat builder', () => { - - it("Should create empty object", () => { - - expect(new RepeatBuilder().build()).toEqual({}); - - }); - - it("should create an object with all possible fields", () => { - - expect(new RepeatBuilder() - .withExpression("anyExpression") - .withCheckBefore(true) - .withMax(3) - .withContinueOnError(true) - .withStopOnEvents(["onStopEvent"]) - .build()) - .toEqual({ - expression: "anyExpression", - checkBefore: true, - max: 3, - continueOnError: true, - stopOnEvents: ["onStopEvent"], - }); - - }); - + it('Should create empty object', () => { + expect(new RepeatBuilder().build()).toEqual({}); + }); + + it('should create an object with all possible fields', () => { + expect( + new RepeatBuilder() + .withExpression('anyExpression') + .withCheckBefore(true) + .withMax(3) + .withContinueOnError(true) + .withStopOnEvents(['onStopEvent']) + .build() + ).toEqual({ + expression: 'anyExpression', + checkBefore: true, + max: 3, + continueOnError: true, + stopOnEvents: ['onStopEvent'], + }); + }); }); diff --git a/tests/model/schedule-builder.spec.old.ts b/tests/model/schedule-builder.spec.old.ts index 5cf6e31d..b73a5b8e 100644 --- a/tests/model/schedule-builder.spec.old.ts +++ b/tests/model/schedule-builder.spec.old.ts @@ -1,12 +1,12 @@ /* * Copyright 2021-Present The Serverless Workflow Specification Authors - *

+ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *

+ * * http://www.apache.org/licenses/LICENSE-2.0 - *

+ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -14,61 +14,37 @@ * limitations under the License. * */ -import {ScheduleBuilder} from '../../src/model/schedule.builder'; -import {CronDef} from '../../src'; +import { ScheduleBuilder } from '../../src/model/schedule.builder'; +import { CronDef } from '../../src'; +describe('ScheduleBuilder', () => { + it('should throws an error if mandatory fields are not set ', () => { + expect(() => new ScheduleBuilder().build()).toThrowError(); -describe("ScheduleBuilder", () => { - - it("should throws an error if mandatory fields are not set ", () => { - - expect(() => new ScheduleBuilder().build()).toThrowError(); - - expect(() => new ScheduleBuilder() - .withInterval("").build()) - .toThrowError(); - }); - - - it("should create a valid object when interval is set", () => { - expect(new ScheduleBuilder() - .withInterval("PT2S").build()) - .toEqual("PT2S"); - }); - - - it("should create a valid object when interval and cron are set", () => { - - expect(new ScheduleBuilder() - .withInterval("PT2S") - .withCron(validCronDef()) - .build()) - .toEqual({ - interval: "PT2S", - cron: validCronDef(), - timezone: "UTC", - }); - }); - - - it("should allow set timezone", () => { - - expect(new ScheduleBuilder() - .withInterval("PT2S") - .withCron(validCronDef()) - .withTimezone("CET") - .build()) - .toEqual({ - interval: "PT2S", - cron: validCronDef(), - timezone: "CET", - }); - }); -}); + expect(() => new ScheduleBuilder().withInterval('').build()).toThrowError(); + }); + it('should create a valid object when interval is set', () => { + expect(new ScheduleBuilder().withInterval('PT2S').build()).toEqual('PT2S'); + }); -function validCronDef(): CronDef { - return "0 * * ? * *"; -} + it('should create a valid object when interval and cron are set', () => { + expect(new ScheduleBuilder().withInterval('PT2S').withCron(validCronDef()).build()).toEqual({ + interval: 'PT2S', + cron: validCronDef(), + timezone: 'UTC', + }); + }); + it('should allow set timezone', () => { + expect(new ScheduleBuilder().withInterval('PT2S').withCron(validCronDef()).withTimezone('CET').build()).toEqual({ + interval: 'PT2S', + cron: validCronDef(), + timezone: 'CET', + }); + }); +}); +function validCronDef(): CronDef { + return '0 * * ? * *'; +} diff --git a/tests/model/workflow.builder.spec.old.ts b/tests/model/workflow.builder.spec.old.ts index 6984ea61..77b5ade3 100644 --- a/tests/model/workflow.builder.spec.old.ts +++ b/tests/model/workflow.builder.spec.old.ts @@ -1,12 +1,12 @@ /* * Copyright 2021-Present The Serverless Workflow Specification Authors - *

+ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *

+ * * http://www.apache.org/licenses/LICENSE-2.0 - *

+ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -14,131 +14,127 @@ * limitations under the License. * */ -import {InjectStateBuilder, Workflow, WorkflowBuilder} from "../../src"; -import {ValidationError, ValidationErrors, ValidatorFactory, WorkflowValidator} from "../../src/model/workflow.validator"; +import { InjectStateBuilder, Workflow, WorkflowBuilder } from '../../src'; +import { + ValidationError, + ValidationErrors, + ValidatorFactory, + WorkflowValidator, +} from '../../src/model/workflow.validator'; + +describe('workflow builder', () => { + it('should create a workflow with mandatory fields', () => { + const workflow: Workflow = new WorkflowBuilder() + .withId('helloworld') + .withName('hello world') + .withVersion('0.6') + .withStart('hello builder') + .withStates([ + new InjectStateBuilder() + .withName('Hello State') + .withData({ + result: 'Hello World!', + }) + .withEnd(true) + .build(), + ]) + .build(); + + expect(workflow).toEqual({ + id: 'helloworld', + name: 'hello world', + version: '0.6', + start: 'hello builder', + states: [ + { + type: 'inject', + name: 'Hello State', + data: { result: 'Hello World!' }, + end: true, + }, + ], + }); + }); + + it('should create a workflow with all fields', () => { + const workflow: Workflow = new WorkflowBuilder() + .withId('helloworld') + .withName('hello world') + .withVersion('0.6') + .withStart('hello builder') + .withStates([ + new InjectStateBuilder() + .withName('Hello State') + .withData({ + result: 'Hello World!', + }) + .withEnd(true) + .build(), + ]) + .withDescription('hello builder description') + .withSchemaVersion('0.6') + .withSchemaVersion('1.0') + .withExpressionLang('jq') + .withExecTimeout({ duration: 'PT2M' }) + .withKeepActive(true) + .withMetadata({ + key1: 'value1', + key2: 'value2', + }) + .withEvents('http://myhost:8080/eventsdefs.json') + .withFunctions('http://myhost:8080/functionsdefs.json') + .withRetries('http://myhost:8080/retriesdefs.json') + .build(); + + expect(workflow).toEqual({ + id: 'helloworld', + name: 'hello world', + version: '0.6', + start: 'hello builder', + states: [ + { + type: 'inject', + name: 'Hello State', + data: { result: 'Hello World!' }, + end: true, + }, + ], + description: 'hello builder description', + schemaVersion: '1.0', + expressionLang: 'jq', + execTimeout: { duration: 'PT2M' }, + keepActive: true, + metadata: { + key1: 'value1', + key2: 'value2', + }, + events: 'http://myhost:8080/eventsdefs.json', + functions: 'http://myhost:8080/functionsdefs.json', + retries: 'http://myhost:8080/retriesdefs.json', + }); + }); + + it('should invoke validator class', () => { + const workflowValidator = new WorkflowValidator({}); + spyOn(workflowValidator, 'isValid').and.returnValue(false); + spyOn(workflowValidator, 'validate').and.returnValue(new ValidationErrors([new ValidationError('any error')])); + + const validatorFactory = new ValidatorFactory(); + spyOn(validatorFactory, 'workflowValidator').and.returnValue(workflowValidator); + + try { + new WorkflowBuilder(validatorFactory).build(); + } catch (error) { + //Expected method build to throw an error + } + expect(workflowValidator.isValid).toHaveBeenCalled(); + expect(workflowValidator.validate).toHaveBeenCalled(); + }); -describe("workflow builder", () => { - - - it("should create a workflow with mandatory fields", () => { - const workflow: Workflow = new WorkflowBuilder() - .withId("helloworld") - .withName("hello world") - .withVersion("0.6") - .withStart("hello builder") - .withStates([new InjectStateBuilder() - .withName("Hello State") - .withData({ - "result": "Hello World!", - }) - .withEnd(true).build()]) - .build(); - - expect(workflow).toEqual({ - "id": "helloworld", - "name": "hello world", - "version": "0.6", - "start": "hello builder", - "states": [{ - "type": "inject", "name": "Hello State", - "data": {"result": "Hello World!"}, - "end": true, - }], - }, - ); - - }); - - - it("should create a workflow with all fields", () => { - const workflow: Workflow = - new WorkflowBuilder() - .withId("helloworld") - .withName("hello world") - .withVersion("0.6") - .withStart("hello builder") - .withStates([new InjectStateBuilder() - .withName("Hello State") - .withData({ - "result": "Hello World!", - }) - .withEnd(true).build()]) - .withDescription("hello builder description") - .withSchemaVersion("0.6") - .withSchemaVersion("1.0") - .withExpressionLang("jq") - .withExecTimeout({duration: 'PT2M'}) - .withKeepActive(true) - .withMetadata({ - "key1": "value1", - "key2": "value2", - }) - .withEvents("http://myhost:8080/eventsdefs.json") - .withFunctions("http://myhost:8080/functionsdefs.json") - .withRetries("http://myhost:8080/retriesdefs.json") - .build(); - - expect(workflow).toEqual({ - "id": "helloworld", - "name": "hello world", - "version": "0.6", - "start": "hello builder", - "states": [{ - "type": "inject", "name": "Hello State", - "data": {"result": "Hello World!"}, - "end": true, - }], - "description": "hello builder description", - "schemaVersion": "1.0", - "expressionLang": "jq", - "execTimeout": {duration: 'PT2M'}, - "keepActive": true, - "metadata": { - "key1": "value1", - "key2": "value2", - }, - "events": "http://myhost:8080/eventsdefs.json", - "functions": "http://myhost:8080/functionsdefs.json", - "retries": "http://myhost:8080/retriesdefs.json", - }, - ); - - }); - - - it("should invoke validator class", () => { - - const workflowValidator = new WorkflowValidator({}); - spyOn(workflowValidator, 'isValid') - .and.returnValue(false); - spyOn(workflowValidator, 'validate') - .and.returnValue(new ValidationErrors([new ValidationError("any error")])); - - const validatorFactory = new ValidatorFactory(); - spyOn(validatorFactory, 'workflowValidator') - .and.returnValue(workflowValidator); - - try { - new WorkflowBuilder(validatorFactory) - .build(); - } catch (error) { - //Expected method build to throw an error - } - - - expect(workflowValidator.isValid).toHaveBeenCalled(); - expect(workflowValidator.validate).toHaveBeenCalled(); - - - }); - - - it("should thrown an error if any mandatory field is not set", () => { - expect(() => { - new WorkflowBuilder().build(); - }).toThrowError(); - }); - - + it('should thrown an error if any mandatory field is not set', () => { + expect(() => { + new WorkflowBuilder().build(); + }).toThrowError(); + }); }); diff --git a/tests/model/workflow.validator.spec.old.ts b/tests/model/workflow.validator.spec.old.ts index 6f29987f..cdc36793 100644 --- a/tests/model/workflow.validator.spec.old.ts +++ b/tests/model/workflow.validator.spec.old.ts @@ -1,12 +1,12 @@ /* * Copyright 2021-Present The Serverless Workflow Specification Authors - *

+ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *

+ * * http://www.apache.org/licenses/LICENSE-2.0 - *

+ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -14,70 +14,58 @@ * limitations under the License. * */ -import {Workflow} from "../../src"; -import {ValidationError, WorkflowValidator} from "../../src/model/workflow.validator"; - +import { Workflow } from '../../src'; +import { ValidationError, WorkflowValidator } from '../../src/model/workflow.validator'; const validWorkflow: Workflow = { - "id": "helloworld", - "name": "hello world", - "version": "0.6", - "start": "hello builder", - "states": [{ - "type": "inject", "name": "Hello State", "data": - {"result": "Hello World!"}, - "end": true, - }], + id: 'helloworld', + name: 'hello world', + version: '0.6', + start: 'hello builder', + states: [ + { + type: 'inject', + name: 'Hello State', + data: { result: 'Hello World!' }, + end: true, + }, + ], }; +describe('workflow validator', () => { + it('should recognize valid workflow', () => { + expect(new WorkflowValidator(validWorkflow).isValid()).toBeTruthy(); + }); -describe("workflow validator", () => { - - - it("should recognize valid workflow", () => { - expect(new WorkflowValidator(validWorkflow).isValid()).toBeTruthy(); - }); - - - const testCases = [ - {field: "id"}, - {field: "name"}, - {field: "version"}, - {field: "start"}, - {field: "states"}]; - testCases.forEach(t => { - it(`should return error as field [${t.field}] is not set`, () => { - const field = t.field; - const invalidWorkflow = workflowWithoutFields([field]); - const validator = new WorkflowValidator(invalidWorkflow); - expect(validator.isValid()).toBeFalse(); - expect(validator.validate().errors().length).toBe(1); - expectErrorsToContainsMessage(validator.validate().errors(), `${t.field} can not be undefined`); - }); - }); - - - it(`should return two validationErrors if two mandatory fields are not set`, () => { - const invalidWorkflow = workflowWithoutFields(["name", "version"]); - const validator = new WorkflowValidator(invalidWorkflow); - expect(validator.isValid()).toBeFalse(); - expect(validator.validate().errors().length).toBe(2); - }); - - -}); + const testCases = [{ field: 'id' }, { field: 'name' }, { field: 'version' }, { field: 'start' }, { field: 'states' }]; + testCases.forEach((t) => { + it(`should return error as field [${t.field}] is not set`, () => { + const field = t.field; + const invalidWorkflow = workflowWithoutFields([field]); + const validator = new WorkflowValidator(invalidWorkflow); + expect(validator.isValid()).toBeFalse(); + expect(validator.validate().errors().length).toBe(1); + expectErrorsToContainsMessage(validator.validate().errors(), `${t.field} can not be undefined`); + }); + }); + it(`should return two validationErrors if two mandatory fields are not set`, () => { + const invalidWorkflow = workflowWithoutFields(['name', 'version']); + const validator = new WorkflowValidator(invalidWorkflow); + expect(validator.isValid()).toBeFalse(); + expect(validator.validate().errors().length).toBe(2); + }); +}); function workflowWithoutFields(fields: string[]): Workflow { - const invalidWorkflow = Object.assign({}, validWorkflow); - fields.forEach(field => { - delete invalidWorkflow[field]; - }); - return invalidWorkflow; + const invalidWorkflow = Object.assign({}, validWorkflow); + fields.forEach((field) => { + delete invalidWorkflow[field]; + }); + return invalidWorkflow; } - function expectErrorsToContainsMessage(validationErrors: ValidationError[], message: string): void { - const errorMessages = validationErrors.map(e => e.message()).join(";"); - expect(errorMessages).toMatch(message); + const errorMessages = validationErrors.map((e) => e.message()).join(';'); + expect(errorMessages).toMatch(message); } diff --git a/tests/support/jasmine.json b/tests/support/jasmine.json index c6b926b6..6e6e029e 100644 --- a/tests/support/jasmine.json +++ b/tests/support/jasmine.json @@ -1,8 +1,8 @@ -{ - "spec_dir": "out-tsc/tests", - "spec_files": [ - "**/*[sS]pec.js" - ], - "stopSpecOnExpectationFailure": false, - "random": true -} +{ + "spec_dir": "out-tsc/tests", + "spec_files": [ + "**/*[sS]pec.js" + ], + "stopSpecOnExpectationFailure": false, + "random": true +} diff --git a/tests/tsconfig.json b/tests/tsconfig.json index 9794203f..755706b4 100644 --- a/tests/tsconfig.json +++ b/tests/tsconfig.json @@ -1,10 +1,10 @@ -{ - "extends": "../tsconfig.base.json", - "compilerOptions": { - "outDir": "../out-tsc/tests" - }, - "include": [ - "../src/**/*.ts", - "../**/*.spec.ts", - ] -} +{ + "extends": "../tsconfig.base.json", + "compilerOptions": { + "outDir": "../out-tsc/tests" + }, + "include": [ + "../src/**/*.ts", + "../**/*.spec.ts", + ] +} diff --git a/tests/workflow-converter-hello-world.json b/tests/workflow-converter-hello-world.json index ccfd3bd6..e384bc7c 100644 --- a/tests/workflow-converter-hello-world.json +++ b/tests/workflow-converter-hello-world.json @@ -1,17 +1,17 @@ -{ - "id": "helloworld", - "version": "1.0", - "name": "Hello World Workflow", - "description": "Inject Hello World", - "start": "Hello State", - "states":[ - { - "name":"Hello State", - "type":"inject", - "data": { - "result": "Hello World!" - }, - "end": true - } - ] -} +{ + "id": "helloworld", + "version": "1.0", + "name": "Hello World Workflow", + "description": "Inject Hello World", + "start": "Hello State", + "states":[ + { + "name":"Hello State", + "type":"inject", + "data": { + "result": "Hello World!" + }, + "end": true + } + ] +} diff --git a/tests/workflow-converter-hello-world.yaml b/tests/workflow-converter-hello-world.yaml index c806f6e5..4320ecbd 100644 --- a/tests/workflow-converter-hello-world.yaml +++ b/tests/workflow-converter-hello-world.yaml @@ -1,11 +1,11 @@ -id: helloworld -version: '1.0' -name: Hello World Workflow -description: Inject Hello World -start: Hello State -states: - - type: inject - name: Hello State - data: - result: Hello World! - end: true +id: helloworld +version: '1.0' +name: Hello World Workflow +description: Inject Hello World +start: Hello State +states: + - type: inject + name: Hello State + data: + result: Hello World! + end: true diff --git a/tests/workflow-converter-hello-world.yml b/tests/workflow-converter-hello-world.yml index 93146dba..fb4ea393 100644 --- a/tests/workflow-converter-hello-world.yml +++ b/tests/workflow-converter-hello-world.yml @@ -1,11 +1,11 @@ -id: helloworld -version: '1.0' -name: Hello World Workflow -description: Inject Hello World -start: Hello State -states: - - name: Hello State - type: inject - data: - result: Hello World! - end: true +id: helloworld +version: '1.0' +name: Hello World Workflow +description: Inject Hello World +start: Hello State +states: + - name: Hello State + type: inject + data: + result: Hello World! + end: true diff --git a/tests/workflow-converter.spec.ts b/tests/workflow-converter.spec.ts index cd5d8bee..5bf95974 100644 --- a/tests/workflow-converter.spec.ts +++ b/tests/workflow-converter.spec.ts @@ -1,12 +1,12 @@ /* * Copyright 2021-Present The Serverless Workflow Specification Authors - *

+ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at - *

+ * * http://www.apache.org/licenses/LICENSE-2.0 - *

+ * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. @@ -14,133 +14,131 @@ * limitations under the License. * */ -import { - workflowBuilder, - injectstateBuilder, - WorkflowConverter, - Specification -} from "../src/"; +import { workflowBuilder, injectstateBuilder, WorkflowConverter, Specification } from '../src/'; import { readFileSync } from 'fs'; - -describe("workflow-converter fromSource", () => { +describe('workflow-converter fromSource', () => { const testCases = [ { - description: "should generate workflow object from JSON file", - file: "./tests/workflow-converter-hello-world.json", - + description: 'should generate workflow object from JSON file', + file: './tests/workflow-converter-hello-world.json', }, { - description: "should generate workflow object from YAML file", - file: "./tests/workflow-converter-hello-world.yaml", - + description: 'should generate workflow object from YAML file', + file: './tests/workflow-converter-hello-world.yaml', }, { - description: "should generate workflow object from YML file", - file: "./tests/workflow-converter-hello-world.yml", - - } + description: 'should generate workflow object from YML file', + file: './tests/workflow-converter-hello-world.yml', + }, ]; - testCases.forEach(test => { + testCases.forEach((test) => { it(test.description, function () { const workflow: Specification.Workflow = WorkflowConverter.fromString(readFileSync(test.file, 'utf-8')); - expect(workflow.id).toBe("helloworld"); - expect(workflow.version).toBe("1.0"); - expect(workflow.name).toBe("Hello World Workflow"); - expect(workflow.description).toBe("Inject Hello World"); - expect(workflow.start).toBe("Hello State"); + expect(workflow.id).toBe('helloworld'); + expect(workflow.version).toBe('1.0'); + expect(workflow.name).toBe('Hello World Workflow'); + expect(workflow.description).toBe('Inject Hello World'); + expect(workflow.start).toBe('Hello State'); expect(workflow).toEqual({ - "id": "helloworld", - "version": "1.0", - "name": "Hello World Workflow", - "description": "Inject Hello World", - "start": "Hello State", - "states": [ + id: 'helloworld', + version: '1.0', + name: 'Hello World Workflow', + description: 'Inject Hello World', + start: 'Hello State', + states: [ { - "name": "Hello State", - "type": "inject", - "data": { - "result": "Hello World!" + name: 'Hello State', + type: 'inject', + data: { + result: 'Hello World!', }, - "end": true - } - ] + end: true, + }, + ], }); }); - }) + }); it('should throws error if format is not json or yaml', () => { expect(() => { - WorkflowConverter.fromString(readFileSync("./tests/workflow-converter-hello-world.xxx", 'utf-8')); - } - ).toThrow(new Error("Format not supported")); + WorkflowConverter.fromString(readFileSync('./tests/workflow-converter-hello-world.xxx', 'utf-8')); + }).toThrow(new Error('Format not supported')); }); }); - -describe("workflow-converter", () => { - +describe('workflow-converter', () => { it('should generate JSON from workflow object', () => { - const jsonWorkflow: string = WorkflowConverter.toJson(workflowBuilder() - .id("helloworld") - .version("1.0") - .name("Hello World Workflow") - .description("Inject Hello World") - .start("Hello State") - .states([injectstateBuilder() - .name("Hello State") - .data({ - "result": "Hello World!" - }) - .end(true) + const jsonWorkflow: string = WorkflowConverter.toJson( + workflowBuilder() + .id('helloworld') + .version('1.0') + .name('Hello World Workflow') + .description('Inject Hello World') + .start('Hello State') + .states([ + injectstateBuilder() + .name('Hello State') + .data({ + result: 'Hello World!', + }) + .end(true) + .build(), + ]) .build() - ]) - .build()); - expect(jsonWorkflow).toBe("{" + - "\"id\":\"helloworld\"," + - "\"version\":\"1.0\"," + - "\"name\":\"Hello World Workflow\"," + - "\"description\":\"Inject Hello World\"," + - "\"start\":\"Hello State\"," + - "\"states\":[" + - "{" + - "\"name\":\"Hello State\"," + - "\"data\":{" + - "\"result\":\"Hello World!\"" + - "}," + - "\"end\":true," + - "\"type\":\"inject\"" + - "}" + - "]" + - "}"); + ); + expect(jsonWorkflow).toBe( + '{' + + '"id":"helloworld",' + + '"version":"1.0",' + + '"name":"Hello World Workflow",' + + '"description":"Inject Hello World",' + + '"start":"Hello State",' + + '"states":[' + + '{' + + '"name":"Hello State",' + + '"data":{' + + '"result":"Hello World!"' + + '},' + + '"end":true,' + + '"type":"inject"' + + '}' + + ']' + + '}' + ); }); it('should generate YAML from workflow object', () => { - const yamlWorkflow: string = WorkflowConverter.toYaml(workflowBuilder() - .id("helloworld") - .version("1.0") - .name("Hello World Workflow") - .description("Inject Hello World") - .start("Hello State") - .states([injectstateBuilder() - .name("Hello State") - .data({ - "result": "Hello World!" - }) - .end(true) + const yamlWorkflow: string = WorkflowConverter.toYaml( + workflowBuilder() + .id('helloworld') + .version('1.0') + .name('Hello World Workflow') + .description('Inject Hello World') + .start('Hello State') + .states([ + injectstateBuilder() + .name('Hello State') + .data({ + result: 'Hello World!', + }) + .end(true) + .build(), + ]) .build() - ]) - .build()); - expect(yamlWorkflow).toBe("id: helloworld\n" + - "version: '1.0'\n" + - "name: Hello World Workflow\n" + - "description: Inject Hello World\n" + - "start: Hello State\n" + - "states:\n" + - " - name: Hello State\n" + - " data:\n" + - " result: Hello World!\n" + - " end: true\n" + - " type: inject\n"); + ); + expect(yamlWorkflow).toBe( + 'id: helloworld\n' + + "version: '1.0'\n" + + 'name: Hello World Workflow\n' + + 'description: Inject Hello World\n' + + 'start: Hello State\n' + + 'states:\n' + + ' - name: Hello State\n' + + ' data:\n' + + ' result: Hello World!\n' + + ' end: true\n' + + ' type: inject\n' + ); }); -}) +}); diff --git a/tools/consts.ts b/tools/consts.ts new file mode 100644 index 00000000..b35a18e6 --- /dev/null +++ b/tools/consts.ts @@ -0,0 +1,21 @@ +export const fileHeader = `/* +* Copyright 2021-Present The Serverless Workflow Specification Authors +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +`; + +export const readMeDisclaimer = `# Auto generated notice +This directory and its content has been generated automatically. Do not modify its content, it WILL be lost.`; diff --git a/tools/download-schemas.ts b/tools/download-schemas.ts index 14ced4b2..6f2f8bd7 100644 --- a/tools/download-schemas.ts +++ b/tools/download-schemas.ts @@ -1,21 +1,40 @@ +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + import fetch from 'node-fetch'; import * as path from 'path'; -import {promises as fsPromises} from 'fs'; +import { promises as fsPromises } from 'fs'; import rimraf from 'rimraf'; import yargs from 'yargs'; import { version } from '../package.json'; -const {writeFile,mkdir} = fsPromises; -const rimrafP = async (f: string): Promise => new Promise((resolve, reject) => - rimraf(f, (err) => { - if (err) return reject(err); - resolve(); - }) -); +import { readMeDisclaimer } from './consts'; +const { writeFile, mkdir } = fsPromises; +const rimrafP = async (f: string): Promise => + new Promise((resolve, reject) => + rimraf(f, (err) => { + if (err) return reject(err); + resolve(); + }) + ); /** * Represents the links of a GitHub content item */ interface GithubContentItemLinks { - self:string; + self: string; git: string; html: string; } @@ -25,7 +44,7 @@ interface GithubContentItemLinks { */ enum GithubContentItemType { File = 'file', - Dir = 'dir' + Dir = 'dir', } /** @@ -45,29 +64,30 @@ interface GithubContentItem { } /** Resets the destination directory */ -const reset = async (destDir: string) => rimrafP(destDir) - .then(() => mkdir(destDir, { recursive: true })) - .then(() => writeFile(path.resolve(destDir, 'README.md'), `# Auto generated notice -This directory and its content has been generated automatically. Do not modify its content, it WILL be lost.`)); +const reset = async (destDir: string) => + rimrafP(destDir) + .then(() => mkdir(destDir, { recursive: true })) + .then(() => writeFile(path.resolve(destDir, 'README.md'), readMeDisclaimer)); /** * A promise that list the schemas in the registry * @param {string} url The registry entry point * @returns {GithubContentItem[]} The list of items */ -const listFiles = async (url: string): Promise => fetch(url) - .then((res: any) => { - if (res.status !== 200) throw `Cannot fetch ${url}`; - return res.json(); - }) - .then((items: GithubContentItem[]) => { - const queue = items.map(i => { - if (i.type === GithubContentItemType.Dir) return listFiles(i.url); - return Promise.resolve([i]); - }); - return Promise.all(queue); - }) - .then((items: GithubContentItem[][]) => items.reduce((acc, i) => [...acc, ...i])); +const listFiles = async (url: string): Promise => + fetch(url) + .then((res: any) => { + if (res.status !== 200) throw `Cannot fetch ${url}`; + return res.json(); + }) + .then((items: GithubContentItem[]) => { + const queue = items.map((i) => { + if (i.type === GithubContentItemType.Dir) return listFiles(i.url); + return Promise.resolve([i]); + }); + return Promise.all(queue); + }) + .then((items: GithubContentItem[][]) => items.reduce((acc, i) => [...acc, ...i])); /** * A promise that maps the item paths and their urls * @param {GithubContentItem[]} items The list of items @@ -75,12 +95,9 @@ const listFiles = async (url: string): Promise => fetch(url */ const mapFilePaths = async (items: GithubContentItem[]): Promise> => { const filesMap = new Map(); - items.forEach(i => { - filesMap.set( - i.path, - i.download_url - ); - }) + items.forEach((i) => { + filesMap.set(i.path, i.download_url); + }); return Promise.resolve(filesMap); }; /** @@ -89,25 +106,25 @@ const mapFilePaths = async (items: GithubContentItem[]): Promise => mkdir( - path.resolve(process.cwd(), 'src/lib', dest.split('/').slice(0, -1).join('/')), - { recursive: true } - ) - .then(() => fetch(url)) - .then((res: any) => res.arrayBuffer()) - .then((data) => writeFile(path.resolve(process.cwd(), 'src/lib', dest), Buffer.from(data))) - ; +const downloadFile = async (url: string, dest: string): Promise => + mkdir(path.resolve(process.cwd(), 'src/lib', dest.split('/').slice(0, -1).join('/')), { recursive: true }) + .then(() => fetch(url)) + .then((res: any) => res.arrayBuffer()) + .then((data) => writeFile(path.resolve(process.cwd(), 'src/lib', dest), Buffer.from(data))); /** * A promise to download the provided files * @param {Map} filesMap The path/url map to download to/from * @returns {void} */ -const downloadFiles = async (filesMap: Map): Promise => Promise.all(Array.from(filesMap).map(([dest, url]) => downloadFile(url, dest))); +const downloadFiles = async (filesMap: Map): Promise => + Promise.all(Array.from(filesMap).map(([dest, url]) => downloadFile(url, dest))); const argv = yargs(process.argv.slice(2)).argv; -const ref = `v${version.split('.').slice(0,-1).join('.')}`; +const ref = `v${version.split('.').slice(0, -1).join('.')}`; /** The schema registry base url, either provided in args or based on the package version */ -const registryUrl: string = argv.registry as string || `https://api.github.com/repos/serverlessworkflow/specification/contents/schema?ref=${ref}`; +const registryUrl: string = + (argv.registry as string) || + `https://api.github.com/repos/serverlessworkflow/specification/contents/schema?ref=${ref}`; console.log(`Using registry '${registryUrl}'`); /** List, map, download */ reset(path.resolve(process.cwd(), 'src/lib/schema')) @@ -115,5 +132,4 @@ reset(path.resolve(process.cwd(), 'src/lib/schema')) .then(mapFilePaths) .then(downloadFiles) .then(console.log.bind(console)) - .catch(console.error.bind(console)) - ; \ No newline at end of file + .catch(console.error.bind(console)); diff --git a/tools/generate-builders.ts b/tools/generate-builders.ts index f49ad58b..c392b961 100644 --- a/tools/generate-builders.ts +++ b/tools/generate-builders.ts @@ -1,23 +1,42 @@ -import {promises as fsPromises} from 'fs'; +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import { promises as fsPromises } from 'fs'; import * as path from 'path'; import rimraf from 'rimraf'; -const {readFile, writeFile, mkdir} = fsPromises; -const rimrafP = async (f: string): Promise => new Promise((resolve, reject) => - rimraf(f, (err) => { - if (err) return reject(err); - resolve(); - }) -); +import { fileHeader, readMeDisclaimer } from './consts'; +const { readFile, writeFile, mkdir } = fsPromises; +const rimrafP = async (f: string): Promise => + new Promise((resolve, reject) => + rimraf(f, (err) => { + if (err) return reject(err); + resolve(); + }) + ); declare global { interface String { matchAll(re: RegExp): RegExpExecArray[]; } } if (!String.prototype.matchAll) { - String.prototype.matchAll = function(re) { + String.prototype.matchAll = function (re) { const results: RegExpExecArray[] = []; let matches: RegExpExecArray | null; - while(matches = re.exec(this)) { + while ((matches = re.exec(this))) { results.push(matches); } return results; @@ -26,36 +45,45 @@ if (!String.prototype.matchAll) { interface BuilderExtension { preValidate: string; -}; +} /** Stores additional code that needs to be added to builders depending on their type */ const buildersExtensions: { [key: string]: BuilderExtension } = { - "Callbackstate": { - preValidate: `\r\n data.type = 'callback';` + Callbackstate: { + preValidate: `\r\n data.type = 'callback';`, }, - "Databasedswitch": { - preValidate: `\r\n data.type = 'switch';` + Databasedswitch: { + preValidate: `\r\n data.type = 'switch';`, }, - "Delaystate": { - preValidate: `\r\n data.type = 'delay';` + Delaystate: { + preValidate: `\r\n data.type = 'delay';`, }, - "Eventbasedswitch": { - preValidate: `\r\n data.type = 'switch';` + Eventbasedswitch: { + preValidate: `\r\n data.type = 'switch';`, }, - "Eventstate": { - preValidate: `\r\n data.type = 'event';` + Eventstate: { + preValidate: `\r\n data.type = 'event';`, }, - "Foreachstate": { - preValidate: `\r\n data.type = 'foreach';` + Foreachstate: { + preValidate: `\r\n data.type = 'foreach';`, }, - "Injectstate": { - preValidate: `\r\n data.type = 'inject';` + Injectstate: { + preValidate: `\r\n data.type = 'inject';`, }, - "Operationstate": { - preValidate: `\r\n data.type = 'operation';` + Operationstate: { + preValidate: `\r\n data.type = 'operation';`, + }, + Parallelstate: { + preValidate: `\r\n data.type = 'parallel';`, + }, + Subflowstate: { + preValidate: `\r\n data.type = 'subflow';`, + }, + Function: { + preValidate: `\r\n data.type = data.type || 'rest';`, + }, + Eventdef: { + preValidate: `\r\n data.kind = data.kind || 'consumed';`, }, - "Parallelstate": { - preValidate: `\r\n data.type = 'parallel';` - } }; /** @@ -96,12 +124,19 @@ const createBuilder = async (destDir: string, dataType: string): Promise = try { const camelType = toCamelCase(dataType); const extension = buildersExtensions[dataType]; - const builderCode = `import { DefinedError } from 'ajv'; + const builderCode = + fileHeader + + `import { DefinedError } from 'ajv'; import { Builder, builder } from '../builder'; import { Specification } from '../definitions'; import { validators } from '../validators'; -export function ${camelType}Validator(data: Specification.${dataType}): (() => Specification.${dataType}) { +/** + * The internal function used by the builder proxy to validate and return its underlying object + * @param {Specification.${dataType}} data The underlying object + * @returns {Specification.${dataType}} The validated underlying object + */ +function ${camelType}BuildingFn(data: Specification.${dataType}): (() => Specification.${dataType}) { return () => {${extension?.preValidate ? extension.preValidate : ''} const validate = validators.get('${dataType}'); // TODO: ignore validation if no validator or throw ? @@ -115,14 +150,17 @@ export function ${camelType}Validator(data: Specification.${dataType}): (() => S }; } +/** + * A factory to create a builder proxy for the type \`Specification.${dataType}\` + * @returns {Specification.${dataType}} A builder for \`Specification.${dataType}\` + */ export function ${camelType}Builder(): Builder { - return builder(${camelType}Validator); + return builder(${camelType}BuildingFn); }`; const destFile = path.resolve(destDir, toKebabCase(camelType) + '-builder.ts'); await writeFile(destFile, builderCode); return Promise.resolve(); - } - catch(ex) { + } catch (ex) { return Promise.reject(ex); } }; @@ -135,15 +173,16 @@ export function ${camelType}Builder(): Builder { */ const createIndex = async (destDir: string, types: string[]): Promise => { try { - const indexCode: string = types.reduce((acc, t) => acc + `export * from './${toKebabCase(toCamelCase(t)) + '-builder'}';\r\n`, ''); + const indexCode: string = + fileHeader + + types.reduce((acc, t) => acc + `export * from './${toKebabCase(toCamelCase(t)) + '-builder'}';\r\n`, ''); const indexFile = path.resolve(destDir, 'index.ts'); await writeFile(indexFile, indexCode); return Promise.resolve(); - } - catch(ex) { + } catch (ex) { return Promise.reject(ex); } -} +}; /** * Generates builders @@ -155,25 +194,18 @@ const generate = async (source: string, destDir: string): Promise => { try { await rimrafP(destDir); await mkdir(destDir, { recursive: true }); - await writeFile(path.resolve(destDir, 'README.md'), `# Auto generated notice -This directory and its content has been generated automatically. Do not modify its content, it WILL be lost.`); - const extractor: RegExp = /export \w* (\w*)/g; + await writeFile(path.resolve(destDir, 'README.md'), readMeDisclaimer); + const extractor: RegExp = /export \w* (\w*)/g; const definition: string = await readFile(source, 'utf-8'); - const types: string[] = [...definition.matchAll(extractor)].map(([capture, type]) => type); - await Promise.all( - types.map(createBuilder.bind(null, destDir)) - ); + const types: string[] = [...definition.matchAll(extractor)].map(([, type]) => type); + await Promise.all(types.map(createBuilder.bind(null, destDir))); createIndex(destDir, types); return Promise.resolve(); - } - catch(ex) { + } catch (ex) { return Promise.reject(ex); } }; const buildersDir = path.resolve(process.cwd(), 'src/lib/builders'); const definitionSrc = path.resolve(process.cwd(), 'src/lib/definitions/workflow.ts'); -generate(definitionSrc, buildersDir) - .then(console.log.bind(console)) - .catch(console.error.bind(console)) - ; \ No newline at end of file +generate(definitionSrc, buildersDir).then(console.log.bind(console)).catch(console.error.bind(console)); diff --git a/tools/generate-definitions.ts b/tools/generate-definitions.ts index 35bb567d..a160a22c 100644 --- a/tools/generate-definitions.ts +++ b/tools/generate-definitions.ts @@ -1,21 +1,40 @@ -import $RefParser from "@apidevtools/json-schema-ref-parser"; +/* + * Copyright 2021-Present The Serverless Workflow Specification Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * oUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +import $RefParser from '@apidevtools/json-schema-ref-parser'; import dtsGenerator, { JsonSchema as dtsGeneratorJsonSchema, parseSchema } from 'dtsgenerator'; -import {promises as fsPromises} from 'fs'; +import { promises as fsPromises } from 'fs'; import * as path from 'path'; import rimraf from 'rimraf'; -const {writeFile, mkdir} = fsPromises; -const rimrafP = async (f: string): Promise => new Promise((resolve, reject) => - rimraf(f, (err) => { - if (err) return reject(err); - resolve(); - }) -); +import { fileHeader, readMeDisclaimer } from './consts'; +const { writeFile, mkdir } = fsPromises; +const rimrafP = async (f: string): Promise => + new Promise((resolve, reject) => + rimraf(f, (err) => { + if (err) return reject(err); + resolve(); + }) + ); /** * Capitalized the first letter of the provided string * @param {} value The string to capitalize * @returns {string} The capitalized string */ -const capitalizeFirstLetter = (value: string):string => { +const capitalizeFirstLetter = (value: string): string => { if (!value) return ''; const transformable = value.trim(); return transformable[0].toUpperCase() + transformable.slice(1); @@ -38,17 +57,11 @@ const isRefExernal = (obj: any): boolean => obj && obj.$ref && !obj.$ref.startsW * @param {Map} known$Refs The know references map * @returns {string} The corrected property name */ -const getPropName = ($ref: string, known$Refs: Map): string => { +const getPropName = ($ref: string, known$Refs: Map): string => { const baseName = $ref.split('/').slice(-1)[0]; let propName = baseName; let variantIndex = 0; - while(true) { - if (!known$Refs.has(propName)) { - break; - } - if (known$Refs.get(propName) === $ref) { - break; - } + while (known$Refs.has(propName) && known$Refs.get(propName) !== $ref) { variantIndex++; propName = baseName + variantIndex; } @@ -62,10 +75,15 @@ const getPropName = ($ref: string, known$Refs: Map): string => * @param {Map} known$Refs The know references map * @param {string[]} parentPaths (internal) The previously known paths */ -const mergeDefinitions = async ($refParser: $RefParser, paths: string[], known$Refs: Map, parentPaths: string[] = []): Promise => { +const mergeDefinitions = async ( + $refParser: $RefParser, + paths: string[], + known$Refs: Map, + parentPaths: string[] = [] +): Promise => { try { if (!parentPaths?.length) { - Object.keys($refParser.schema.definitions||{}).forEach((key: string) => { + Object.keys($refParser.schema.definitions || {}).forEach((key: string) => { if (!known$Refs.has(key)) { known$Refs.set(key, `#/definitions/${key}`); } @@ -76,19 +94,18 @@ const mergeDefinitions = async ($refParser: $RefParser, paths: string[], known$R paths.map(async (schemaPath: string) => { const fileName = path.basename(schemaPath); const schema = await $RefParser.parse(schemaPath); - Object.entries(schema.definitions||{}).forEach(([key, value]) => { + Object.entries(schema.definitions || {}).forEach(([key, value]) => { const propName = getPropName(key, known$Refs); known$Refs.set(propName, `${fileName}#/definitions/${key}`); $refParser.$refs.set(`#/definitions/${propName}`, value); }); const $schemaRefs = await $RefParser.resolve(schemaPath); - const otherPaths = $schemaRefs.paths().filter(p => !parentPaths.includes(p)); - otherPaths.forEach(p => parentPaths.push(p)); + const otherPaths = $schemaRefs.paths().filter((p) => !parentPaths.includes(p)); + otherPaths.forEach((p) => parentPaths.push(p)); await mergeDefinitions($refParser, otherPaths, known$Refs, parentPaths); }) ); - } - catch(ex) { + } catch (ex) { return Promise.reject(ex); } }; @@ -100,14 +117,19 @@ const mergeDefinitions = async ($refParser: $RefParser, paths: string[], known$R * @param {any} target The object to crawl for references * @param {string} target$Ref The provided target reference path */ -const mergeSchemas = ($refParser: $RefParser, known$Refs: Map, target: any, target$Ref: string): void => { +const mergeSchemas = ( + $refParser: $RefParser, + known$Refs: Map, + target: any, + target$Ref: string +): void => { const isRootDocument = target$Ref.startsWith('#'); // todo ? handle circular refs ? Object.entries(target) - .filter(([key, value]: [string, any]) => value && typeof value === typeof {} && !ArrayBuffer.isView(value)) + .filter(([, value]: [string, any]) => value && typeof value === typeof {} && !ArrayBuffer.isView(value)) .forEach(([key, value]: [string, any]) => { if (!isRef(value) || (isRootDocument && !isRefExernal(value))) { - let newTargetRef = `${target$Ref.endsWith('/') ? target$Ref : target$Ref + '/'}${key}/`; + const newTargetRef = `${target$Ref.endsWith('/') ? target$Ref : target$Ref + '/'}${key}/`; mergeSchemas($refParser, known$Refs, value, newTargetRef); return; } @@ -122,8 +144,7 @@ const mergeSchemas = ($refParser: $RefParser, known$Refs: Map, t known$Refs.set(propName, value.$ref); value.$ref = `#/definitions/${propName}`; $refParser.$refs.set(`#/definitions/${propName}`, referencedSchema); - } - else if (!isRootDocument) { + } else if (!isRootDocument) { const document = target$Ref.split('#')[0]; const relative$Ref = document + value.$ref; const propName = getPropName(relative$Ref, known$Refs); @@ -148,18 +169,28 @@ const mergeSchemas = ($refParser: $RefParser, known$Refs: Map, t */ const createValidatorsPaths = async (dest: string, known$Refs: Map, baseUrl: string): Promise => { try { - const validatorsPathsCode = `export const validatorsPaths: [string, string][] = [ + const validatorsPathsCode = + fileHeader + + `/** +* A map of type names and their corresponding schema +*/ +export const validatorsPaths: [string, string][] = [ ['Workflow', '${baseUrl}/workflow.json'], -${Array.from(known$Refs).map(([dataType, path]) => ` ['${capitalizeFirstLetter(dataType)}', '${baseUrl}/${path.includes('.json') ? path : 'workflow.json' + path}'],`).join('\r\n')} +${Array.from(known$Refs) + .map( + ([dataType, path]) => + ` ['${capitalizeFirstLetter(dataType)}', '${baseUrl}/${ + path.includes('.json') ? path : 'workflow.json' + path + }'],` + ) + .join('\r\n')} ]`; const destDir = path.dirname(dest); await rimrafP(destDir); await mkdir(destDir, { recursive: true }); - await writeFile(path.resolve(destDir, 'README.md'), `# Auto generated notice -This directory and its content has been generated automatically. Do not modify its content, it WILL be lost.`); + await writeFile(path.resolve(destDir, 'README.md'), readMeDisclaimer); await writeFile(dest, validatorsPathsCode); - } - catch(ex) { + } catch (ex) { return Promise.reject(ex); } }; @@ -175,51 +206,52 @@ const generate = async (source: string, dest: string, additionnalSchemas: string const $refParser = new $RefParser(); const known$Refs = new Map(); await $refParser.resolve(source); - const paths = [ ...$refParser.$refs.paths(), ...additionnalSchemas ].filter((p, index, arr) => arr.indexOf(p) === index && p !== source); + const paths = [...$refParser.$refs.paths(), ...additionnalSchemas].filter( + (p, index, arr) => arr.indexOf(p) === index && p !== source + ); await mergeDefinitions($refParser, paths, known$Refs); mergeSchemas($refParser, known$Refs, $refParser.schema, '#/'); - let generatedTS = (await dtsGenerator({ + let generatedTS = ( + await dtsGenerator({ contents: [parseSchema($refParser.schema as dtsGeneratorJsonSchema)], config: { plugins: { - "@dtsgenerator/replace-namespace": { + '@dtsgenerator/replace-namespace': { map: [ { - from: ["ServerlessworkflowOrg", "Core", true, "WorkflowJson"], - to: ["ServerlessWorkflow"] + from: ['ServerlessworkflowOrg', 'Core', true, 'WorkflowJson'], + to: ['ServerlessWorkflow'], }, { - from: ["ServerlessworkflowOrg", "Core", true, "WorkflowJson", "Definitions"], - to: ["ServerlessWorkflow"] + from: ['ServerlessworkflowOrg', 'Core', true, 'WorkflowJson', 'Definitions'], + to: ['ServerlessWorkflow'], }, { - from: ["ServerlessworkflowOrg", "Core", true, "Definitions"], - to: ["ServerlessWorkflow"] - } - ] - } - } - } - })) + from: ['ServerlessworkflowOrg', 'Core', true, 'Definitions'], + to: ['ServerlessWorkflow'], + }, + ], + }, + }, + }, + }) + ) .replace(/WorkflowJson\.Definitions\./g, '') - .replace(/WorkflowJson/g, 'Workflow') - ; + .replace(/WorkflowJson/g, 'Workflow'); const lines = generatedTS.split('\n'); generatedTS = lines.slice(1, lines.length - 2).join('\n'); // removes 'declare namespace' and keeps 'exports'. const destDir = path.dirname(dest); await rimrafP(destDir); await mkdir(destDir, { recursive: true }); - await writeFile(path.resolve(destDir, 'README.md'), `# Auto generated notice -This directory and its content has been generated automatically. Do not modify its content, it WILL be lost.`); - await writeFile(dest, generatedTS); - await writeFile(path.resolve(destDir, 'index.ts'), "export * as Specification from './workflow';"); + await writeFile(path.resolve(destDir, 'README.md'), readMeDisclaimer); + await writeFile(dest, fileHeader + generatedTS); + await writeFile(path.resolve(destDir, 'index.ts'), fileHeader + "export * as Specification from './workflow';"); const validatorsDest = path.resolve(path.dirname(dest), '../validation/validators-paths.ts'); const $id = $refParser.schema.$id; const baseUrl = path.dirname($id); await createValidatorsPaths(validatorsDest, known$Refs, baseUrl); return Promise.resolve(); - } - catch (ex) { + } catch (ex) { return Promise.reject(ex); } }; @@ -233,7 +265,4 @@ const additionnalSchemas = [ ]; generate(srcFile, destFile, additionnalSchemas) */ -generate(srcFile, destFile) - .then(console.log.bind(console)) - .catch(console.error.bind(console)) - ; +generate(srcFile, destFile).then(console.log.bind(console)).catch(console.error.bind(console)); diff --git a/tools/tsconfig.json b/tools/tsconfig.json index 4eb37fee..11ebcfb5 100644 --- a/tools/tsconfig.json +++ b/tools/tsconfig.json @@ -1,3 +1,3 @@ -{ - "extends": "../tsconfig.base.json" -} +{ + "extends": "../tsconfig.base.json" +} diff --git a/tsconfig.base.json b/tsconfig.base.json index 8ad6ddf4..7e84fbd8 100644 --- a/tsconfig.base.json +++ b/tsconfig.base.json @@ -1,17 +1,17 @@ -{ - "compilerOptions": { - "target": "ES2015", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ - "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ - "lib": [ "ES2019", "DOM" ], /* Specify library files to be included in the compilation. */ - "declaration": true, /* Generates corresponding '.d.ts' file. */ - "sourceMap": true, /* Generates corresponding '.map' file. */ - "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ - "strictNullChecks": true, /* Enable strict null checks. */ - "noUnusedLocals": true, /* Report errors on unused locals. */ - "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ - "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ - "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ - "forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */ - "resolveJsonModule": true - } -} +{ + "compilerOptions": { + "target": "ES2015", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */ + "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */ + "lib": [ "ES2019", "DOM" ], /* Specify library files to be included in the compilation. */ + "declaration": true, /* Generates corresponding '.d.ts' file. */ + "sourceMap": true, /* Generates corresponding '.map' file. */ + "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + "strictNullChecks": true, /* Enable strict null checks. */ + "noUnusedLocals": true, /* Report errors on unused locals. */ + "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */ + "esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ + "forceConsistentCasingInFileNames": true, /* Disallow inconsistently-cased references to the same file. */ + "resolveJsonModule": true + } +} diff --git a/tsconfig.json b/tsconfig.json index e5510c7c..5480b455 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,12 +1,12 @@ -{ - "extends": "./tsconfig.base.json", - "compilerOptions": { - "declarationDir": "./dist", - "declarationMap": true, - "target": "ES5", - "module": "ES2015" - }, - "include": [ - "./src/**/*.ts", - ] -} +{ + "extends": "./tsconfig.base.json", + "compilerOptions": { + "declarationDir": "./dist", + "declarationMap": true, + "target": "ES5", + "module": "ES2015" + }, + "include": [ + "./src/**/*.ts", + ] +}