From 815852cdd14280d360a7929a5d3a1e131974bf19 Mon Sep 17 00:00:00 2001 From: Ashish Padhy <100484401+Shurtu-gal@users.noreply.github.com> Date: Mon, 2 Oct 2023 10:47:01 +0530 Subject: [PATCH] fix: switch from jest to mocha (#823) --- package-lock.json | 2500 +++++++---------- package.json | 14 +- test/helpers/index.ts | 11 +- test/helpers/init.js | 8 + test/integration/bundle/bundle.test.ts | 20 +- test/integration/config/versions.test.ts | 14 +- test/integration/context.test.ts | 87 +- test/integration/convert.test.ts | 51 +- test/integration/diff.test.ts | 76 +- .../integration/generate/fromTemplate.test.ts | 32 +- test/integration/generate/models.test.ts | 146 +- test/integration/new/file.test.ts | 19 +- test/integration/new/glee.test.ts | 15 +- test/integration/new/project.test.ts | 15 +- test/integration/optimize.test.ts | 47 +- test/integration/validate.test.ts | 87 +- test/tsconfig.json | 11 + 17 files changed, 1348 insertions(+), 1805 deletions(-) create mode 100644 test/helpers/init.js create mode 100644 test/tsconfig.json diff --git a/package-lock.json b/package-lock.json index ee34ff051d6..469c85bca1e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -51,16 +51,14 @@ "devDependencies": { "@asyncapi/minimaltemplate": "./test/fixtures/minimaltemplate", "@babel/core": "^7.19.3", - "@jest/types": "^29.1.0", "@oclif/test": "^2", "@swc/core": "^1.3.2", - "@swc/jest": "^0.2.22", - "@types/chai": "^4.3.3", + "@types/chai": "^4.3.6", "@types/fs-extra": "^11.0.1", "@types/inquirer": "^8.1.3", - "@types/jest": "^29.0.3", "@types/js-yaml": "^4.0.5", "@types/lodash.template": "^4.4.4", + "@types/mocha": "^10.0.2", "@types/node": "^10.17.60", "@types/node-fetch": "^2.5.12", "@types/rimraf": "^3.0.2", @@ -79,8 +77,9 @@ "eslint-plugin-security": "^1.4.0", "eslint-plugin-sonarjs": "^0.15.0", "globby": "^10.0.2", - "jest": "^29.1.0", "markdown-toc": "^1.2.0", + "mocha": "^10.2.0", + "nyc": "^15.1.0", "react": "^16.14.0", "react-dom": "^16.14.0", "rimraf": "^3.0.2", @@ -2318,17 +2317,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-class-properties": { "version": "7.12.13", "license": "MIT", @@ -2517,20 +2505,6 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, "node_modules/@babel/plugin-syntax-unicode-sets-regex": { "version": "7.18.6", "license": "MIT", @@ -3464,11 +3438,6 @@ "node": ">=6.9.0" } }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "dev": true, - "license": "MIT" - }, "node_modules/@cspotcode/source-map-support": { "version": "0.8.1", "license": "MIT", @@ -3904,68 +3873,6 @@ "node": ">=8" } }, - "node_modules/@jest/console": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.6.3", - "@jest/reporters": "^29.6.3", - "@jest/test-result": "^29.6.3", - "@jest/transform": "^29.6.3", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.6.3", - "jest-config": "^29.6.3", - "jest-haste-map": "^29.6.3", - "jest-message-util": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.6.3", - "jest-resolve-dependencies": "^29.6.3", - "jest-runner": "^29.6.3", - "jest-runtime": "^29.6.3", - "jest-snapshot": "^29.6.3", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "jest-watcher": "^29.6.3", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.3", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, "node_modules/@jest/create-cache-key-function": { "version": "27.5.1", "license": "MIT", @@ -3997,225 +3904,6 @@ "@types/yargs-parser": "*" } }, - "node_modules/@jest/environment": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^29.6.3", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.6.3", - "jest-snapshot": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-get-type": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.6.3", - "jest-mock": "^29.6.3", - "jest-util": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.6.3", - "@jest/expect": "^29.6.3", - "@jest/types": "^29.6.3", - "jest-mock": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.6.3", - "@jest/test-result": "^29.6.3", - "@jest/transform": "^29.6.3", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", - "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", - "jest-worker": "^29.6.3", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.6.3", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.6.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.3", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.6.3", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform/node_modules/convert-source-map": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/transform/node_modules/write-file-atomic": { - "version": "4.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "license": "MIT", @@ -5760,11 +5448,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "dev": true, - "license": "MIT" - }, "node_modules/@sindresorhus/is": { "version": "4.6.0", "license": "MIT", @@ -5775,22 +5458,6 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/@sinonjs/commons": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, "node_modules/@smoya/multi-parser": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@smoya/multi-parser/-/multi-parser-3.0.0.tgz", @@ -6337,8 +6004,9 @@ }, "node_modules/@types/babel__core": { "version": "7.20.1", - "devOptional": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/parser": "^7.20.7", "@babel/types": "^7.20.7", @@ -6349,16 +6017,18 @@ }, "node_modules/@types/babel__generator": { "version": "7.6.4", - "devOptional": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/types": "^7.0.0" } }, "node_modules/@types/babel__template": { "version": "7.4.1", - "devOptional": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/parser": "^7.1.0", "@babel/types": "^7.0.0" @@ -6366,8 +6036,9 @@ }, "node_modules/@types/babel__traverse": { "version": "7.20.1", - "devOptional": true, "license": "MIT", + "optional": true, + "peer": true, "dependencies": { "@babel/types": "^7.20.7" } @@ -6383,9 +6054,10 @@ } }, "node_modules/@types/chai": { - "version": "4.3.5", - "dev": true, - "license": "MIT" + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz", + "integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==", + "dev": true }, "node_modules/@types/cli-progress": { "version": "3.11.0", @@ -6629,14 +6301,6 @@ "@types/node": "*" } }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/http-cache-semantics": { "version": "4.0.1", "license": "MIT" @@ -6668,15 +6332,6 @@ "@types/istanbul-lib-report": "*" } }, - "node_modules/@types/jest": { - "version": "29.5.4", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, "node_modules/@types/js-yaml": { "version": "4.0.5", "dev": true, @@ -6724,6 +6379,12 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/mocha": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.2.tgz", + "integrity": "sha512-NaHL0+0lLNhX6d9rs+NSt97WH/gIlRHmszXbQ/8/MV/eVcFNdeJ/GYhrFuUc8K7WuPhRhTSdMkCp8VMzhUq85w==", + "dev": true + }, "node_modules/@types/node": { "version": "10.17.60", "license": "MIT" @@ -6791,11 +6452,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, "node_modules/@types/through": { "version": "0.0.30", "dev": true, @@ -6833,14 +6489,6 @@ "@types/node": "*" } }, - "node_modules/@types/yargs": { - "version": "17.0.24", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, "node_modules/@types/yargs-parser": { "version": "21.0.0", "license": "MIT" @@ -7434,10 +7082,28 @@ "node": ">= 8" } }, + "node_modules/append-transform": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz", + "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==", + "dev": true, + "dependencies": { + "default-require-extensions": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/aproba": { "version": "1.2.0", "license": "ISC" }, + "node_modules/archy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz", + "integrity": "sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==", + "dev": true + }, "node_modules/are-we-there-yet": { "version": "1.1.7", "license": "ISC", @@ -7748,88 +7414,16 @@ "dequal": "^2.0.3" } }, - "node_modules/babel-jest": { - "version": "29.6.3", - "dev": true, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.5", "license": "MIT", "dependencies": { - "@jest/transform": "^29.6.3", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.6.3", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" }, "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-istanbul/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-plugin-polyfill-corejs2": { - "version": "0.4.5", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-define-polyfill-provider": "^0.4.2", - "semver": "^6.3.1" - }, - "peerDependencies": { - "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" } }, "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { @@ -7867,43 +7461,6 @@ "@babel/helper-module-imports": "^7.16.7" } }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "license": "MIT" @@ -8064,6 +7621,12 @@ "version": "1.0.0", "license": "BSD-2-Clause" }, + "node_modules/browser-stdout": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", + "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", + "dev": true + }, "node_modules/browserslist": { "version": "4.21.10", "funding": [ @@ -8094,14 +7657,6 @@ "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/bser": { - "version": "2.1.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, "node_modules/buffer": { "version": "4.9.2", "license": "MIT", @@ -8234,6 +7789,45 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/caching-transform": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz", + "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==", + "dev": true, + "dependencies": { + "hasha": "^5.0.0", + "make-dir": "^3.0.0", + "package-hash": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/caching-transform/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/caching-transform/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/call-bind": { "version": "1.0.2", "license": "MIT", @@ -8381,14 +7975,6 @@ "tslib": "^2.0.3" } }, - "node_modules/char-regex": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, "node_modules/chardet": { "version": "0.7.0", "license": "MIT" @@ -8447,11 +8033,6 @@ "node": ">=8" } }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "dev": true, - "license": "MIT" - }, "node_modules/classcat": { "version": "5.0.4", "license": "MIT" @@ -8664,11 +8245,6 @@ "node": ">=0.8.0" } }, - "node_modules/collect-v8-coverage": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, "node_modules/color-convert": { "version": "2.0.1", "license": "MIT", @@ -9064,6 +8640,15 @@ "node": "*" } }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/decimal.js": { "version": "10.4.3", "license": "MIT" @@ -9091,19 +8676,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dedent": { - "version": "1.5.1", - "dev": true, - "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, "node_modules/deep-eql": { "version": "4.1.3", "dev": true, @@ -9127,14 +8699,6 @@ "dev": true, "license": "MIT" }, - "node_modules/deepmerge": { - "version": "4.3.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/default-browser": { "version": "4.0.0", "dev": true, @@ -9269,6 +8833,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/default-require-extensions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.1.tgz", + "integrity": "sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==", + "dev": true, + "dependencies": { + "strip-bom": "^4.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/defaults": { "version": "1.0.4", "license": "MIT", @@ -9337,14 +8916,6 @@ "node": ">=6" } }, - "node_modules/detect-newline": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/dezalgo": { "version": "1.0.4", "license": "ISC", @@ -9368,14 +8939,6 @@ "node": ">=0.3.1" } }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/dir-glob": { "version": "3.0.1", "license": "MIT", @@ -9472,17 +9035,6 @@ "version": "1.4.499", "license": "ISC" }, - "node_modules/emittery": { - "version": "0.13.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, "node_modules/emoji-regex": { "version": "9.2.2", "license": "MIT" @@ -9659,6 +9211,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es6-error": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", + "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", + "dev": true + }, "node_modules/escalade": { "version": "3.1.1", "license": "MIT", @@ -11188,13 +10746,6 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/exit": { - "version": "0.1.2", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, "node_modules/expand-range": { "version": "1.8.2", "dev": true, @@ -11232,21 +10783,6 @@ "node": ">=0.10.0" } }, - "node_modules/expect": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "^29.6.3", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.6.3", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, "node_modules/exponential-backoff": { "version": "3.1.1", "license": "Apache-2.0" @@ -11371,14 +10907,6 @@ "reusify": "^1.0.4" } }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, "node_modules/figures": { "version": "3.2.0", "license": "MIT", @@ -11466,6 +10994,47 @@ "node": ">=8" } }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "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-cache-dir/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/find-cache-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/find-up": { "version": "5.0.0", "license": "MIT", @@ -11505,6 +11074,15 @@ "node": ">=0.10.0" } }, + "node_modules/flat": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", + "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", + "dev": true, + "bin": { + "flat": "cli.js" + } + }, "node_modules/flat-cache": { "version": "3.0.4", "dev": true, @@ -11597,6 +11175,26 @@ "node": ">= 6" } }, + "node_modules/fromentries": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", + "integrity": "sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==", + "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/fs-extra": { "version": "11.1.1", "license": "MIT", @@ -12188,16 +11786,50 @@ "version": "2.0.1", "license": "ISC" }, - "node_modules/header-case": { - "version": "2.0.4", - "license": "MIT", + "node_modules/hasha": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.2.tgz", + "integrity": "sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==", + "dev": true, "dependencies": { - "capital-case": "^1.0.4", - "tslib": "^2.0.3" + "is-stream": "^2.0.0", + "type-fest": "^0.8.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/highlight.js": { - "version": "10.7.3", + "node_modules/hasha/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/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/header-case": { + "version": "2.0.4", + "license": "MIT", + "dependencies": { + "capital-case": "^1.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/highlight.js": { + "version": "10.7.3", "license": "BSD-3-Clause", "engines": { "node": "*" @@ -12407,24 +12039,6 @@ "node": ">=4" } }, - "node_modules/import-local": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "license": "MIT", @@ -12670,14 +12284,6 @@ "node": ">=8" } }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/is-generator-function": { "version": "1.0.10", "license": "MIT", @@ -12938,6 +12544,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/is-wsl": { "version": "2.2.0", "license": "MIT", @@ -12994,19 +12609,54 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.0", + "node_modules/istanbul-lib-hook": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz", + "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", + "append-transform": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.3.tgz", + "integrity": "sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==", + "dev": true, + "dependencies": { + "archy": "^1.0.0", + "cross-spawn": "^7.0.3", "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" + "p-map": "^3.0.0", + "rimraf": "^3.0.0", + "uuid": "^8.3.2" }, "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-processinfo/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" } }, "node_modules/istanbul-lib-report": { @@ -13090,689 +12740,166 @@ "node": ">=10" } }, - "node_modules/jest": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.6.3", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.6.3" - }, - "bin": { - "jest": "bin/jest.js" - }, + "node_modules/jmespath": { + "version": "0.15.0", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "node": ">= 0.6.0" } }, - "node_modules/jest-changed-files": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.0.0", - "jest-util": "^29.6.3", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "node_modules/js-base64": { + "version": "3.7.5", + "license": "BSD-3-Clause" }, - "node_modules/jest-circus": { - "version": "29.6.3", - "dev": true, + "node_modules/js-file-download": { + "version": "0.4.12", + "license": "MIT" + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", "license": "MIT", "dependencies": { - "@jest/environment": "^29.6.3", - "@jest/expect": "^29.6.3", - "@jest/test-result": "^29.6.3", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^1.0.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.3", - "jest-matcher-utils": "^29.6.3", - "jest-message-util": "^29.6.3", - "jest-runtime": "^29.6.3", - "jest-snapshot": "^29.6.3", - "jest-util": "^29.6.3", - "p-limit": "^3.1.0", - "pretty-format": "^29.6.3", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" + "argparse": "^2.0.1" }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jest-cli": { - "version": "29.6.3", - "dev": true, + "node_modules/jsbn": { + "version": "0.1.1", + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "16.7.0", "license": "MIT", "dependencies": { - "@jest/core": "^29.6.3", - "@jest/test-result": "^29.6.3", - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.6.3", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" }, "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "canvas": "^2.5.0" }, "peerDependenciesMeta": { - "node-notifier": { + "canvas": { "optional": true } } }, - "node_modules/jest-config": { - "version": "29.6.3", - "dev": true, + "node_modules/jsdom/node_modules/ws": { + "version": "7.5.9", "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.3", - "@jest/types": "^29.6.3", - "babel-jest": "^29.6.3", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "deepmerge": "^4.2.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-circus": "^29.6.3", - "jest-environment-node": "^29.6.3", - "jest-get-type": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.6.3", - "jest-runner": "^29.6.3", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.6.3", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8.3.0" }, "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" }, "peerDependenciesMeta": { - "@types/node": { + "bufferutil": { "optional": true }, - "ts-node": { + "utf-8-validate": { "optional": true } } }, - "node_modules/jest-diff": { - "version": "29.6.3", - "dev": true, + "node_modules/jsep": { + "version": "1.3.8", "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.6.3" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">= 10.16.0" } }, - "node_modules/jest-docblock": { - "version": "29.6.3", - "dev": true, + "node_modules/jsesc": { + "version": "2.5.2", "license": "MIT", - "dependencies": { - "detect-newline": "^3.0.0" + "bin": { + "jsesc": "bin/jsesc" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=4" } }, - "node_modules/jest-each": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "jest-util": "^29.6.3", - "pretty-format": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "node_modules/json-buffer": { + "version": "3.0.1", + "license": "MIT" }, - "node_modules/jest-environment-node": { - "version": "29.6.3", - "dev": true, - "license": "MIT", + "node_modules/json-e": { + "version": "4.5.3", + "license": "MPL-2.0", "dependencies": { - "@jest/environment": "^29.6.3", - "@jest/fake-timers": "^29.6.3", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.6.3", - "jest-util": "^29.6.3" + "json-stable-stringify-without-jsonify": "^1.0.1" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/jest-get-type": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "license": "MIT" }, - "node_modules/jest-haste-map": { - "version": "29.6.3", - "dev": true, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "license": "MIT" + }, + "node_modules/json-pointer": { + "version": "0.6.2", "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/graceful-fs": "^4.1.3", - "@types/node": "*", - "anymatch": "^3.0.3", - "fb-watchman": "^2.0.0", - "graceful-fs": "^4.2.9", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.6.3", - "jest-worker": "^29.6.3", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" + "foreach": "^2.0.4" } }, - "node_modules/jest-leak-detector": { - "version": "29.6.3", - "dev": true, + "node_modules/json-schema": { + "version": "0.4.0", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-migrate": { + "version": "0.2.0", "license": "MIT", "dependencies": { - "jest-get-type": "^29.6.3", - "pretty-format": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "ajv": "^5.0.0" } }, - "node_modules/jest-matcher-utils": { - "version": "29.6.3", - "dev": true, + "node_modules/json-schema-migrate/node_modules/ajv": { + "version": "5.5.2", "license": "MIT", "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.3", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.3", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-util": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.3", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.3", - "jest-validate": "^29.6.3", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-regex-util": "^29.6.3", - "jest-snapshot": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "^29.6.3", - "@jest/environment": "^29.6.3", - "@jest/test-result": "^29.6.3", - "@jest/transform": "^29.6.3", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.6.3", - "jest-environment-node": "^29.6.3", - "jest-haste-map": "^29.6.3", - "jest-leak-detector": "^29.6.3", - "jest-message-util": "^29.6.3", - "jest-resolve": "^29.6.3", - "jest-runtime": "^29.6.3", - "jest-util": "^29.6.3", - "jest-watcher": "^29.6.3", - "jest-worker": "^29.6.3", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner/node_modules/source-map-support": { - "version": "0.5.13", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "^29.6.3", - "@jest/fake-timers": "^29.6.3", - "@jest/globals": "^29.6.3", - "@jest/source-map": "^29.6.3", - "@jest/test-result": "^29.6.3", - "@jest/transform": "^29.6.3", - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "cjs-module-lexer": "^1.0.0", - "collect-v8-coverage": "^1.0.0", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.3", - "jest-message-util": "^29.6.3", - "jest-mock": "^29.6.3", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.6.3", - "jest-snapshot": "^29.6.3", - "jest-util": "^29.6.3", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@babel/generator": "^7.7.2", - "@babel/plugin-syntax-jsx": "^7.7.2", - "@babel/plugin-syntax-typescript": "^7.7.2", - "@babel/types": "^7.3.3", - "@jest/expect-utils": "^29.6.3", - "@jest/transform": "^29.6.3", - "@jest/types": "^29.6.3", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.6.3", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.3", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.6.3", - "jest-message-util": "^29.6.3", - "jest-util": "^29.6.3", - "natural-compare": "^1.4.0", - "pretty-format": "^29.6.3", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-util": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "^29.6.3", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.6.3", - "leven": "^3.1.0", - "pretty-format": "^29.6.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "^29.6.3", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.6.3", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-util": "^29.6.3", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jmespath": { - "version": "0.15.0", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/js-base64": { - "version": "3.7.5", - "license": "BSD-3-Clause" - }, - "node_modules/js-file-download": { - "version": "0.4.12", - "license": "MIT" - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "license": "MIT" - }, - "node_modules/jsdom": { - "version": "16.7.0", - "license": "MIT", - "dependencies": { - "abab": "^2.0.5", - "acorn": "^8.2.4", - "acorn-globals": "^6.0.0", - "cssom": "^0.4.4", - "cssstyle": "^2.3.0", - "data-urls": "^2.0.0", - "decimal.js": "^10.2.1", - "domexception": "^2.0.1", - "escodegen": "^2.0.0", - "form-data": "^3.0.0", - "html-encoding-sniffer": "^2.0.1", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.0", - "parse5": "6.0.1", - "saxes": "^5.0.1", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.0.0", - "w3c-hr-time": "^1.0.2", - "w3c-xmlserializer": "^2.0.0", - "webidl-conversions": "^6.1.0", - "whatwg-encoding": "^1.0.5", - "whatwg-mimetype": "^2.3.0", - "whatwg-url": "^8.5.0", - "ws": "^7.4.6", - "xml-name-validator": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/ws": { - "version": "7.5.9", - "license": "MIT", - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/jsep": { - "version": "1.3.8", - "license": "MIT", - "engines": { - "node": ">= 10.16.0" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "license": "MIT" - }, - "node_modules/json-e": { - "version": "4.5.3", - "license": "MPL-2.0", - "dependencies": { - "json-stable-stringify-without-jsonify": "^1.0.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "license": "MIT" - }, - "node_modules/json-pointer": { - "version": "0.6.2", - "license": "MIT", - "dependencies": { - "foreach": "^2.0.4" - } - }, - "node_modules/json-schema": { - "version": "0.4.0", - "license": "(AFL-2.1 OR BSD-3-Clause)" - }, - "node_modules/json-schema-migrate": { - "version": "0.2.0", - "license": "MIT", - "dependencies": { - "ajv": "^5.0.0" - } - }, - "node_modules/json-schema-migrate/node_modules/ajv": { - "version": "5.5.2", - "license": "MIT", - "dependencies": { - "co": "^4.6.0", - "fast-deep-equal": "^1.0.0", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.3.0" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, "node_modules/json-schema-migrate/node_modules/fast-deep-equal": { @@ -13921,14 +13048,6 @@ "node": ">=0.10.0" } }, - "node_modules/kleur": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/language-subtag-registry": { "version": "0.3.22", "dev": true, @@ -14091,6 +13210,12 @@ "version": "4.0.8", "license": "MIT" }, + "node_modules/lodash.flattendeep": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", + "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", + "dev": true + }, "node_modules/lodash.kebabcase": { "version": "4.1.1", "dev": true, @@ -14264,14 +13389,6 @@ "version": "4.0.0", "license": "ISC" }, - "node_modules/makeerror": { - "version": "1.0.12", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tmpl": "1.0.5" - } - }, "node_modules/markdown-it": { "version": "12.3.2", "license": "MIT", @@ -14611,72 +13728,216 @@ "yallist": "^4.0.0" }, "engines": { - "node": ">= 8" + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-object": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "for-in": "^0.1.3", + "is-extendable": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-object/node_modules/for-in": { + "version": "0.1.8", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-infer-owner": { + "version": "2.0.0", + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mocha": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", + "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", + "dev": true, + "dependencies": { + "ansi-colors": "4.1.1", + "browser-stdout": "1.3.1", + "chokidar": "3.5.3", + "debug": "4.3.4", + "diff": "5.0.0", + "escape-string-regexp": "4.0.0", + "find-up": "5.0.0", + "glob": "7.2.0", + "he": "1.2.0", + "js-yaml": "4.1.0", + "log-symbols": "4.1.0", + "minimatch": "5.0.1", + "ms": "2.1.3", + "nanoid": "3.3.3", + "serialize-javascript": "6.0.0", + "strip-json-comments": "3.1.1", + "supports-color": "8.1.1", + "workerpool": "6.2.1", + "yargs": "16.2.0", + "yargs-parser": "20.2.4", + "yargs-unparser": "2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "engines": { + "node": ">= 14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mochajs" + } + }, + "node_modules/mocha/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/minizlib/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" + "node_modules/mocha/node_modules/diff": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", + "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } }, - "node_modules/mixin-deep": { - "version": "1.3.2", + "node_modules/mocha/node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, - "license": "MIT", "dependencies": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" + "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": ">=0.10.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mixin-deep/node_modules/is-extendable": { - "version": "1.0.1", + "node_modules/mocha/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "MIT", "dependencies": { - "is-plain-object": "^2.0.4" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/mixin-object": { - "version": "2.0.1", - "license": "MIT", + "node_modules/mocha/node_modules/minimatch": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", + "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", + "dev": true, "dependencies": { - "for-in": "^0.1.3", - "is-extendable": "^0.1.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/mixin-object/node_modules/for-in": { - "version": "0.1.8", - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "node_modules/mocha/node_modules/minimatch/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "node_modules/mocha/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mocha/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "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": ">=10" } }, - "node_modules/mkdirp-infer-owner": { - "version": "2.0.0", - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" - }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, "engines": { "node": ">=10" } @@ -14787,6 +14048,18 @@ "version": "0.0.8", "license": "ISC" }, + "node_modules/nanoid": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", + "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", + "dev": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "dev": true, @@ -14913,10 +14186,17 @@ "node": ">= 10.12.0" } }, - "node_modules/node-int64": { - "version": "0.4.0", + "node_modules/node-preload": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz", + "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==", "dev": true, - "license": "MIT" + "dependencies": { + "process-on-spawn": "^1.0.0" + }, + "engines": { + "node": ">=8" + } }, "node_modules/node-releases": { "version": "2.0.13", @@ -15066,40 +14346,263 @@ "node": ">=0.10.0" } }, - "node_modules/nunjucks": { - "version": "3.2.4", - "license": "BSD-2-Clause", + "node_modules/nunjucks": { + "version": "3.2.4", + "license": "BSD-2-Clause", + "dependencies": { + "a-sync-waterfall": "^1.0.0", + "asap": "^2.0.3", + "commander": "^5.1.0" + }, + "bin": { + "nunjucks-precompile": "bin/precompile" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "chokidar": "^3.3.0" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/nunjucks/node_modules/commander": { + "version": "5.1.0", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/nwsapi": { + "version": "2.2.7", + "license": "MIT" + }, + "node_modules/nyc": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", + "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==", + "dev": true, + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/nyc/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/nyc/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/nyc/node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/nyc/node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz", + "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/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/nyc/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/nyc/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/nyc/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/nyc/node_modules/p-map": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nyc/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/nyc/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/nyc/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "node_modules/nyc/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, "dependencies": { - "a-sync-waterfall": "^1.0.0", - "asap": "^2.0.3", - "commander": "^5.1.0" - }, - "bin": { - "nunjucks-precompile": "bin/precompile" + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" }, "engines": { - "node": ">= 6.9.0" - }, - "peerDependencies": { - "chokidar": "^3.3.0" - }, - "peerDependenciesMeta": { - "chokidar": { - "optional": true - } + "node": ">=8" } }, - "node_modules/nunjucks/node_modules/commander": { - "version": "5.1.0", - "license": "MIT", + "node_modules/nyc/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, "engines": { - "node": ">= 6" + "node": ">=6" } }, - "node_modules/nwsapi": { - "version": "2.2.7", - "license": "MIT" - }, "node_modules/oauth-sign": { "version": "0.9.0", "license": "Apache-2.0", @@ -15589,6 +15092,21 @@ "node": ">=6" } }, + "node_modules/package-hash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz", + "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "hasha": "^5.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/pacote": { "version": "11.3.5", "license": "ISC", @@ -15951,14 +15469,6 @@ "node": ">=0.10.0" } }, - "node_modules/pirates": { - "version": "4.0.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/pkg-dir": { "version": "4.2.0", "license": "MIT", @@ -16084,30 +15594,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pretty-format": { - "version": "29.6.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, "node_modules/printable-characters": { "version": "1.0.42", "license": "Unlicense" @@ -16127,6 +15613,18 @@ "version": "2.0.1", "license": "MIT" }, + "node_modules/process-on-spawn": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz", + "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==", + "dev": true, + "dependencies": { + "fromentries": "^1.2.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/progress": { "version": "2.0.3", "dev": true, @@ -16165,18 +15663,6 @@ "node": ">=10" } }, - "node_modules/prompts": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/prop-types": { "version": "15.8.1", "license": "MIT", @@ -16222,21 +15708,6 @@ "version": "1.4.1", "license": "MIT" }, - "node_modules/pure-rand": { - "version": "6.0.2", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, "node_modules/q": { "version": "1.5.1", "license": "MIT", @@ -16363,6 +15834,15 @@ "node": ">=0.10.0" } }, + "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/range-parser": { "version": "1.2.0", "license": "MIT", @@ -16416,11 +15896,6 @@ "react": "*" } }, - "node_modules/react-is": { - "version": "18.2.0", - "dev": true, - "license": "MIT" - }, "node_modules/read-cmd-shim": { "version": "2.0.0", "license": "ISC" @@ -16790,6 +16265,18 @@ "jsesc": "bin/jsesc" } }, + "node_modules/release-zalgo": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz", + "integrity": "sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==", + "dev": true, + "dependencies": { + "es6-error": "^4.0.1" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/remarkable": { "version": "1.7.4", "dev": true, @@ -16920,6 +16407,12 @@ "node": ">=0.10.0" } }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, "node_modules/requires-port": { "version": "1.0.0", "license": "MIT" @@ -16949,17 +16442,6 @@ "version": "1.2.1", "license": "MIT" }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/resolve-from": { "version": "5.0.0", "license": "MIT", @@ -16977,14 +16459,6 @@ "node": ">=8" } }, - "node_modules/resolve.exports": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, "node_modules/responselike": { "version": "2.0.1", "license": "MIT", @@ -17213,6 +16687,15 @@ "upper-case-first": "^2.0.2" } }, + "node_modules/serialize-javascript": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", + "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, "node_modules/serve-handler": { "version": "6.1.5", "license": "MIT", @@ -17618,11 +17101,6 @@ "url": "https://github.com/steveukx/git-js?sponsor=1" } }, - "node_modules/sisteransi": { - "version": "1.0.5", - "dev": true, - "license": "MIT" - }, "node_modules/slash": { "version": "3.0.0", "license": "MIT", @@ -17725,6 +17203,60 @@ "version": "0.0.2-1", "license": "MIT" }, + "node_modules/spawn-wrap": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz", + "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==", + "dev": true, + "dependencies": { + "foreground-child": "^2.0.0", + "is-windows": "^1.0.2", + "make-dir": "^3.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "which": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/spawn-wrap/node_modules/foreground-child": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz", + "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/spawn-wrap/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/spawn-wrap/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/spdx-correct": { "version": "3.2.0", "license": "Apache-2.0", @@ -17786,25 +17318,6 @@ "node": ">= 8" } }, - "node_modules/stack-utils": { - "version": "2.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/stacktracey": { "version": "2.1.8", "license": "Unlicense", @@ -17836,18 +17349,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/string-length": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/string-width": { "version": "4.2.3", "license": "MIT", @@ -18209,11 +17710,6 @@ "node": ">=0.6.0" } }, - "node_modules/tmpl": { - "version": "1.0.5", - "dev": true, - "license": "BSD-3-Clause" - }, "node_modules/to-fast-properties": { "version": "2.0.0", "license": "MIT", @@ -19073,19 +18569,6 @@ "version": "3.0.1", "license": "MIT" }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "license": "Apache-2.0", @@ -19193,14 +18676,6 @@ "version": "1.0.0", "license": "ISC" }, - "node_modules/walker": { - "version": "1.0.8", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "makeerror": "1.0.12" - } - }, "node_modules/wcwidth": { "version": "1.0.1", "license": "MIT", @@ -19290,6 +18765,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==", + "dev": true + }, "node_modules/which-pm": { "version": "2.0.0", "license": "MIT", @@ -19339,6 +18820,12 @@ "version": "1.0.0", "license": "MIT" }, + "node_modules/workerpool": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", + "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", + "dev": true + }, "node_modules/wrap-ansi": { "version": "4.0.0", "license": "MIT", @@ -19535,6 +19022,45 @@ "node": ">=12" } }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", + "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", + "dev": true, + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", + "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/yeoman-environment": { "version": "3.19.3", "license": "BSD-2-Clause", diff --git a/package.json b/package.json index 1a5e72510ee..3048a2de6d1 100644 --- a/package.json +++ b/package.json @@ -47,16 +47,14 @@ "devDependencies": { "@asyncapi/minimaltemplate": "./test/fixtures/minimaltemplate", "@babel/core": "^7.19.3", - "@jest/types": "^29.1.0", "@oclif/test": "^2", "@swc/core": "^1.3.2", - "@swc/jest": "^0.2.22", - "@types/chai": "^4.3.3", + "@types/chai": "^4.3.6", "@types/fs-extra": "^11.0.1", "@types/inquirer": "^8.1.3", - "@types/jest": "^29.0.3", "@types/js-yaml": "^4.0.5", "@types/lodash.template": "^4.4.4", + "@types/mocha": "^10.0.2", "@types/node": "^10.17.60", "@types/node-fetch": "^2.5.12", "@types/rimraf": "^3.0.2", @@ -75,8 +73,9 @@ "eslint-plugin-security": "^1.4.0", "eslint-plugin-sonarjs": "^0.15.0", "globby": "^10.0.2", - "jest": "^29.1.0", "markdown-toc": "^1.2.0", + "mocha": "^10.2.0", + "nyc": "^15.1.0", "react": "^16.14.0", "react-dom": "^16.14.0", "rimraf": "^3.0.2", @@ -146,11 +145,12 @@ "pack:windows": "oclif pack win && npm run pack:rename", "pack:rename": "node scripts/releasePackagesRename.js", "prepublishOnly": "npm run build", + "pretest": "npm run build", "pretest:coverage": "npm run build", + "posttest": "rimraf ./test.asyncapi-cli", "release": "semantic-release", - "pretest": "npm run build", "test": "npm run test:unit", - "test:unit": "cross-env NODE_ENV=development TEST=1 CUSTOM_CONTEXT_FILENAME=\"test.asyncapi-cli\" CUSTOM_CONTEXT_FILE_LOCATION=\"\" jest --coverage -i", + "test:unit": "cross-env NODE_ENV=development TEST=1 CUSTOM_CONTEXT_FILENAME=\"test.asyncapi-cli\" CUSTOM_CONTEXT_FILE_LOCATION=\"\" nyc --extension .ts mocha --require ts-node/register --require test/helpers/init.js --reporter spec --timeout 100000 \"test/**/*.test.ts\"", "get-version": "echo $npm_package_version" }, "types": "lib/index.d.ts" diff --git a/test/helpers/index.ts b/test/helpers/index.ts index c3062e5d5a6..43df20d628c 100644 --- a/test/helpers/index.ts +++ b/test/helpers/index.ts @@ -1,8 +1,9 @@ -import { existsSync, writeFileSync, unlinkSync, rmSync, mkdirSync , promises as fs } from 'fs'; +import { existsSync, writeFileSync, unlinkSync,rmdirSync, mkdirSync , promises as fs } from 'fs'; import * as path from 'path'; import { IContextFile, CONTEXT_FILE_PATH } from '../../src/models/Context'; import SpecificationFile from '../../src/models/SpecificationFile'; import http from 'http'; +import rimraf from 'rimraf'; const ASYNCAPI_FILE_PATH = path.resolve(process.cwd(), 'specification.yaml'); const SERVER_DIRECTORY= path.join(__dirname, '../fixtures/dummyspec'); @@ -39,7 +40,7 @@ export default class ContextTestingHelper { deleteDummyContextFile(): void { if (existsSync(CONTEXT_FILE_PATH)) { - rmSync(CONTEXT_FILE_PATH); + unlinkSync(CONTEXT_FILE_PATH); } } @@ -83,12 +84,12 @@ export default class ContextTestingHelper { } deleteDummyProjectDirectory(): void { - rmSync(PROJECT_DIRECTORY_PATH, { recursive: true, force: true }); + rimraf.sync(PROJECT_DIRECTORY_PATH); } } export function fileCleanup(filepath: string) { - rmSync(filepath); + unlinkSync(filepath); } export function createMockServer (port = 8080) { @@ -99,7 +100,7 @@ export function createMockServer (port = 8080) { const content = await fs.readFile(filePath, {encoding: 'utf8'}); res.writeHead(200, {'Content-Type': getContentType(filePath)}); res.end(content); - } catch (error) { + } catch (error: any) { if (error.code === 'ENOENT') { res.writeHead(404); res.end('404 NOT FOUND'); diff --git a/test/helpers/init.js b/test/helpers/init.js new file mode 100644 index 00000000000..c12136ccae6 --- /dev/null +++ b/test/helpers/init.js @@ -0,0 +1,8 @@ +const path = require('path'); +process.env.TS_NODE_PROJECT = path.resolve('test/tsconfig.json'); +process.env.NODE_ENV = 'development'; + +global.oclif = global.oclif || {}; +global.oclif.columns = 80; + +require('events').EventEmitter.defaultMaxListeners = 30; \ No newline at end of file diff --git a/test/integration/bundle/bundle.test.ts b/test/integration/bundle/bundle.test.ts index 4d8657d7400..dcfe4de72d1 100644 --- a/test/integration/bundle/bundle.test.ts +++ b/test/integration/bundle/bundle.test.ts @@ -1,4 +1,4 @@ -import { test } from '@oclif/test'; +import { expect, test } from '@oclif/test'; import fs from 'fs'; import path from 'path'; import { fileCleanup } from '../../helpers'; @@ -6,7 +6,7 @@ import { fileCleanup } from '../../helpers'; const spec = fs.readFileSync('./test/integration/bundle/final-asyncapi.yaml', {encoding: 'utf-8'}); const asyncapiv3 = './test/fixtures/specification-v3.yml'; -function validateGeneratedSpec(filePath, spec) { +function validateGeneratedSpec(filePath: string, spec: string) { const generatedSPec = fs.readFileSync(path.resolve(filePath), { encoding: 'utf-8' }); return generatedSPec === spec; } @@ -21,8 +21,8 @@ describe('bundle', () => { asyncapiv3, '--output=./test/integration/bundle/final.yaml']) .it('give error', (ctx, done) => { - expect(ctx.stderr).toEqual('Error: One of the files you tried to bundle is AsyncAPI v3 format, the bundle command does not support it yet, please checkout https://github.com/asyncapi/bundler/issues/133\n'); - expect(ctx.stdout).toEqual(''); + expect(ctx.stderr).to.equal('Error: One of the files you tried to bundle is AsyncAPI v3 format, the bundle command does not support it yet, please checkout https://github.com/asyncapi/bundler/issues/133\n'); + expect(ctx.stdout).to.equal(''); done(); }); }); @@ -34,7 +34,7 @@ describe('bundle', () => { '--output=./test/integration/bundle/final.yaml', ]) .it('should successfully bundle specification', (ctx, done) => { - expect(ctx.stdout).toContain( + expect(ctx.stdout).to.contain( 'Check out your shiny new bundled files at ./test/integration/bundle/final.yaml' ); fileCleanup('./test/integration/bundle/final.yaml'); @@ -48,7 +48,7 @@ describe('bundle', () => { '--output=./test/integration/bundle/final.json' ]) .it('should successfully bundle specification into json file', (ctx, done) => { - expect(ctx.stdout).toContain( + expect(ctx.stdout).to.contain( 'Check out your shiny new bundled files at ./test/integration/bundle/final.json' ); fileCleanup('./test/integration/bundle/final.json'); @@ -61,7 +61,7 @@ describe('bundle', () => { 'bundle', './test/integration/bundle/asyncapi.yml' ]) .it('should throw error message if the file path is wrong', (ctx, done) => { - expect(ctx.stderr).toContain('error loading AsyncAPI document from file: ./test/integration/bundle/asyncapi.yml file does not exist.\n'); + expect(ctx.stderr).to.contain('error loading AsyncAPI document from file: ./test/integration/bundle/asyncapi.yml file does not exist.\n'); done(); }); @@ -71,7 +71,7 @@ describe('bundle', () => { 'bundle', './test/integration/bundle/first-asyncapi.yaml', '--reference-into-components', '--output=./test/integration/bundle/final.yaml' ]) .it('should be able to refence messages into components', (ctx, done) => { - expect(ctx.stdout).toContain('Check out your shiny new bundled files at ./test/integration/bundle/final.yaml\n'); + expect(ctx.stdout).to.contain('Check out your shiny new bundled files at ./test/integration/bundle/final.yaml\n'); fileCleanup('./test/integration/bundle/final.yaml'); done(); }); @@ -82,7 +82,7 @@ describe('bundle', () => { 'bundle', './test/integration/bundle/first-asyncapi.yaml', './test/integration/bundle/feature.yaml', '--reference-into-components', '--output=test/integration/bundle/final.yaml' ]) .it('should be able to bundle multiple specs along with custom reference', (ctx, done) => { - expect(ctx.stdout).toContain('Check out your shiny new bundled files at test/integration/bundle/final.yaml\n'); + expect(ctx.stdout).to.contain('Check out your shiny new bundled files at test/integration/bundle/final.yaml\n'); expect(validateGeneratedSpec('test/integration/bundle/final.yaml', spec)); fileCleanup('./test/integration/bundle/final.yaml'); done(); @@ -94,7 +94,7 @@ describe('bundle', () => { 'bundle', './test/integration/bundle/first-asyncapi.yaml', './test/integration/bundle/feature.yaml', '--reference-into-components', '--output=test/integration/bundle/final.yaml', '--base=./test/integration/bundle/first-asyncapi.yaml' ]) .it('should be able to bundle correctly with overwriting base file', (ctx, done) => { - expect(ctx.stdout).toContain('Check out your shiny new bundled files at test/integration/bundle/final.yaml\n'); + expect(ctx.stdout).to.contain('Check out your shiny new bundled files at test/integration/bundle/final.yaml\n'); expect(validateGeneratedSpec('test/integration/bundle/final-asyncapi.yaml', spec)); fileCleanup('./test/integration/bundle/final.yaml'); done(); diff --git a/test/integration/config/versions.test.ts b/test/integration/config/versions.test.ts index 85e70573bc5..2502f49d22e 100644 --- a/test/integration/config/versions.test.ts +++ b/test/integration/config/versions.test.ts @@ -1,4 +1,4 @@ -import { test } from '@oclif/test'; +import { expect, test } from '@oclif/test'; describe('config', () => { describe('config:versions', () => { @@ -7,10 +7,10 @@ describe('config', () => { .stdout() .command(['config:versions']) .it('should show versions of AsyncAPI tools used', (ctx, done) => { - expect(ctx.stdout).toContain('@asyncapi/cli/'); - expect(ctx.stdout).toContain('├@asyncapi/'); - expect(ctx.stdout).toContain('└@asyncapi/'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.contain('@asyncapi/cli/'); + expect(ctx.stdout).to.contain('├@asyncapi/'); + expect(ctx.stdout).to.contain('└@asyncapi/'); + expect(ctx.stderr).to.equal(''); done(); }); @@ -19,8 +19,8 @@ describe('config', () => { .stdout() .command(['config:versions']) .it('should show address of repository of AsyncAPI CLI', (ctx, done) => { - expect(ctx.stdout).toContain('https://github.com/asyncapi/cli'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.contain('https://github.com/asyncapi/cli'); + expect(ctx.stderr).to.equal(''); done(); }); }); diff --git a/test/integration/context.test.ts b/test/integration/context.test.ts index 774e6726efe..0f19aadf7af 100644 --- a/test/integration/context.test.ts +++ b/test/integration/context.test.ts @@ -1,25 +1,18 @@ import path from 'path'; -import { test } from '@oclif/test'; +import { expect, test } from '@oclif/test'; import TestHelper from '../helpers'; import { CONTEXT_FILE_PATH } from '../../src/models/Context'; const testHelper = new TestHelper(); -// Both Jest's method names `test` and `it` are utilized by `@oclif/test`, so -// using them again results in error `Tests cannot be nested`, preventing -// creation of clear block structure of Jest's tests. -// Due to this `beforeEach()` cannot be used, because borders of each test -// cannot be recognized, so workarounds with explicit calls of `TestHelper` -// methods inside of `describe`s had to be implemented. - describe('config:context, positive scenario', () => { - beforeAll(() => { - testHelper.createDummyContextFile(); + after(() => { + testHelper.deleteDummyContextFile(); }); - afterAll(() => { - testHelper.deleteDummyContextFile(); + before(() => { + testHelper.createDummyContextFile(); }); describe('config:context:current', () => { @@ -28,10 +21,10 @@ describe('config:context, positive scenario', () => { .stdout() .command(['config:context:current']) .it('should show current context', (ctx, done) => { - expect(ctx.stdout).toEqual( + expect(ctx.stdout).to.equals( `${testHelper.context.current}: ${testHelper.context.store['home']}\n` ); - expect(ctx.stderr).toEqual(''); + expect(ctx.stderr).to.equals(''); done(); }); }); @@ -44,13 +37,13 @@ describe('config:context, positive scenario', () => { .it( 'should list contexts prints list if context file is present', (ctx, done) => { - expect(ctx.stdout).toEqual( + expect(ctx.stdout).to.equals( `home: ${path.resolve( __dirname, '../fixtures/specification.yml' )}\ncode: ${path.resolve(__dirname, '../fixtures/specification.yml')}\n` ); - expect(ctx.stderr).toEqual(''); + expect(ctx.stderr).to.equals(''); done(); } ); @@ -62,10 +55,10 @@ describe('config:context, positive scenario', () => { .stdout() .command(['config:context:add', 'test', './test/integration/specification.yml']) .it('should add new context called "test"', (ctx, done) => { - expect(ctx.stdout).toEqual( + expect(ctx.stdout).to.equals( 'Added context "test".\n\nYou can set it as your current context: asyncapi config context use test\nYou can use this context when needed by passing test as a parameter: asyncapi validate test\n' ); - expect(ctx.stderr).toEqual(''); + expect(ctx.stderr).to.equals(''); done(); }); }); @@ -78,8 +71,8 @@ describe('config:context, positive scenario', () => { .it( 'should NOT add new context with already existing in context file name "test"', (ctx, done) => { - expect(ctx.stdout).toEqual(''); - expect(ctx.stderr).toEqual( + expect(ctx.stdout).to.equals(''); + expect(ctx.stderr).to.equals( `ContextError: Context with name "test" already exists in context file "${CONTEXT_FILE_PATH}".\n` ); done(); @@ -93,8 +86,8 @@ describe('config:context, positive scenario', () => { .stdout() .command(['config:context:edit', 'test', './test/specification2.yml']) .it('should edit existing context "test"', (ctx, done) => { - expect(ctx.stdout).toContain('Edited context "test".'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.contain('Edited context "test".'); + expect(ctx.stderr).to.equals(''); done(); }); }); @@ -105,8 +98,8 @@ describe('config:context, positive scenario', () => { .stdout() .command(['config:context:use', 'code']) .it('should update the current context', (ctx, done) => { - expect(ctx.stdout).toEqual('code is set as current\n'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.equals('code is set as current\n'); + expect(ctx.stderr).to.equals(''); done(); }); }); @@ -121,8 +114,8 @@ describe('config:context, positive scenario', () => { .stdout() .command(['config:context:remove', 'code']) .it('should remove existing context', (ctx, done) => { - expect(ctx.stdout).toEqual('code successfully deleted\n'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.equals('code successfully deleted\n'); + expect(ctx.stderr).to.equals(''); done(); }); }); @@ -133,8 +126,8 @@ describe('config:context, positive scenario', () => { .stdout() .command(['config:context:init']) .it('should initialize new empty context file without a switch', (ctx, done) => { - expect(ctx.stdout).toContain('Initialized context'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.contain('Initialized context'); + expect(ctx.stderr).to.equals(''); done(); }); }); @@ -145,8 +138,8 @@ describe('config:context, positive scenario', () => { .stdout() .command(['config:context:init', '.']) .it('should initialize new empty context file with switch "."', (ctx, done) => { - expect(ctx.stdout).toContain('Initialized context'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.contain('Initialized context'); + expect(ctx.stderr).to.equals(''); done(); }); }); @@ -157,8 +150,8 @@ describe('config:context, positive scenario', () => { .stdout() .command(['config:context:init', './']) .it('should initialize new empty context file with switch "./"', (ctx, done) => { - expect(ctx.stdout).toContain('Initialized context'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.contain('Initialized context'); + expect(ctx.stderr).to.equals(''); done(); }); }); @@ -169,22 +162,22 @@ describe('config:context, positive scenario', () => { .stdout() .command(['config:context:init', '~']) .it('should initialize new empty context file with switch "~"', (ctx, done) => { - expect(ctx.stdout).toContain('Initialized context'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.contain('Initialized context'); + expect(ctx.stderr).to.equals(''); done(); }); }); }); describe('config:context, negative scenario', () => { - beforeAll(() => { + before(() => { // Any context file needs to be created before starting test suite, // otherwise a totally legitimate context file will be created automatically // by `addContext()`. testHelper.createDummyContextFileWrong(''); }); - afterAll(() => { + after(() => { testHelper.deleteDummyContextFile(); }); @@ -198,8 +191,8 @@ describe('config:context, negative scenario', () => { .it( 'should throw error on zero-sized file saying that context file has wrong format.', (ctx, done) => { - expect(ctx.stdout).toEqual(''); - expect(ctx.stderr).toContain( + expect(ctx.stdout).to.equals(''); + expect(ctx.stderr).to.contain( `ContextError: Context file "${CONTEXT_FILE_PATH}" has wrong format.` ); done(); @@ -217,8 +210,8 @@ describe('config:context, negative scenario', () => { .it( 'should throw error on file with empty object saying that context file has wrong format.', (ctx, done) => { - expect(ctx.stdout).toEqual(''); - expect(ctx.stderr).toContain( + expect(ctx.stdout).to.equals(''); + expect(ctx.stderr).to.contain( `ContextError: Context file "${CONTEXT_FILE_PATH}" has wrong format.` ); done(); @@ -236,8 +229,8 @@ describe('config:context, negative scenario', () => { .it( 'should throw error on file with empty array saying that context file has wrong format.', (ctx, done) => { - expect(ctx.stdout).toEqual(''); - expect(ctx.stderr).toContain( + expect(ctx.stdout).to.equals(''); + expect(ctx.stderr).to.contain( `ContextError: Context file "${CONTEXT_FILE_PATH}" has wrong format.` ); done(); @@ -262,8 +255,8 @@ describe('config:context, negative scenario', () => { .it( 'should throw error on file with object having three root properties, saying that context file has wrong format.', (ctx, done) => { - expect(ctx.stdout).toEqual(''); - expect(ctx.stderr).toContain( + expect(ctx.stdout).to.equals(''); + expect(ctx.stderr).to.contain( `ContextError: Context file "${CONTEXT_FILE_PATH}" has wrong format.` ); done(); @@ -273,7 +266,7 @@ describe('config:context, negative scenario', () => { }); describe('config:context, negative scenario', () => { - afterAll(() => { + after(() => { testHelper.deleteDummyContextFile(); }); @@ -286,8 +279,8 @@ describe('config:context, negative scenario', () => { .it( 'should output info message (to stdout, NOT stderr) about absence of context file.', (ctx, done) => { - expect(ctx.stdout).toContain('You have no context file configured.'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.contain('You have no context file configured.'); + expect(ctx.stderr).to.equals(''); done(); } ); diff --git a/test/integration/convert.test.ts b/test/integration/convert.test.ts index 26aeee4356c..29c52d0a599 100644 --- a/test/integration/convert.test.ts +++ b/test/integration/convert.test.ts @@ -3,6 +3,7 @@ import { test } from '@oclif/test'; import { NO_CONTEXTS_SAVED } from '../../src/errors/context-error'; import TestHelper, { createMockServer, stopMockServer } from '../helpers'; import fs from 'fs-extra'; +import { expect } from '@oclif/test'; const testHelper = new TestHelper(); const filePath = './test/fixtures/specification.yml'; @@ -18,11 +19,11 @@ describe('convert', () => { testHelper.deleteDummyContextFile(); }); - beforeAll(() => { + before(() => { createMockServer(); }); - afterAll(() => { + after(() => { stopMockServer(); }); @@ -31,8 +32,8 @@ describe('convert', () => { .stdout() .command(['convert', filePath]) .it('works when file path is passed', (ctx, done) => { - expect(ctx.stdout).toContain('File ./test/fixtures/specification.yml successfully converted!\n'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.contain('File ./test/fixtures/specification.yml successfully converted!\n'); + expect(ctx.stderr).to.equal(''); done(); }); @@ -41,8 +42,8 @@ describe('convert', () => { .stdout() .command(['convert', './test/fixtures/not-found.yml']) .it('should throw error if file path is wrong', (ctx, done) => { - expect(ctx.stdout).toEqual(''); - expect(ctx.stderr).toEqual('error loading AsyncAPI document from file: ./test/fixtures/not-found.yml file does not exist.\n'); + expect(ctx.stdout).to.equal(''); + expect(ctx.stderr).to.equal('error loading AsyncAPI document from file: ./test/fixtures/not-found.yml file does not exist.\n'); done(); }); @@ -51,8 +52,8 @@ describe('convert', () => { .stdout() .command(['convert', 'http://localhost:8080/dummySpec.yml']) .it('works when url is passed', (ctx, done) => { - expect(ctx.stdout).toContain('URL http://localhost:8080/dummySpec.yml successfully converted!\n'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.contain('URL http://localhost:8080/dummySpec.yml successfully converted!\n'); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -72,8 +73,8 @@ describe('convert', () => { .stdout() .command(['convert']) .it('converts from current context', (ctx, done) => { - expect(ctx.stdout).toContain(`File ${path.resolve(__dirname, '../fixtures/specification.yml')} successfully converted!\n`); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.contain(`File ${path.resolve(__dirname, '../fixtures/specification.yml')} successfully converted!\n`); + expect(ctx.stderr).to.equal(''); done(); }); @@ -86,8 +87,8 @@ describe('convert', () => { }) .command(['convert']) .it('throws error message if no current context', (ctx, done) => { - expect(ctx.stdout).toEqual(''); - expect(ctx.stderr).toEqual('ContextError: No context is set as current, please set a current context.\n'); + expect(ctx.stdout).to.equal(''); + expect(ctx.stderr).to.equal('ContextError: No context is set as current, please set a current context.\n'); done(); }); }); @@ -96,7 +97,7 @@ describe('convert', () => { beforeEach(() => { try { testHelper.deleteDummyContextFile(); - } catch (e) { + } catch (e: any) { if (e.code !== 'ENOENT') { throw e; } @@ -108,8 +109,8 @@ describe('convert', () => { .stdout() .command(['convert']) .it('throws error message if no context file exists', (ctx, done) => { - expect(ctx.stdout).toEqual(''); - expect(ctx.stderr).toEqual(`error locating AsyncAPI document: ${NO_CONTEXTS_SAVED}\n`); + expect(ctx.stdout).to.equal(''); + expect(ctx.stderr).to.equal(`error locating AsyncAPI document: ${NO_CONTEXTS_SAVED}\n`); done(); }); }); @@ -128,8 +129,8 @@ describe('convert', () => { .stdout() .command(['convert', filePath, '-t=2.3.0']) .it('works when supported target-version is passed', (ctx, done) => { - expect(ctx.stdout).toContain('asyncapi: 2.3.0'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.contain('asyncapi: 2.3.0'); + expect(ctx.stderr).to.equal(''); done(); }); @@ -138,8 +139,8 @@ describe('convert', () => { .stdout() .command(['convert', filePath, '-t=2.95.0']) .it('should throw error if non-supported target-version is passed', (ctx, done) => { - expect(ctx.stdout).toEqual(''); - expect(ctx.stderr).toContain('Error: Cannot convert'); + expect(ctx.stdout).to.equal(''); + expect(ctx.stderr).to.contain('Error: Cannot convert'); done(); }); }); @@ -158,9 +159,9 @@ describe('convert', () => { .stdout() .command(['convert', filePath, '-o=./test/fixtures/specification_output.yml']) .it('works when .yml file is passed', (ctx, done) => { - expect(ctx.stdout).toEqual(`File ${filePath} successfully converted!\n`); - expect(fs.existsSync('./test/fixtures/specification_output.yml')).toBe(true); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.equal(`File ${filePath} successfully converted!\n`); + expect(fs.existsSync('./test/fixtures/specification_output.yml')).to.equal(true); + expect(ctx.stderr).to.equal(''); fs.unlinkSync('./test/fixtures/specification_output.yml'); done(); }); @@ -170,9 +171,9 @@ describe('convert', () => { .stdout() .command(['convert', JSONFilePath, '-o=./test/fixtures/specification_output.json']) .it('works when .json file is passed', (ctx, done) => { - expect(ctx.stdout).toEqual(`File ${JSONFilePath} successfully converted!\n`); - expect(fs.existsSync('./test/fixtures/specification_output.json')).toBe(true); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.equal(`File ${JSONFilePath} successfully converted!\n`); + expect(fs.existsSync('./test/fixtures/specification_output.json')).to.equal(true); + expect(ctx.stderr).to.equal(''); fs.unlinkSync('./test/fixtures/specification_output.json'); done(); }); diff --git a/test/integration/diff.test.ts b/test/integration/diff.test.ts index c7fee77399a..5f814a2400c 100644 --- a/test/integration/diff.test.ts +++ b/test/integration/diff.test.ts @@ -1,5 +1,5 @@ /* eslint-disable sonarjs/no-duplicate-string */ -import { test } from '@oclif/test'; +import { expect, test } from '@oclif/test'; const asyncapiv3 = './test/fixtures/specification-v3.yml'; const asyncapiv2 = './test/fixtures/specification.yml'; @@ -24,8 +24,8 @@ describe('diff', () => { .stdout() .command(['diff', asyncapiv3, asyncapiv2]) .it('give error when first document', (ctx, done) => { - expect(ctx.stderr).toEqual('Error: Diff command does not support AsyncAPI v3 yet which was your first document, please checkout https://github.com/asyncapi/diff/issues/154\n'); - expect(ctx.stdout).toEqual(''); + expect(ctx.stderr).to.equal('Error: Diff command does not support AsyncAPI v3 yet which was your first document, please checkout https://github.com/asyncapi/diff/issues/154\n'); + expect(ctx.stdout).to.equal(''); done(); }); test @@ -33,8 +33,8 @@ describe('diff', () => { .stdout() .command(['diff', asyncapiv2, asyncapiv3]) .it('give error when second document', (ctx, done) => { - expect(ctx.stderr).toEqual('Error: Diff command does not support AsyncAPI v3 yet which was your second document, please checkout https://github.com/asyncapi/diff/issues/154\n'); - expect(ctx.stdout).toEqual(''); + expect(ctx.stderr).to.equal('Error: Diff command does not support AsyncAPI v3 yet which was your second document, please checkout https://github.com/asyncapi/diff/issues/154\n'); + expect(ctx.stdout).to.equal(''); done(); }); }); @@ -44,8 +44,8 @@ describe('diff', () => { .stdout() .command(['diff', './test/fixtures/specification.yml', './test/fixtures/specification.yml', '--format=json']) .it('works when file path is passed', (ctx, done) => { - expect(JSON.stringify(ctx.stdout)).toEqual(noChangesJson); - expect(ctx.stderr).toEqual(''); + expect(JSON.stringify(ctx.stdout)).to.equal(noChangesJson); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -56,8 +56,8 @@ describe('diff', () => { .stdout() .command(['diff', './test/fixtures/specification.yml', './test/fixtures/specification.yml']) .it('works when file path is passed', (ctx, done) => { - expect(JSON.stringify(ctx.stdout)).toEqual(noChangesYaml); - expect(ctx.stderr).toEqual(''); + expect(JSON.stringify(ctx.stdout)).to.equal(noChangesYaml); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -75,8 +75,8 @@ describe('diff', () => { '--no-error', ]) .it('works when file path is passed', (ctx, done) => { - expect(JSON.stringify(ctx.stdout)).toEqual(`"${commonJsonOutput}"`); - expect(ctx.stderr).toEqual(''); + expect(JSON.stringify(ctx.stdout)).to.equal(`"${commonJsonOutput}"`); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -94,8 +94,8 @@ describe('diff', () => { '--no-error', ]) .it('works when file path is passed', (ctx, done) => { - expect(JSON.stringify(ctx.stdout)).toEqual(breakingChangesJson); - expect(ctx.stderr).toEqual(''); + expect(JSON.stringify(ctx.stdout)).to.equal(breakingChangesJson); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -113,8 +113,8 @@ describe('diff', () => { '--no-error', ]) .it('works when file path is passed', (ctx, done) => { - expect(JSON.stringify(ctx.stdout)).toEqual(nonBreakingChangesJson); - expect(ctx.stderr).toEqual(''); + expect(JSON.stringify(ctx.stdout)).to.equal(nonBreakingChangesJson); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -132,8 +132,8 @@ describe('diff', () => { '--no-error', ]) .it('works when file path is passed', (ctx, done) => { - expect(JSON.stringify(ctx.stdout)).toEqual(unclassifiedChangesJson); - expect(ctx.stderr).toEqual(''); + expect(JSON.stringify(ctx.stdout)).to.equal(unclassifiedChangesJson); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -150,8 +150,8 @@ describe('diff', () => { '--no-error', ]) .it('works when file path is passed', (ctx, done) => { - expect(JSON.stringify(ctx.stdout)).toEqual(`"${commonJsonOutput}"`); - expect(ctx.stderr).toEqual(''); + expect(JSON.stringify(ctx.stdout)).to.equal(`"${commonJsonOutput}"`); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -168,8 +168,8 @@ describe('diff', () => { '--no-error', ]) .it('works when file path is passed', (ctx, done) => { - expect(JSON.stringify(ctx.stdout)).toEqual(commonYamlOutput); - expect(ctx.stderr).toEqual(''); + expect(JSON.stringify(ctx.stdout)).to.equal(commonYamlOutput); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -184,8 +184,8 @@ describe('diff', () => { './test/fixtures/asyncapi_v2.yml', ]) .it('works when file path is passed', (ctx, done) => { - expect(JSON.stringify(ctx.stdout)).toEqual(commonYamlOutput); - expect(ctx.stderr).toEqual('DiffBreakingChangeError: Breaking changes detected\n'); + expect(JSON.stringify(ctx.stdout)).to.equal(commonYamlOutput); + expect(ctx.stderr).to.equal('DiffBreakingChangeError: Breaking changes detected\n'); done(); }); }); @@ -204,8 +204,8 @@ describe('diff', () => { '--no-error', ]) .it('works when file path is passed', (ctx, done) => { - expect(JSON.stringify(ctx.stdout)).toEqual(markdownJsonOutput); - expect(ctx.stderr).toEqual(''); + expect(JSON.stringify(ctx.stdout)).to.equal(markdownJsonOutput); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -224,8 +224,8 @@ describe('diff', () => { '--no-error', ]) .it('works when file path is passed', (ctx, done) => { - expect(JSON.stringify(ctx.stdout)).toEqual(markdownYamlOutput); - expect(ctx.stderr).toEqual(''); + expect(JSON.stringify(ctx.stdout)).to.equal(markdownYamlOutput); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -242,10 +242,10 @@ describe('diff', () => { '--markdownSubtype=yaml', ]) .it('works when file path is passed', (ctx, done) => { - expect(JSON.stringify(ctx.stdout)).toEqual( + expect(JSON.stringify(ctx.stdout)).to.equal( `"Warning: The given markdownSubtype flag will not work with the given format.\\nProvided flag markdownSubtype: yaml\\n${commonJsonOutput}"` ); - expect(ctx.stderr).toEqual('DiffBreakingChangeError: Breaking changes detected\n'); + expect(ctx.stderr).to.equal('DiffBreakingChangeError: Breaking changes detected\n'); done(); }); }); @@ -256,10 +256,8 @@ describe('diff', () => { .stdout() .command(['diff', './test/fixtures/specification.yml', './test/fixtures/specification.yml', '--format=json', '--log-diagnostics']) .it('works when file path is passed', (ctx, done) => { - expect(ctx.stdout).toMatch( - 'File ./test/fixtures/specification.yml is valid but has (itself and/or referenced documents) governance issues.' - ); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.match(/File .\/test\/fixtures\/specification.yml is valid but has \(itself and\/or referenced documents\) governance issues./); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -279,8 +277,8 @@ describe('diff', () => { '--no-error', ]) .it((ctx, done) => { - expect(JSON.stringify(ctx.stdout)).toEqual(customJsonOutput); - expect(ctx.stderr).toEqual(''); + expect(JSON.stringify(ctx.stdout)).to.equal(customJsonOutput); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -297,8 +295,8 @@ describe('diff', () => { '--format=json', ]) .it((ctx, done) => { - expect(ctx.stdout).toEqual(''); - expect(ctx.stderr).toEqual( + expect(ctx.stdout).to.equal(''); + expect(ctx.stderr).to.equal( 'DiffOverrideFileError: Override file not found\n' ); done(); @@ -316,8 +314,8 @@ describe('diff', () => { '--overrides=./test/fixtures/invalid-overrides.json', ]) .it((ctx, done) => { - expect(ctx.stdout).toEqual(''); - expect(ctx.stderr).toEqual( + expect(ctx.stdout).to.equal(''); + expect(ctx.stderr).to.equal( 'DiffOverrideJSONError: Provided override file is not a valid JSON file\n' ); done(); diff --git a/test/integration/generate/fromTemplate.test.ts b/test/integration/generate/fromTemplate.test.ts index 8a1f8a2c4cd..c4265d201bb 100644 --- a/test/integration/generate/fromTemplate.test.ts +++ b/test/integration/generate/fromTemplate.test.ts @@ -2,6 +2,8 @@ import * as fs from 'fs'; import * as path from 'path'; import { test } from '@oclif/test'; import rimraf from 'rimraf'; +import { expect } from '@oclif/test'; +import { it } from 'mocha'; const generalOptions = [ 'generate:fromTemplate', @@ -15,14 +17,14 @@ function cleanup(filepath: string) { } describe('template', () => { - afterAll(() => { + after(() => { cleanup('./test/docs'); }); test .stdout() .command([...generalOptions, '--output=./test/docs/1', '--force-write']) .it('should generate minimal tempalte', (ctx, done) => { - expect(ctx.stdout).toContain( + expect(ctx.stdout).to.contain( 'Check out your shiny new generated files at ./test/docs/1.\n\n' ); cleanup('./test/docs/1'); @@ -38,14 +40,14 @@ describe('template', () => { asyncapiv3, '@asyncapi/minimaltemplate']) .it('give error', (ctx, done) => { - expect(ctx.stderr).toEqual('Error: @asyncapi/minimaltemplate template does not support AsyncAPI v3 documents, please checkout some link\n'); - expect(ctx.stdout).toEqual(''); + expect(ctx.stderr).to.equal('Error: @asyncapi/minimaltemplate template does not support AsyncAPI v3 documents, please checkout some link\n'); + expect(ctx.stdout).to.equal(''); done(); }); }); describe('git clash', () => { const pathToOutput = './test/docs/2'; - beforeAll(() => { + before(() => { fs.mkdirSync(pathToOutput, { recursive: true }); // Write a random file to trigger that dir has unstaged changes. fs.writeFileSync(path.join(pathToOutput, 'random.md'), ''); @@ -56,7 +58,7 @@ describe('template', () => { .it( 'should throw error if output folder is in a git repository', (ctx, done) => { - expect(ctx.stderr).toContain( + expect(ctx.stderr).to.contain( 'Error: "./test/docs/2" is in a git repository with unstaged changes.' ); cleanup('./test/docs/2'); @@ -74,7 +76,7 @@ describe('template', () => { '--force-write', ]) .it('should pass custom param in the template', (ctx, done) => { - expect(ctx.stdout).toContain( + expect(ctx.stdout).to.contain( 'Check out your shiny new generated files at ./test/docs/3.\n\n' ); cleanup('./test/docs/3'); @@ -92,7 +94,7 @@ describe('template', () => { ]) .it('should not create asyncapi.yaml file', async (_, done) => { const exits = fs.existsSync(path.resolve('./docs/asyncapi.yaml')); - expect(exits).toBeFalsy(); + expect(!!exits).to.equal(false); cleanup('./test/docs/4'); done(); }); @@ -108,7 +110,7 @@ describe('template', () => { '--debug', ]) .it('should print debug logs', (ctx, done) => { - expect(ctx.stdout).toContain( + expect(ctx.stdout).to.contain( `Template sources taken from ${path.resolve( './test/fixtures/minimaltemplate' )}.` @@ -128,7 +130,7 @@ describe('template', () => { '--no-overwrite=./test/docs/asyncapi.md', ]) .it('should skip the filepath and generate normally', (ctx, done) => { - expect(ctx.stdout).toContain( + expect(ctx.stdout).to.contain( 'Check out your shiny new generated files at ./test/docs/6.\n\n' ); cleanup('./test/docs/6'); @@ -136,9 +138,7 @@ describe('template', () => { }); }); - describe('install', () => { - jest.setTimeout(100000); - + it('should install template', () => { test .stdout() .command([ @@ -150,11 +150,11 @@ describe('template', () => { '--output=./test/docs/7' ]) .it('should install template', (ctx, done) => { - expect(ctx.stdout).toContain('Template installation started because you passed --install flag.'); + expect(ctx.stdout).to.contain('Template installation started because you passed --install flag.'); cleanup('./test/docs/7'); done(); }); - }); + }).timeout(1000000); describe('map-base-url', () => { test @@ -170,7 +170,7 @@ describe('template', () => { .it( 'should resolve reference and generate from template', (ctx, done) => { - expect(ctx.stdout).toContain( + expect(ctx.stdout).to.contain( 'Check out your shiny new generated files at ./test/docs/8.\n\n' ); cleanup('./test/docs/8'); diff --git a/test/integration/generate/models.test.ts b/test/integration/generate/models.test.ts index 6c69fe1cca9..ec762ea7760 100644 --- a/test/integration/generate/models.test.ts +++ b/test/integration/generate/models.test.ts @@ -1,20 +1,21 @@ +/* eslint-disable no-warning-comments */ /* eslint-disable sonarjs/no-duplicate-string */ /* eslint-disable sonarjs/no-identical-functions */ import path from 'path'; -import { test } from '@oclif/test'; +import { expect, test } from '@oclif/test'; import { createMockServer, stopMockServer } from '../../helpers'; -import { rmdirSync } from 'fs'; +import rimraf from 'rimraf'; const generalOptions = ['generate:models']; const outputDir = './test/fixtures/generate/models'; const asyncapiv3 = './test/fixtures/specification-v3.yml'; describe('models', () => { - beforeAll(() => { + before(() => { createMockServer(); }); - afterAll(() => { + after(() => { stopMockServer(); - rmdirSync(outputDir, {recursive: true}); + rimraf.sync(outputDir); }); describe('should handle AsyncAPI v3 document correctly', () => { test @@ -23,8 +24,8 @@ describe('models', () => { .command([ ...generalOptions, 'typescript', asyncapiv3]) .it('give error', (ctx, done) => { - expect(ctx.stderr).toEqual('Error: Generate Models command does not support AsyncAPI v3 yet, please checkout https://github.com/asyncapi/modelina/issues/1376\n'); - expect(ctx.stdout).toEqual(''); + expect(ctx.stderr).to.equal('Error: Generate Models command does not support AsyncAPI v3 yet, please checkout https://github.com/asyncapi/modelina/issues/1376\n'); + expect(ctx.stdout).to.equal(''); done(); }); }); @@ -33,8 +34,9 @@ describe('models', () => { .stdout() .command([...generalOptions, 'typescript', 'http://localhost:8080/dummySpec.yml']) .it('works with remote AsyncAPI files', (ctx, done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toMatchSnapshot(); + expect(ctx.stderr).to.equal(''); + // TODO :- add this back when we have a better way to mock remote files + // expect(ctx.stdout).toMatchSnapshot(); done(); }); @@ -43,8 +45,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'random', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './random')}`]) .it('fails when it dont know the language', (ctx, done) => { - expect(ctx.stderr).toEqual('Error: Expected random to be one of: typescript, csharp, golang, java, javascript, dart, python, rust, kotlin, php, cplusplus\nSee more help with --help\n'); - expect(ctx.stdout).toEqual(''); + expect(ctx.stderr).to.equal('Error: Expected random to be one of: typescript, csharp, golang, java, javascript, dart, python, rust, kotlin, php, cplusplus\nSee more help with --help\n'); + expect(ctx.stdout).to.equal(''); done(); }); test @@ -52,8 +54,9 @@ describe('models', () => { .stdout() .command([...generalOptions, 'typescript', './test/fixtures/specification.yml']) .it('works when generating in memory', (ctx, done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toMatchSnapshot(); + expect(ctx.stderr).to.equal(''); + // TODO :- add this back when we have a better way to mock remote files + // expect(ctx.stdout).toMatchSnapshot(); done(); }); @@ -63,8 +66,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'typescript', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './ts')}`]) .it('works when file path is passed', (ctx, done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toContain( + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.contain( 'Successfully generated the following models: ' ); done(); @@ -74,8 +77,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'typescript', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './ts')}`, '--tsJsonBinPack']) .it('works when tsJsonBinPack is set', (ctx, done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toContain( + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.contain( 'Successfully generated the following models: ' ); done(); @@ -85,8 +88,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'typescript', './test/fixtures/specification.yml', '--tsMarshalling']) .it('works when tsMarshalling is set', (ctx, done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toContain( + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.contain( 'Successfully generated the following models: ' ); done(); @@ -96,8 +99,9 @@ describe('models', () => { .stdout() .command([...generalOptions, 'typescript', './test/fixtures/specification.yml', '--tsIncludeComments']) .it('works when tsIncludeComments is set', (ctx, done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toMatchSnapshot(); + expect(ctx.stderr).to.equal(''); + // TODO :- add this back when we have a better way to mock remote files + // expect(ctx.stdout).toMatchSnapshot(); done(); }); test @@ -105,8 +109,8 @@ describe('models', () => { .stdout() .command([...generalOptions,'typescript', './test/fixtures/specification.yml', '--tsIncludeComments']) .it('works when tsExampleInstance is set', (ctx, done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toContain( + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.contain( 'Successfully generated the following models: ' ); done(); @@ -119,10 +123,10 @@ describe('models', () => { .stdout() .command([...generalOptions, 'javascript', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './js')}`]) .it('works when file path is passed', (ctx, done) => { - expect(ctx.stdout).toContain( + expect(ctx.stdout).to.contain( 'Successfully generated the following models: ' ); - expect(ctx.stderr).toEqual(''); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -133,10 +137,10 @@ describe('models', () => { .stdout() .command([...generalOptions, 'python', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './python')}`]) .it('works when file path is passed', (ctx, done) => { - expect(ctx.stdout).toContain( + expect(ctx.stdout).to.contain( 'Successfully generated the following models: ' ); - expect(ctx.stderr).toEqual(''); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -147,10 +151,10 @@ describe('models', () => { .stdout() .command([...generalOptions, 'rust', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './rust')}`]) .it('works when file path is passed', (ctx, done) => { - expect(ctx.stdout).toContain( + expect(ctx.stdout).to.contain( 'Successfully generated the following models: ' ); - expect(ctx.stderr).toEqual(''); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -161,8 +165,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'csharp', './test/fixtures/specification.yml', `-o=${path.resolve(outputDir, './csharp')}`, '--namespace=\'asyncapi.models\'']) .it('works when file path is passed', (ctx, done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toContain( + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.contain( 'Successfully generated the following models: ' ); done(); @@ -172,8 +176,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'csharp', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './csharp')}`]) .it('fails when no namespace provided', (ctx, done) => { - expect(ctx.stderr).toEqual('Error: In order to generate models to C#, we need to know which namespace they are under. Add `--namespace=NAMESPACE` to set the desired namespace.\n'); - expect(ctx.stdout).toEqual(''); + expect(ctx.stderr).to.equal('Error: In order to generate models to C#, we need to know which namespace they are under. Add `--namespace=NAMESPACE` to set the desired namespace.\n'); + expect(ctx.stdout).to.equal(''); done(); }); test @@ -181,8 +185,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'csharp', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './csharp')}`, '--namespace=\'asyncapi.models\'', '--csharpAutoImplement']) .it('works when auto implement properties flag is passed', (ctx, done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toContain( + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.contain( 'Successfully generated the following models: ' ); done(); @@ -192,8 +196,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'csharp', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './csharp')}`, '--namespace=\'asyncapi.models\'', '--csharpNewtonsoft']) .it('works when newtonsoft flag is passed', (ctx, done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toContain( + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.contain( 'Successfully generated the following models: ' ); done(); @@ -203,8 +207,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'csharp', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './csharp')}`, '--namespace=\'asyncapi.models\'', '--csharpHashcode']) .it('works when hash code flag is passed', (ctx, done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toContain( + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.contain( 'Successfully generated the following models: ' ); done(); @@ -215,8 +219,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'csharp', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './csharp')}`, '--namespace=\'asyncapi.models\'', '--csharpEqual']) .it('works when equal flag is passed', (ctx, done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toContain( + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.contain( 'Successfully generated the following models: ' ); done(); @@ -227,8 +231,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'csharp', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './csharp')}`, '--namespace=\'asyncapi.models\'', '--csharpSystemJson']) .it('works when system json flag is passed', (ctx, done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toContain( + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.contain( 'Successfully generated the following models: ' ); done(); @@ -239,8 +243,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'csharp', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './csharp')}`, '--namespace=\'asyncapi.models\'', '--csharpArrayType=List']) .it('works when array type is provided', (ctx, done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toContain( + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.contain( 'Successfully generated the following models: ' ); done(); @@ -253,8 +257,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'cplusplus', './test/fixtures/specification.yml', `-o=${path.resolve(outputDir, './cplusplus')}`, '--namespace=\'AsyncapiModels\'']) .it('works when file path is passed', (ctx, done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toContain( + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.contain( 'Successfully generated the following models: ' ); done(); @@ -264,8 +268,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'cplusplus', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './cplusplus')}`]) .it('fails when no namespace provided', (ctx, done) => { - expect(ctx.stderr).toEqual('Error: In order to generate models to C++, we need to know which namespace they are under. Add `--namespace=NAMESPACE` to set the desired namespace.\n'); - expect(ctx.stdout).toEqual(''); + expect(ctx.stderr).to.equal('Error: In order to generate models to C++, we need to know which namespace they are under. Add `--namespace=NAMESPACE` to set the desired namespace.\n'); + expect(ctx.stdout).to.equal(''); done(); }); }); @@ -276,8 +280,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'java', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './java')}`, '--packageName', 'test.pkg']) .it('works when file path is passed', (ctx, done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toContain( + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.contain( 'Successfully generated the following models: ' ); done(); @@ -287,8 +291,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'java', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './java')}`]) .it('fails when no package defined', (ctx, done) => { - expect(ctx.stderr).toEqual('Error: In order to generate models to Java, we need to know which package they are under. Add `--packageName=PACKAGENAME` to set the desired package name.\n'); - expect(ctx.stdout).toEqual(''); + expect(ctx.stderr).to.equal('Error: In order to generate models to Java, we need to know which package they are under. Add `--packageName=PACKAGENAME` to set the desired package name.\n'); + expect(ctx.stdout).to.equal(''); done(); }); }); @@ -299,8 +303,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'golang', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './go')}`, '--packageName', 'asyncapi.models']) .it('works when file path is passed', (ctx, done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toContain( + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.contain( 'Successfully generated the following models: ' ); done(); @@ -310,8 +314,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'golang', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './go')}`]) .it('fails when no package defined', (ctx, done) => { - expect(ctx.stderr).toEqual('Error: In order to generate models to Go, we need to know which package they are under. Add `--packageName=PACKAGENAME` to set the desired package name.\n'); - expect(ctx.stdout).toEqual(''); + expect(ctx.stderr).to.equal('Error: In order to generate models to Go, we need to know which package they are under. Add `--packageName=PACKAGENAME` to set the desired package name.\n'); + expect(ctx.stdout).to.equal(''); done(); }); }); @@ -322,8 +326,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'kotlin', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './kotlin')}`, '--packageName', 'asyncapi.models']) .it('works when file path is passed', (ctx, done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toContain( + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.contain( 'Successfully generated the following models: ' ); done(); @@ -333,8 +337,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'kotlin', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './kotlin')}`]) .it('fails when no package defined', (ctx, done) => { - expect(ctx.stderr).toEqual('Error: In order to generate models to Kotlin, we need to know which package they are under. Add `--packageName=PACKAGENAME` to set the desired package name.\n'); - expect(ctx.stdout).toEqual(''); + expect(ctx.stderr).to.equal('Error: In order to generate models to Kotlin, we need to know which package they are under. Add `--packageName=PACKAGENAME` to set the desired package name.\n'); + expect(ctx.stdout).to.equal(''); done(); }); }); @@ -345,8 +349,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'dart', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './dart')}`, '--packageName', 'asyncapi.models']) .it('works when file path is passed', (ctx, done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toContain( + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.contain( 'Successfully generated the following models: ' ); done(); @@ -356,8 +360,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'dart', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './dart')}`]) .it('fails when no package defined', (ctx, done) => { - expect(ctx.stderr).toEqual('Error: In order to generate models to Dart, we need to know which package they are under. Add `--packageName=PACKAGENAME` to set the desired package name.\n'); - expect(ctx.stdout).toEqual(''); + expect(ctx.stderr).to.equal('Error: In order to generate models to Dart, we need to know which package they are under. Add `--packageName=PACKAGENAME` to set the desired package name.\n'); + expect(ctx.stdout).to.equal(''); done(); }); }); @@ -368,8 +372,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'php', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './php')}`, '--namespace=\'asyncapi.models\'']) .it('works when file path is passed', (ctx, done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toContain( + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.contain( 'Successfully generated the following models: ' ); done(); @@ -379,8 +383,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'php', './test/fixtures/specification.yml', `-o=${ path.resolve(outputDir, './php')}`]) .it('fails when no namespace defined', (ctx, done) => { - expect(ctx.stderr).toEqual('Error: In order to generate models to PHP, we need to know which namespace they are under. Add `--namespace=NAMESPACE` to set the desired namespace.\n'); - expect(ctx.stdout).toEqual(''); + expect(ctx.stderr).to.equal('Error: In order to generate models to PHP, we need to know which namespace they are under. Add `--namespace=NAMESPACE` to set the desired namespace.\n'); + expect(ctx.stdout).to.equal(''); done(); }); }); @@ -390,8 +394,8 @@ describe('models', () => { .stdout() .command([...generalOptions, 'typescript', 'http://localhost:8080/dummySpec.yml', '--log-diagnostics']) .it('works with remote AsyncAPI files', (ctx, done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toMatch('URL http://localhost:8080/dummySpec.yml is valid but has (itself and/or referenced documents) governance issues.'); + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.match(/URL http:\/\/localhost:8080\/dummySpec.yml is valid but has \(itself and\/or referenced documents\) governance issues./); done(); }); }); diff --git a/test/integration/new/file.test.ts b/test/integration/new/file.test.ts index 9e790d69a76..37887068d0d 100644 --- a/test/integration/new/file.test.ts +++ b/test/integration/new/file.test.ts @@ -1,13 +1,14 @@ import { test } from '@oclif/test'; import TestHelper from '../../helpers'; +import { expect } from '@oclif/test'; const testHelper = new TestHelper(); describe('new', () => { - beforeAll(() => { + before(() => { try { testHelper.newCommandHelper().deleteSpecFile(); - } catch (e) { + } catch (e: any) { if (e.code !== 'ENOENT') { throw e; } @@ -24,8 +25,8 @@ describe('new', () => { .stdout() .command(['new', '--no-tty', '-n=specification.yaml']) .it('runs new command', async (ctx,done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toEqual('Created file specification.yaml...\n'); + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.equal('Created file specification.yaml...\n'); done(); }); @@ -34,8 +35,8 @@ describe('new', () => { .stdout() .command(['new:file', '--no-tty', '-n=specification.yaml']) .it('runs new file command', async (ctx,done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toEqual('Created file specification.yaml...\n'); + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.equal('Created file specification.yaml...\n'); done(); }); }); @@ -44,7 +45,7 @@ describe('new', () => { beforeEach(() => { try { testHelper.createSpecFileAtWorkingDir(); - } catch (e) { + } catch (e: any) { if (e.code !== 'EEXIST') { throw e; } @@ -60,8 +61,8 @@ describe('new', () => { .stdout() .command(['new:file', '--no-tty', '-n=specification.yaml']) .it('should inform about the existing file and finish the process', async (ctx,done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toEqual('File specification.yaml already exists. Ignoring...\n'); + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.equal('File specification.yaml already exists. Ignoring...\n'); done(); }); }); diff --git a/test/integration/new/glee.test.ts b/test/integration/new/glee.test.ts index 47d89f9d69e..82a7f6587fb 100644 --- a/test/integration/new/glee.test.ts +++ b/test/integration/new/glee.test.ts @@ -1,14 +1,15 @@ import { test } from '@oclif/test'; import TestHelper from '../../helpers'; import { PROJECT_DIRECTORY_PATH } from '../../helpers'; +import { expect } from '@oclif/test'; const testHelper = new TestHelper(); describe('new glee', () => { - beforeAll(() => { + before(() => { try { testHelper.deleteDummyProjectDirectory(); - } catch (e) { + } catch (e: any) { if (e.code !== 'ENOENT') { throw e; } @@ -25,8 +26,8 @@ describe('new glee', () => { .stdout() .command(['new:glee', '-n=test-project']) .it('runs new glee command with name flag', async (ctx,done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toEqual('Your project "test-project" has been created successfully!\n\nNext steps:\n\n cd test-project\n npm install\n npm run dev\n\nAlso, you can already open the project in your favorite editor and start tweaking it.\n'); + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.equal('Your project "test-project" has been created successfully!\n\nNext steps:\n\n cd test-project\n npm install\n npm run dev\n\nAlso, you can already open the project in your favorite editor and start tweaking it.\n'); done(); }); }); @@ -35,7 +36,7 @@ describe('new glee', () => { beforeEach(() => { try { testHelper.createDummyProjectDirectory(); - } catch (e) { + } catch (e: any) { if (e.code !== 'EEXIST') { throw e; } @@ -51,8 +52,8 @@ describe('new glee', () => { .stdout() .command(['new:glee', '-n=test-project']) .it('should throw error if name of the new project already exists', async (ctx,done) => { - expect(ctx.stderr).toEqual(`Error: Unable to create the project. We tried to use "test-project" as the directory of your new project but it already exists (${PROJECT_DIRECTORY_PATH}). Please specify a different name for the new project. For example, run the following command instead:\n\n asyncapi new glee --name test-project-1\n\n`); - expect(ctx.stdout).toEqual(''); + expect(ctx.stderr).to.equal(`Error: Unable to create the project. We tried to use "test-project" as the directory of your new project but it already exists (${PROJECT_DIRECTORY_PATH}). Please specify a different name for the new project. For example, run the following command instead:\n\n asyncapi new glee --name test-project-1\n\n`); + expect(ctx.stdout).to.equal(''); done(); }); }); diff --git a/test/integration/new/project.test.ts b/test/integration/new/project.test.ts index 2562317bf3e..072abaaa878 100644 --- a/test/integration/new/project.test.ts +++ b/test/integration/new/project.test.ts @@ -1,14 +1,15 @@ import { test } from '@oclif/test'; import TestHelper from '../../helpers'; import { PROJECT_DIRECTORY_PATH } from '../../helpers'; +import { expect } from '@oclif/test'; const testHelper = new TestHelper(); describe('new project', () => { - beforeAll(() => { + before(() => { try { testHelper.deleteDummyProjectDirectory(); - } catch (e) { + } catch (e: any) { if (e.code !== 'ENOENT') { throw e; } @@ -25,8 +26,8 @@ describe('new project', () => { .stdout() .command(['new:project', '-n=test-project']) .it('runs new project command with name flag', async (ctx,done) => { - expect(ctx.stderr).toEqual(''); - expect(ctx.stdout).toEqual('Your project "test-project" has been created successfully!\n\nNext steps:\n\n cd test-project\n npm install\n npm run dev\n\nAlso, you can already open the project in your favorite editor and start tweaking it.\n'); + expect(ctx.stderr).to.equal(''); + expect(ctx.stdout).to.equal('Your project "test-project" has been created successfully!\n\nNext steps:\n\n cd test-project\n npm install\n npm run dev\n\nAlso, you can already open the project in your favorite editor and start tweaking it.\n'); done(); }); }); @@ -35,7 +36,7 @@ describe('new project', () => { beforeEach(() => { try { testHelper.createDummyProjectDirectory(); - } catch (e) { + } catch (e: any) { if (e.code !== 'EEXIST') { throw e; } @@ -51,8 +52,8 @@ describe('new project', () => { .stdout() .command(['new:project', '-n=test-project']) .it('should throw error if name of the new project already exists', async (ctx,done) => { - expect(ctx.stderr).toEqual(`Error: Unable to create the project. We tried to use "test-project" as the directory of your new project but it already exists (${PROJECT_DIRECTORY_PATH}). Please specify a different name for the new project. For example, run the following command instead:\n\n asyncapi new project --name test-project-1\n\n`); - expect(ctx.stdout).toEqual(''); + expect(ctx.stderr).to.equal(`Error: Unable to create the project. We tried to use "test-project" as the directory of your new project but it already exists (${PROJECT_DIRECTORY_PATH}). Please specify a different name for the new project. For example, run the following command instead:\n\n asyncapi new project --name test-project-1\n\n`); + expect(ctx.stdout).to.equal(''); done(); }); }); diff --git a/test/integration/optimize.test.ts b/test/integration/optimize.test.ts index c35ac69df44..91f56938128 100644 --- a/test/integration/optimize.test.ts +++ b/test/integration/optimize.test.ts @@ -3,6 +3,7 @@ import { test } from '@oclif/test'; import TestHelper, { createMockServer, stopMockServer } from '../helpers'; import inquirer from 'inquirer'; import {Optimizations, Outputs} from '../../src/commands/optimize'; +import { expect } from '@oclif/test'; const testHelper = new TestHelper(); const optimizedFilePath = './test/fixtures/specification.yml'; @@ -17,8 +18,8 @@ describe('optimize', () => { .stdout() .command(['optimize', asyncapiv3]) .it('give error', (ctx, done) => { - expect(ctx.stderr).toEqual('Error: Optimize command does not support AsyncAPI v3 yet, please checkout https://github.com/asyncapi/optimizer/issues/168\n'); - expect(ctx.stdout).toEqual(''); + expect(ctx.stderr).to.equal('Error: Optimize command does not support AsyncAPI v3 yet, please checkout https://github.com/asyncapi/optimizer/issues/168\n'); + expect(ctx.stdout).to.equal(''); done(); }); }); @@ -32,11 +33,11 @@ describe('optimize', () => { testHelper.deleteDummyContextFile(); }); - beforeAll(() => { + before(() => { createMockServer(); }); - afterAll(() => { + after(() => { stopMockServer(); }); @@ -45,8 +46,8 @@ describe('optimize', () => { .stdout() .command(['optimize', optimizedFilePath]) .it('works when file path is passed', (ctx, done) => { - expect(ctx.stdout).toContain(`No optimization has been applied since ${optimizedFilePath} looks optimized!`); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.contain(`No optimization has been applied since ${optimizedFilePath} looks optimized!`); + expect(ctx.stderr).to.equal(''); done(); }); @@ -55,8 +56,8 @@ describe('optimize', () => { .stdout() .command(['optimize', './test/fixtures/not-found.yml']) .it('should throw error if file path is wrong', (ctx, done) => { - expect(ctx.stdout).toEqual(''); - expect(ctx.stderr).toContain('ValidationError'); + expect(ctx.stdout).to.equal(''); + expect(ctx.stderr).to.contain('ValidationError'); done(); }); @@ -65,8 +66,8 @@ describe('optimize', () => { .stdout() .command(['optimize', 'http://localhost:8080/dummySpec.yml']) .it('works when url is passed', (ctx, done) => { - expect(ctx.stdout).toContain('No optimization has been applied since http://localhost:8080/dummySpec.yml looks optimized!'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.contain('No optimization has been applied since http://localhost:8080/dummySpec.yml looks optimized!'); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -86,8 +87,8 @@ describe('optimize', () => { .stdout() .command(['optimize']) .it('converts from current context', (ctx, done) => { - expect(ctx.stdout).toContain(`No optimization has been applied since ${path.resolve(__dirname, '../fixtures/specification.yml')} looks optimized!`); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.contain(`No optimization has been applied since ${path.resolve(__dirname, '../fixtures/specification.yml')} looks optimized!`); + expect(ctx.stderr).to.equal(''); done(); }); @@ -100,8 +101,8 @@ describe('optimize', () => { }) .command(['optimize']) .it('throws error message if no current context', (ctx, done) => { - expect(ctx.stdout).toEqual(''); - expect(ctx.stderr).toContain('ValidationError'); + expect(ctx.stdout).to.equal(''); + expect(ctx.stderr).to.contain('ValidationError'); done(); }); }); @@ -110,7 +111,7 @@ describe('optimize', () => { beforeEach(() => { try { testHelper.deleteDummyContextFile(); - } catch (e) { + } catch (e: any) { if (e.code !== 'ENOENT') { throw e; } @@ -122,8 +123,8 @@ describe('optimize', () => { .stdout() .command(['optimize']) .it('throws error message if no context file exists', (ctx, done) => { - expect(ctx.stdout).toEqual(''); - expect(ctx.stderr).toEqual('ValidationError: There is no file or context with name "undefined".\n'); + expect(ctx.stdout).to.equal(''); + expect(ctx.stderr).to.equal('ValidationError: There is no file or context with name "undefined".\n'); done(); }); }); @@ -134,8 +135,8 @@ describe('optimize', () => { .stdout() .command(['optimize', unoptimizedFile, '--no-tty']) .it('process without going to interactive mode.', (ctx, done) => { - expect(ctx.stdout).toContain('asyncapi: 2.0.0'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.contain('asyncapi: 2.0.0'); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -149,8 +150,8 @@ describe('optimize', () => { .stdout() .command(['optimize', unoptimizedFile]) .it('interactive terminal, only remove components and outputs to terminal', (ctx, done) => { - expect(ctx.stdout).toContain('asyncapi: 2.0.0'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.contain('asyncapi: 2.0.0'); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -160,8 +161,8 @@ describe('optimize', () => { .stdout() .command(['optimize',invalidFile]) .it('give ValidationError', (ctx, done) => { - expect(ctx.stderr).toContain('ValidationError'); - expect(ctx.stdout).toEqual(''); + expect(ctx.stderr).to.contain('ValidationError'); + expect(ctx.stdout).to.equal(''); done(); }); }); diff --git a/test/integration/validate.test.ts b/test/integration/validate.test.ts index 40837a77b1f..c0298279bc9 100644 --- a/test/integration/validate.test.ts +++ b/test/integration/validate.test.ts @@ -4,6 +4,7 @@ import path from 'path'; import { test } from '@oclif/test'; import { NO_CONTEXTS_SAVED } from '../../src/errors/context-error'; import TestHelper, { createMockServer, stopMockServer } from '../helpers'; +import { expect } from '@oclif/test'; const testHelper = new TestHelper(); @@ -17,11 +18,11 @@ describe('validate', () => { testHelper.deleteDummyContextFile(); }); - beforeAll(() => { + before(() => { createMockServer(); }); - afterAll(() => { + after(() => { stopMockServer(); }); @@ -30,8 +31,8 @@ describe('validate', () => { .stdout() .command(['validate', './test/fixtures/specification.yml']) .it('works when file path is passed', (ctx, done) => { - expect(ctx.stdout).toMatch('File ./test/fixtures/specification.yml is valid but has (itself and/or referenced documents) governance issues.\n\ntest/fixtures/specification.yml'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.match(/File .\/test\/fixtures\/specification.yml is valid but has \(itself and\/or referenced documents\) governance issues.\n\ntest\/fixtures\/specification.yml/); + expect(ctx.stderr).to.equal(''); done(); }); @@ -40,10 +41,8 @@ describe('validate', () => { .stdout() .command(['validate', './test/fixtures/specification-avro.yml']) .it('works when file path is passed and schema is avro', (ctx, done) => { - expect(ctx.stdout).toMatch( - 'File ./test/fixtures/specification-avro.yml is valid but has (itself and/or referenced documents) governance issues.\n' - ); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.match(/File .\/test\/fixtures\/specification-avro.yml is valid but has \(itself and\/or referenced documents\) governance issues.\n/); + expect(ctx.stderr).to.equal(''); done(); }); @@ -52,8 +51,8 @@ describe('validate', () => { .stdout() .command(['validate', './test/fixtures/not-found.yml']) .it('should throw error if file path is wrong', (ctx, done) => { - expect(ctx.stdout).toEqual(''); - expect(ctx.stderr).toEqual('error loading AsyncAPI document from file: ./test/fixtures/not-found.yml file does not exist.\n'); + expect(ctx.stdout).to.equal(''); + expect(ctx.stderr).to.equal('error loading AsyncAPI document from file: ./test/fixtures/not-found.yml file does not exist.\n'); done(); }); @@ -62,8 +61,8 @@ describe('validate', () => { .stdout() .command(['validate', 'http://localhost:8080/dummySpec.yml']) .it('works when url is passed', (ctx, done) => { - expect(ctx.stdout).toMatch('URL http://localhost:8080/dummySpec.yml is valid but has (itself and/or referenced documents) governance issues.\n\nhttp://localhost:8080/dummySpec.yml'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.match(/URL http:\/\/localhost:8080\/dummySpec.yml is valid but has \(itself and\/or referenced documents\) governance issues.\n\nhttp:\/\/localhost:8080\/dummySpec.yml/); + expect(ctx.stderr).to.equal(''); done(); }); @@ -72,8 +71,8 @@ describe('validate', () => { .stdout() .command(['validate', './test/fixtures/valid-specification-latest.yml']) .it('works when file path is passed', (ctx, done) => { - expect(ctx.stdout).toMatch('File ./test/fixtures/valid-specification-latest.yml is valid! File ./test/fixtures/valid-specification-latest.yml and referenced documents don\'t have governance issues.'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.include('File ./test/fixtures/valid-specification-latest.yml is valid! File ./test/fixtures/valid-specification-latest.yml and referenced documents don\'t have governance issues.'); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -93,8 +92,8 @@ describe('validate', () => { .command(['validate', 'code']) .it('validates if context name exists', (ctx, done) => { const fileName = path.resolve(__dirname, '../fixtures/specification.yml'); - expect(ctx.stdout).toMatch(`File ${fileName} is valid but has (itself and/or referenced documents) governance issues.`); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.include(`File ${fileName} is valid but has (itself and/or referenced documents) governance issues.`); + expect(ctx.stderr).to.equal(''); done(); }); @@ -103,8 +102,8 @@ describe('validate', () => { .stdout() .command(['validate', 'non-existing-context']) .it('throws error if context name is not saved', (ctx, done) => { - expect(ctx.stdout).toEqual(''); - expect(ctx.stderr).toEqual('ContextError: Context "non-existing-context" does not exist.\n'); + expect(ctx.stdout).to.equal(''); + expect(ctx.stderr).to.equal('ContextError: Context "non-existing-context" does not exist.\n'); done(); }); }); @@ -118,19 +117,17 @@ describe('validate', () => { testHelper.setCurrentContext('home'); testHelper.deleteDummyContextFile(); }); - - // eslint-disable-next-line no-warning-comments - // TODO :- Fix it afterwards - // test - // .stderr() - // .stdout() - // .command(['validate']) - // .it('validates from current context', (ctx, done) => { - // const fileName = path.resolve(__dirname, './text/fixtures/specification.yml'); - // expect(ctx.stdout).toMatch(`File ${fileName} is valid but has (itself and/or referenced documents) governance issues`); - // expect(ctx.stderr).toEqual(''); - // done(); - // }); + + test + .stderr() + .stdout() + .command(['validate']) + .it('validates from current context', (ctx, done) => { + const fileName = path.resolve(__dirname, '../../test/fixtures/specification.yml'); + expect(ctx.stdout).to.includes(`File ${fileName} is valid but has (itself and/or referenced documents) governance issues`); + expect(ctx.stderr).to.equal(''); + done(); + }); test .stderr() @@ -141,8 +138,8 @@ describe('validate', () => { }) .command(['validate']) .it('throws error message if no current context', (ctx, done) => { - expect(ctx.stdout).toEqual(''); - expect(ctx.stderr).toEqual('ContextError: No context is set as current, please set a current context.\n'); + expect(ctx.stdout).to.equal(''); + expect(ctx.stderr).to.equal('ContextError: No context is set as current, please set a current context.\n'); done(); }); }); @@ -151,7 +148,7 @@ describe('validate', () => { beforeEach(() => { try { testHelper.deleteDummyContextFile(); - } catch (e) { + } catch (e: any) { if (e.code !== 'ENOENT') { throw e; } @@ -163,8 +160,8 @@ describe('validate', () => { .stdout() .command(['validate']) .it('throws error message if no context file exists', (ctx, done) => { - expect(ctx.stdout).toEqual(''); - expect(ctx.stderr).toEqual(`error locating AsyncAPI document: ${NO_CONTEXTS_SAVED}\n`); + expect(ctx.stdout).to.equal(''); + expect(ctx.stderr).to.equal(`error locating AsyncAPI document: ${NO_CONTEXTS_SAVED}\n`); done(); }); }); @@ -183,8 +180,8 @@ describe('validate', () => { .stdout() .command(['validate', './test/fixtures/specification.yml', '--log-diagnostics']) .it('works with --log-diagnostics', (ctx, done) => { - expect(ctx.stdout).toMatch('File ./test/fixtures/specification.yml is valid but has (itself and/or referenced documents) governance issues.\n\ntest/fixtures/specification.yml'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.match(/File .\/test\/fixtures\/specification.yml is valid but has \(itself and\/or referenced documents\) governance issues.\n\ntest\/fixtures\/specification.yml/); + expect(ctx.stderr).to.equal(''); done(); }); @@ -193,8 +190,8 @@ describe('validate', () => { .stdout() .command(['validate', './test/fixtures/specification.yml', '--no-log-diagnostics']) .it('works with --no-log-diagnostics', (ctx, done) => { - expect(ctx.stdout).toEqual(''); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.equal(''); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -213,8 +210,8 @@ describe('validate', () => { .stdout() .command(['validate', './test/fixtures/specification.yml', '--diagnostics-format=text']) .it('works with --diagnostics-format flag (with governance issues)', (ctx, done) => { - expect(ctx.stdout).toMatch('File ./test/fixtures/specification.yml is valid but has (itself and/or referenced documents) governance issues.\ntest/fixtures/specification.yml:1:1'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.match(new RegExp('File ./test/fixtures/specification.yml is valid but has \\(itself and\\/or referenced documents\\) governance issues.\\ntest\\/fixtures\\/specification.yml:1:1')); + expect(ctx.stderr).to.equal(''); done(); }); @@ -223,8 +220,8 @@ describe('validate', () => { .stdout() .command(['validate', './test/fixtures/valid-specification-latest.yml', '--diagnostics-format=text']) .it('works with --diagnostics-format flag (without governance issues)', (ctx, done) => { - expect(ctx.stdout).toMatch('File ./test/fixtures/valid-specification-latest.yml is valid! File ./test/fixtures/valid-specification-latest.yml and referenced documents don\'t have governance issues.'); - expect(ctx.stderr).toEqual(''); + expect(ctx.stdout).to.include('\nFile ./test/fixtures/valid-specification-latest.yml is valid! File ./test/fixtures/valid-specification-latest.yml and referenced documents don\'t have governance issues.'); + expect(ctx.stderr).to.equal(''); done(); }); }); @@ -243,7 +240,7 @@ describe('validate', () => { .stdout() .command(['validate', './test/fixtures/specification.yml', '--fail-severity=warn']) .it('works with --fail-severity', (ctx, done) => { - expect(ctx.stderr).toMatch('File ./test/fixtures/specification.yml and/or referenced documents have governance issues.\n\ntest/fixtures/specification.yml'); + expect(ctx.stderr).to.include('\nFile ./test/fixtures/specification.yml and/or referenced documents have governance issues.\n\ntest/fixtures/specification.yml'); done(); }); }); diff --git a/test/tsconfig.json b/test/tsconfig.json new file mode 100644 index 00000000000..8c82b0a0459 --- /dev/null +++ b/test/tsconfig.json @@ -0,0 +1,11 @@ +{ + "extends": "../tsconfig", + "compilerOptions": { + "noEmit": true, + }, + "references": [ + { + "path": "../" + } + ] +}